/* v139 — Target only the small floating glyphs shown in the screenshots.
   Do not suppress the background, collage, section art, or media framing. */

/* Tiny crosses, stars, floating arrows and corner tabs on portfolio tiles. */
html body #home .category-menu > .category-card::after,
html body #home .category-menu > .category-card > .category-visual .visual-cross,
html body #home .category-menu > .category-card > .category-visual .visual-motion-lines,
html body #home .category-menu > .category-card > .category-visual .anim3d-orbit,
html body #home .category-menu > .category-card > .category-visual .anim3d-grid,
html body #home .category-menu > .category-card > .category-visual .projects-orbit,
html body #home .category-menu > .category-card > .category-visual .projects-pixels,
html body #home .category-menu > .category-card > .category-visual .art2d-pixels {
  display:none!important;
  content:none!important;
}

/* Remove small decorative crosses on the hero without touching its imagery. */
html body #home .od-cross,
html body #home .od-spark,
html body #home .od-plus-corner {
  display:none!important;
}

/* Keep the portrait image clear, without scanning lines or floating symbols. */
html body #about .portrait-cross,
html body #about .portrait-scanline {
  display:none!important;
}

/* v140 — Remove exactly the screenshot-marked card ornaments.
   The footer strips are also deleted from HTML, so they cannot reappear. */
html body #views #home .category-menu > a.category-card > .category-info,
html body #views #home .category-menu > a.category-card .category-arrow,
html body #views #home .category-menu > a.category-card .visual-cross {
  display:none!important;
}
html body #views #home .category-menu > a.category-card > .category-visual {
  flex:1 1 auto;
}

/* v176 — Remove ONLY the static tilted + / × / ✳ on the upper-right
   of each index card. These glyphs are generated by h2.category-title::after
   in typography-v46.css and y2k-underground.css. The separate animated
   .od-edge-overlay / .od-corner-cross at the upper-left stays untouched. */
html body #views #home .category-menu > a.category-card > h2.category-title::after {
  content:none !important;
  display:none !important;
}

/* Do not touch the hero atmosphere, wallpaper, video imagery, or card titles. */

/* v151 — Both accents share the preview's actual layout and clip coordinates,
   supplied by category-edge-alignment-v151.js. They deliberately sit OUTSIDE
   the preview clip so half the cross does not get cut away at the corner. */

/* Eliminate legacy pseudo-marker on the card itself. */
html body #views #home .category-menu > a.category-card::before,
html body #views #home .category-menu > a.category-card::after {
  content:none !important;
  display:none !important;
}

/* The dedicated overlay sits ABOVE all five cards, even when a neighboring
   tile creates its own stacking context or is hovered. Not a grid item. */
html body #views #home .category-menu {
  position:relative !important;
}
html body #views #home .category-menu > .od-edge-overlay-layer {
  position:absolute !important;
  inset:0 !important;
  z-index:999 !important;
  pointer-events:none !important;
  overflow:visible !important;
  isolation:isolate;
  transition:opacity 180ms ease;
}
/* The card entrance animates each tile separately: avoid detached markers
   appearing over still-hidden artwork during the initial stagger. */
html.od-entry-armed:not(.motion-paused) body #views #home .category-menu > .od-edge-overlay-layer,
html.od-entry-playing:not(.motion-paused) body #views #home .category-menu > .od-edge-overlay-layer {
  opacity:0 !important;
}

/* A zero-layout overlay, positioned on top of .category-visual via its
   measured offset, dimensions and 3D transform. It inherits the card rotation. */
html body #views #home .category-menu > :is(a.category-card, .od-edge-overlay-layer) > .od-edge-overlay {
  display:block !important;
  position:absolute !important;
  left:0;
  top:0;
  width:0;
  height:0;
  z-index:20 !important;
  overflow:visible !important;
  pointer-events:none !important;
  background:none !important;
  border:0 !important;
  box-shadow:none !important;
  transform-origin:center center !important;
}

html body #views #home .category-menu > :is(a.category-card, .od-edge-overlay-layer) > .od-edge-overlay > svg.od-edge-rail {
  display:block !important;
  position:absolute !important;
  inset:0 !important;
  width:100% !important;
  height:100% !important;
  overflow:visible !important;
  pointer-events:none !important;
  background:none !important;
  opacity:1 !important;
}

/* SVG path is constructed from the real computed clip-path polygon, not from
   guessed slopes. It starts at the cross's center and ends at the last pixel
   of the preview's top border. Its physical thickness never distorts. */
html body #views #home .category-menu > :is(a.category-card, .od-edge-overlay-layer) > .od-edge-overlay > svg.od-edge-rail > path {
  fill:none !important;
  stroke:var(--od-signal,#D1FF00) !important;
  stroke-width:5 !important;
  stroke-linecap:butt !important;
  vector-effect:non-scaling-stroke;
  stroke-dasharray:100;
  stroke-dashoffset:100;
  transition:stroke-dashoffset 340ms cubic-bezier(.18,.83,.22,1) 45ms;
}

/* Exactly on the polygon corner (the SVG line starts at the same point).
   The cross lives outside .category-visual to avoid being clipped. */
html body #views #home .category-menu > :is(a.category-card, .od-edge-overlay-layer) > .od-edge-overlay > .od-corner-cross {
  display:block !important;
  position:absolute !important;
  left:0;
  top:0;
  width:20px !important;
  height:20px !important;
  z-index:21 !important;
  pointer-events:none !important;
  background:none !important;
  border:0 !important;
  opacity:1;
  transform:translate(-50%,-50%) rotate(0deg) scale(1);
  transform-origin:center center !important;
  transition:transform 185ms cubic-bezier(.19,.84,.25,1),
             opacity 105ms ease-in 70ms;
}
html body #views #home .category-menu > :is(a.category-card, .od-edge-overlay-layer) > .od-edge-overlay > .od-corner-cross::before,
html body #views #home .category-menu > :is(a.category-card, .od-edge-overlay-layer) > .od-edge-overlay > .od-corner-cross::after {
  content:"" !important;
  display:block !important;
  position:absolute !important;
  left:50% !important;
  top:50% !important;
  background-color:var(--od-signal,#D1FF00) !important;
  background-image:none !important;
  border:0 !important;
  border-radius:0 !important;
  box-shadow:none !important;
  opacity:1 !important;
  transform:translate(-50%,-50%) !important;
}
html body #views #home .category-menu > :is(a.category-card, .od-edge-overlay-layer) > .od-edge-overlay > .od-corner-cross::before {
  width:20px !important;
  height:4px !important;
}
html body #views #home .category-menu > :is(a.category-card, .od-edge-overlay-layer) > .od-edge-overlay > .od-corner-cross::after {
  width:4px !important;
  height:20px !important;
}

/* Immediate 265-degree turn and contraction; the connected line follows a
   moment later and decelerates gently over the remainder of the edge. */
html body #views #home .category-menu > a.category-card:hover > .od-edge-overlay > .od-corner-cross,
html body #views #home .category-menu > a.category-card:focus-visible > .od-edge-overlay > .od-corner-cross {
  transform:translate(-50%,-50%) rotate(265deg) scale(.12);
  opacity:0;
}
html body #views #home .category-menu > a.category-card:hover > .od-edge-overlay > svg.od-edge-rail > path,
html body #views #home .category-menu > a.category-card:focus-visible > .od-edge-overlay > svg.od-edge-rail > path {
  stroke-dashoffset:0;
}
/* Once portaled into the common layer, the overlay is no longer a child
   of the hovered link. Synchronize exactly the old transitions via JS. */
html body #views #home .category-menu > .od-edge-overlay-layer > .od-edge-overlay.is-interacting > .od-corner-cross {
  transform:translate(-50%,-50%) rotate(265deg) scale(.12);
  opacity:0;
}
html body #views #home .category-menu > .od-edge-overlay-layer > .od-edge-overlay.is-interacting > svg.od-edge-rail > path {
  stroke-dashoffset:0;
}
html body #views #home .category-menu > .od-edge-overlay-layer > .od-edge-overlay:not(.is-interacting) > svg.od-edge-rail > path {
  transition-duration:200ms;
  transition-delay:0ms;
}
html body #views #home .category-menu > .od-edge-overlay-layer > .od-edge-overlay:not(.is-interacting) > .od-corner-cross {
  transition:transform 210ms cubic-bezier(.2,.77,.3,1),opacity 115ms ease-out 70ms;
}

/* Pointer exit retracts the line quickly. The cross returns smoothly rather
   than restarting a keyframe sequence and snapping into place. */
html body #views #home .category-menu > a.category-card:not(:hover):not(:focus-visible) > .od-edge-overlay > svg.od-edge-rail > path {
  transition-duration:200ms;
  transition-delay:0ms;
}
html body #views #home .category-menu > a.category-card:not(:hover):not(:focus-visible) > .od-edge-overlay > .od-corner-cross {
  transition:transform 210ms cubic-bezier(.2,.77,.3,1),opacity 115ms ease-out 70ms;
}
@media (prefers-reduced-motion:reduce) {
  html body #views #home .category-menu > .od-edge-overlay-layer > .od-edge-overlay .od-corner-cross,
  html body #views #home .category-menu > .od-edge-overlay-layer > .od-edge-overlay .od-edge-rail > path,
  html body #views #home .category-menu > a.category-card .od-edge-overlay .od-corner-cross,
  html body #views #home .category-menu > a.category-card .od-edge-overlay .od-edge-rail > path {
    transition:none !important;
  }
}

/* v152 — Clean lower page chrome without touching the restored hover flourish.
   Remove the horizontal footer separator and any generated bottom rules. */
html body #views #home .index-footer.od-footer-v76 {
  border-top:0 !important;
  border-bottom:0 !important;
  box-shadow:none !important;
  background-image:none !important;
}
html body #views #home .index-footer.od-footer-v76::before,
html body #views #home .index-footer.od-footer-v76::after {
  content:none !important;
  display:none !important;
}
