@font-face{font-family:"Hanken Grotesk";src:url(/assets/fonts/hanken-latin.woff2) format("woff2");font-weight:400 600;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/plexmono-400-latin.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/plexmono-500-latin.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Cinzel";src:url(/assets/fonts/cinzel-latin.woff2) format("woff2");font-weight:400 600;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Fraunces";src:url(/assets/fonts/fraunces-latin.woff2) format("woff2");font-weight:300 600;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
/* Layout: dark "system dossier" — single column of indexed sections, spec-sheet rows, one dithered artwork in the hero. Single dark look by design. */
:root{
  --ink:#0b0a08;        /* page */
  --slab:#15130f;       /* raised panels */
  --line:#2d2920;       /* hairlines */
  --bone:#efe6d2;       /* primary text, dither light */
  --ash:#9b968a;        /* secondary text */
  --dim:#847f76;        /* labels */
  --seal:#c9a05a;       /* hanko red, used sparingly */
  --f-display:"Fraunces", "Iowan Old Style", Georgia, serif;
  --f-body:"Hanken Grotesk", "Segoe UI", system-ui, sans-serif;
  --f-mono:"IBM Plex Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;
  --gutter:clamp(16px,4vw,48px);
  --max:1180px;
  color-scheme:dark;
;--seal-text:#d2aa66}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{margin:0;background:var(--ink);color:var(--bone);font-family:var(--f-body);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}
a{color:inherit}
:focus-visible{outline:2px solid var(--bone);outline-offset:3px}
.wrap{max-width:var(--max);margin:0 auto;padding-inline:var(--gutter)}
.mono{font-family:var(--f-mono);font-size:12.5px;letter-spacing:.06em}
.label{font-family:var(--f-mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}

/* language switch: both languages are in the markup; one is hidden */
html:not([data-lang]) [lang="en"], html[data-lang="es"] [lang="en"]:not(html), html[data-lang="en"] [lang="es"]:not(html){display:none!important}

/* NAV */
.nav{position:sticky;top:env(safe-area-inset-top,0px);z-index:10;background:color-mix(in srgb,var(--ink) 88%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.nav .wrap{display:flex;align-items:center;gap:20px;height:56px}
.mark{display:flex;align-items:center;gap:10px;text-decoration:none;font-family:var(--f-mono);font-size:13px;letter-spacing:.08em}
.seal{display:inline-grid;place-items:center;width:26px;height:26px;background:var(--seal);color:var(--ink);font-family:var(--f-display);font-weight:600;font-size:14px;border-radius:3px;line-height:1}
.nav nav{display:flex;gap:18px;margin-left:auto;overflow-x:auto;scrollbar-width:none}
.nav nav a{font-family:var(--f-mono);font-size:12px;letter-spacing:.06em;color:var(--ash);text-decoration:none;white-space:nowrap}
.nav nav a:hover{color:var(--bone)}
.lang{display:flex;border:1px solid var(--line);border-radius:2px;flex:none}
.lang button{all:unset;cursor:pointer;font-family:var(--f-mono);font-size:11.5px;letter-spacing:.08em;padding:4px 9px;color:var(--dim)}
.lang button[aria-pressed="true"]{background:var(--bone);color:var(--ink)}
@media (max-width:760px){.nav .wrap{flex-wrap:wrap;height:auto;padding-block:8px;row-gap:2px}.nav nav{order:3;width:100%;margin:0;gap:6px}.nav nav a{padding:10px 6px}.lang{margin-left:auto}}

/* HERO */
.hero{position:relative;border-bottom:1px solid var(--line);overflow:hidden}
.btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--f-mono);font-size:12.5px;letter-spacing:.08em;text-transform:uppercase;text-decoration:none;padding:10px 16px;border:1px solid var(--line);border-radius:2px;color:var(--bone);transition:background .2s,color .2s,border-color .2s}
.btn:hover{border-color:var(--bone)}

/* VITALS strip */
.vitals{border-bottom:1px solid var(--line)}
.vitals .wrap{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}
.vital{padding:22px 0 22px 20px;border-left:1px solid var(--line)}
.vital:first-child{border-left:0;padding-left:0}
.vital b{display:block;font-family:var(--f-display);font-weight:300;font-size:clamp(32px,4vw,46px);line-height:1;font-variant-numeric:tabular-nums}
@media (max-width:640px){.vitals .wrap{grid-template-columns:repeat(2,minmax(0,1fr))}.vital:nth-child(3){border-left:0;padding-left:0}.vital:nth-child(-n+2){border-bottom:1px solid var(--line)}}

/* SECTIONS */
section.s{border-bottom:1px solid var(--line)}
section.s>.wrap{padding-block:clamp(56px,8vw,104px)}
.idx{display:flex;gap:14px;align-items:baseline;margin-bottom:18px}
.idx .n{color:var(--seal-text)}
h2{font-family:var(--f-display);font-weight:300;font-size:clamp(34px,5vw,58px);line-height:1;letter-spacing:-.01em;margin:0 0 14px;text-wrap:balance}
.lede{color:var(--ash);max-width:60ch;margin:0 0 44px;font-size:17px}

/* Signal: the four things he builds */
.flow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:1px solid var(--line);border-left:1px solid var(--line)}
.flow article{border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:22px 20px 26px;min-width:0;position:relative}
.flow article .label{display:flex;justify-content:space-between}
.flow h3{font-family:var(--f-display);font-weight:400;font-size:26px;margin:28px 0 8px}
.flow p{margin:0;color:var(--ash);font-size:15px}
.flow .tool{margin-top:18px;font-family:var(--f-mono);font-size:12px;color:var(--bone)}
.flow article:not(:last-child)::after{content:"→"/"";position:absolute;right:-9px;top:22px;background:var(--ink);color:var(--dim);font-family:var(--f-mono);font-size:13px;padding:0 2px;z-index:1}
@media (max-width:900px){.flow{grid-template-columns:repeat(2,minmax(0,1fr))}.flow article::after{display:none}}
@media (max-width:520px){.flow{grid-template-columns:1fr}}

/* Now */
.now{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
.panel{background:var(--slab);border:1px solid var(--line);padding:26px;min-width:0;display:flex;flex-direction:column;gap:12px}
.panel h3{font-family:var(--f-display);font-weight:400;font-size:30px;margin:0;line-height:1.1}
.panel p{margin:0;color:var(--ash)}
.status{display:inline-flex;align-items:center;gap:8px}
.status i{width:7px;height:7px;border-radius:50%;background:var(--seal);box-shadow:0 0 0 3px color-mix(in srgb,var(--seal) 25%,transparent)}
.panel .more{margin-top:auto;padding-top:8px}
@media (max-width:760px){.now{grid-template-columns:1fr}}

/* Work */
.work{display:grid;gap:0;border-top:1px solid var(--line)}
.proj{display:grid;grid-template-columns:72px minmax(0,1.1fr) minmax(0,1fr) auto;gap:24px;align-items:start;padding:28px 0;border-bottom:1px solid var(--line);text-decoration:none;transition:background .25s}
.proj:hover{background:var(--slab)}
.proj .label{padding-top:8px}
.proj h3{font-family:var(--f-display);font-weight:400;font-size:clamp(28px,3.4vw,40px);margin:0;line-height:1.05}
.proj p{margin:6px 0 0;color:var(--ash);max-width:48ch}
.tags{display:flex;flex-wrap:wrap;gap:6px;padding-top:8px}
.tag{font-family:var(--f-mono);font-size:11.5px;letter-spacing:.04em;border:1px solid var(--line);padding:3px 8px;color:var(--ash);white-space:nowrap}
.arrow{font-family:var(--f-mono);color:var(--dim);padding-top:8px;transition:transform .25s,color .25s}
.proj:hover .arrow{color:var(--bone);transform:translateX(4px)}
@media (max-width:820px){.proj{grid-template-columns:minmax(0,1fr) auto;padding:24px 12px}.proj .label{grid-column:1/-1;padding-top:0}.proj .tags{grid-column:1/-1}.proj .arrow{grid-row:2;grid-column:2}}
.manifest{margin-top:40px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.manifest div{border-top:1px solid var(--line);padding-top:14px;min-width:0}
.manifest h4{margin:6px 0 4px;font-weight:600;font-size:15px}
.manifest p{margin:0;color:var(--ash);font-size:14.5px}
@media (max-width:760px){.manifest{grid-template-columns:1fr 1fr}}
@media (max-width:480px){.manifest{grid-template-columns:1fr}}

/* Stack */
.stackgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px}
.stackgrid ol{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.stackgrid li{display:grid;grid-template-columns:40px 1fr auto;gap:10px;padding:11px 0;border-bottom:1px solid var(--line);font-family:var(--f-mono);font-size:13.5px}
.stackgrid li span:first-child{color:var(--dim)}
.stackgrid li span:last-child{color:var(--dim);font-size:11.5px;letter-spacing:.08em;text-transform:uppercase}

/* About */
.about{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:clamp(24px,5vw,72px);align-items:start}
.pull{font-family:var(--f-display);font-weight:300;font-size:clamp(26px,3.4vw,40px);line-height:1.2;margin:0;text-wrap:balance}
.pull em{font-style:italic;color:var(--ash)}
.about .body p{color:var(--ash);margin:0 0 14px}
@media (max-width:820px){.about{grid-template-columns:1fr}}

/* Contact */
.contact{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:40px;align-items:end}
.email{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-top:8px}
.email code{font-family:var(--f-mono);font-size:clamp(15px,2vw,19px);background:var(--slab);border:1px solid var(--line);padding:10px 14px;user-select:all;overflow-wrap:anywhere;min-width:0}
.copy{all:unset;cursor:pointer;font-family:var(--f-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;border:1px solid var(--line);padding:10px 14px}
.copy:hover{border-color:var(--bone)}
.links{display:grid;border-top:1px solid var(--line)}
.links a{display:flex;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--line);text-decoration:none;font-family:var(--f-mono);font-size:13.5px}
.links a span:last-child{color:var(--dim)}
.links a:hover span:last-child{color:var(--bone)}
@media (max-width:760px){.contact{grid-template-columns:1fr}}

footer .wrap{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px;padding-block:28px}

.skip{position:absolute;left:12px;top:-60px;z-index:20;background:var(--bone);color:var(--ink);padding:8px 12px;font-family:var(--f-mono);font-size:12px;text-decoration:none}
.skip:focus{top:12px}

/* DITHER FIGURES — same Bayer 8x8 treatment as the hero sphere */
.glyph,.fig canvas{display:block;width:100%;height:auto;image-rendering:pixelated}
.flow .glyph{margin-top:20px;max-width:240px}
.flow h3{margin-top:18px}
.fig{margin:28px 0 0}
.fig figcaption{margin-top:10px;display:flex;justify-content:space-between;gap:12px}
.about .fig{max-width:320px}
.horizon{margin-top:clamp(40px,6vw,72px)}

/* SHOTS — real screenshots, dimmed at rest, full colour on point */
.shots{margin-top:clamp(56px,8vw,96px);border-top:1px solid var(--line);padding-top:28px}
.shots-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) auto;gap:24px;align-items:end;margin-bottom:28px}
.shots-head h3{font-family:var(--f-display);font-weight:300;font-size:clamp(30px,4vw,46px);line-height:1;margin:10px 0 0}
.shots-head p{margin:0;color:var(--ash);max-width:52ch}
.shot-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px}
.shot{all:unset;box-sizing:border-box;display:block;width:100%;cursor:zoom-in}
.shot img{display:block;width:100%;height:auto;aspect-ratio:400/859;object-fit:cover;border:1px solid var(--line);filter:grayscale(1) brightness(.5) contrast(1.05);transition:filter 200ms ease,transform 200ms var(--ease-out),border-color 200ms ease}
.shot:hover img,.shot:focus-visible img{filter:none;border-color:var(--ash);transform:translateY(-4px)}
.shot:focus-visible{outline:2px solid var(--bone);outline-offset:4px}
.shot .cap{display:flex;gap:10px;margin-top:10px;font-family:var(--f-mono);font-size:12px;color:var(--ash)}
.shot:hover .cap,.shot:focus-visible .cap{color:var(--bone)}
@media (max-width:1000px){.shot-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.shots-head{grid-template-columns:1fr}}
@media (max-width:520px){.shot-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (prefers-reduced-motion:reduce){.shot img{transition:none}.shot:hover img,.shot:focus-visible img{transform:none}}
#viewer{border:1px solid var(--line);background:var(--ink);color:var(--bone);padding:0;max-width:min(92vw,560px);max-height:94vh;overflow:auto}
#viewer::backdrop{background:rgba(6,6,5,.88);backdrop-filter:blur(4px)}
#viewer figure{margin:0}
#viewer img{display:block;width:100%;height:auto;max-height:78vh;object-fit:contain;background:#fff}
#viewer figcaption{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;padding:14px 16px 0;font-family:var(--f-mono);font-size:13px}
#viewer #v-d{grid-column:1/-1;color:var(--ash);font-family:var(--f-body);font-size:14.5px}
.v-ctl{display:flex;gap:8px;justify-content:flex-end;padding:12px 16px 16px}
.v-ctl button{all:unset;cursor:pointer;font-family:var(--f-mono);font-size:13px;border:1px solid var(--line);padding:6px 12px}
.v-ctl button:hover,.v-ctl button:focus-visible{border-color:var(--bone)}

/* THEMES — palettes taken from each wallpaper (wallpapers: original art from an earlier version of this portfolio) */
:root{--w-rose:url(/assets/themes/rose.webp);--w-blue-hour:url(/assets/themes/blue-hour.webp);--w-red-august:url(/assets/themes/red-august.webp);--w-teal:url(/assets/themes/teal.webp);--w-forest:url(/assets/themes/forest.webp);--w-chrome:url(/assets/themes/chrome.webp);}
html[data-theme="rose"]{--ink:#f2e4dd;--slab:#ead6cd;--line:#d7bcb1;--bone:#3b2420;--ash:#76574f;--dim:#725751;--seal:#b5483a;--wall:var(--w-rose);color-scheme:light;--seal-text:#ab4538}
html[data-theme="blue-hour"]{--ink:#060a16;--slab:#0c1426;--line:#1e2a44;--bone:#dfe6f2;--ash:#8f9bb3;--dim:#768199;--seal:#e2452f;--wall:var(--w-blue-hour);color-scheme:dark;--seal-text:#e2452f}
html[data-theme="red-august"]{--ink:#120806;--slab:#1c0d09;--line:#3a1a12;--bone:#f3dcc8;--ash:#b8957e;--dim:#977966;--seal:#ee772c;--wall:var(--w-red-august);color-scheme:dark;--seal-text:#ee772c}
html[data-theme="teal"]{--ink:#071416;--slab:#0b1d1f;--line:#1c3336;--bone:#d6ebe8;--ash:#86a6a3;--dim:#6f8b89;--seal:#ff4a3d;--wall:var(--w-teal);color-scheme:dark;--seal-text:#ff4a3d}
html[data-theme="forest"]{--ink:#0b1009;--slab:#121a0f;--line:#26331f;--bone:#e2e8d6;--ash:#9aa58a;--dim:#7c8770;--seal:#a9c26a;--wall:var(--w-forest);color-scheme:dark;--seal-text:#a9c26a}
html[data-theme="chrome"]{--ink:#07050d;--slab:#110b1f;--line:#2a2040;--bone:#e9e4f5;--ash:#a39bbb;--dim:#817899;--seal:#9d6bff;--wall:var(--w-chrome);color-scheme:dark;--seal-text:#9d6bff}
.hero::after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse 46% 62% at 50% 56%,transparent 35%,color-mix(in srgb,var(--ink) 62%,transparent) 72%,var(--ink) 100%),linear-gradient(0deg,var(--ink),transparent 16%);pointer-events:none}
#wallfx{z-index:0}.hero::after{z-index:1}.hero .wrap{position:relative;z-index:3}
.themes{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,250px),1fr));gap:14px}
.theme{all:unset;box-sizing:border-box;display:block;width:100%;cursor:pointer;border:1px solid var(--line);background:var(--ink);transition:border-color 90ms,background-color 90ms}
.theme:hover{border-color:var(--ash)}
.theme[aria-pressed="true"]{border-color:var(--bone);background:var(--slab)}
.theme:focus-visible{outline:2px solid var(--bone);outline-offset:3px}
.theme .sw{display:block;aspect-ratio:16/10;background:center/cover no-repeat;opacity:.72;transition:opacity .17s}
.theme:hover .sw,.theme[aria-pressed="true"] .sw{opacity:1}
.theme .meta{display:flex;justify-content:space-between;gap:10px;padding:12px 14px;border-top:1px solid var(--line)}
.theme .meta b{display:block;font-family:var(--f-display);font-weight:400;font-size:15px;margin-top:4px;color:var(--bone)}
.theme .dots{display:flex;gap:4px;padding-top:2px}
.theme .meta b.ttl{font-size:19px;margin-top:3px;line-height:1.15}
.theme .meta small{display:block;margin-top:4px;font-size:12.5px;line-height:1.35;color:var(--ash)}
.theme .dots i{width:9px;height:9px;border-radius:50%;border:1px solid var(--line)}

/* ANIME THEMES — palettes + original dithered motifs inspired by each title; no frames, characters or logos are used */
html[data-theme="akira"]{--ink:#0a0708;--slab:#140d0e;--line:#2e1c1d;--bone:#f1e4dc;--ash:#a8928d;--dim:#8c7974;--seal:#e0261b;color-scheme:dark;--seal-text:#e2392e}
html[data-theme="gits"]{--ink:#04100d;--slab:#081a16;--line:#163029;--bone:#d4f2e6;--ash:#7fa89a;--dim:#67887d;--seal:#3fe0a0;color-scheme:dark;--seal-text:#3fe0a0}
html[data-theme="eva"]{--ink:#0f0a19;--slab:#181026;--line:#2e2244;--bone:#ece4f6;--ash:#a597bd;--dim:#867a9c;--seal:#8ad33f;color-scheme:dark;--seal-text:#8ad33f}
html[data-theme="bebop"]{--ink:#0e0b07;--slab:#18130c;--line:#352a1b;--bone:#f2e8d4;--ash:#b3a283;--dim:#8b7e67;--seal:#f0b429;color-scheme:dark;--seal-text:#f0b429}
html[data-theme="spirited"]{--ink:#100a0a;--slab:#1b1010;--line:#3a2220;--bone:#f4e6d2;--ash:#b69d8a;--dim:#917b6c;--seal:#e8492c;color-scheme:dark;--seal-text:#e8492c}
html[data-theme="mononoke"]{--ink:#0a110c;--slab:#111b14;--line:#253629;--bone:#e4ecd8;--ash:#9caf93;--dim:#76876f;--seal:#c9342a;color-scheme:dark;--seal-text:#ce594d}
html[data-theme="yourname"]{--ink:#0b0e22;--slab:#131838;--line:#283062;--bone:#f1edff;--ash:#a3a6cf;--dim:#8082a9;--seal:#ff8fbf;color-scheme:dark;--seal-text:#ff8fbf}
html[data-theme="aot"]{--ink:#100e0c;--slab:#1a1714;--line:#38322b;--bone:#ece3d3;--ash:#ab9f8c;--dim:#8b8273;--seal:#b8322a;color-scheme:dark;--seal-text:#c45c53}
html[data-theme="fma"]{--ink:#0e0a06;--slab:#18120a;--line:#3a2c18;--bone:#f3e6c9;--ash:#b8a27c;--dim:#907e60;--seal:#d93a2b;color-scheme:dark;--seal-text:#db4838}
html[data-theme="kimetsu"]{--ink:#0c0806;--slab:#17100c;--line:#3a2519;--bone:#f6e7d6;--ash:#b89e8a;--dim:#907b6a;--seal:#ff5a1f;--alt:#3aa673;color-scheme:dark;--seal-text:#ff5a1f}
html[data-theme="deathnote"]{--ink:#060606;--slab:#101010;--line:#272727;--bone:#eceae6;--ash:#9a9690;--dim:#817d78;--seal:#c8101e;color-scheme:dark;--seal-text:#d14952}
html[data-theme="steins"]{--ink:#0b0805;--slab:#16100a;--line:#33261a;--bone:#f3e3cd;--ash:#b39c80;--dim:#8e7c66;--seal:#ff8a2a;color-scheme:dark;--seal-text:#ff8a2a}
#wallfx{position:absolute;top:0;bottom:0;left:50%;width:min(100%,1600px);height:100%;transform:translateX(-50%);object-fit:cover;object-position:center bottom;image-rendering:pixelated;pointer-events:none}
@media (max-width:860px){.hero::after{background:linear-gradient(0deg,var(--ink) 6%,color-mix(in srgb,var(--ink) 58%,transparent) 60%,color-mix(in srgb,var(--ink) 30%,transparent))}#wallfx{opacity:.55}}
.theme canvas.sw{width:100%;height:auto;image-rendering:pixelated}
.themes-sub{display:flex;justify-content:space-between;gap:12px;margin:48px 0 16px;padding-top:14px;border-top:1px solid var(--line)}

/* THEME KIT — each theme also swaps the display face, the seal, the watermark and the section marks */
:root{--f-kanji:"Shippori Mincho B1","Yu Mincho","Hiragino Mincho ProN",serif}
html[data-font="mincho"]{--f-display:"Shippori Mincho B1","Yu Mincho",Georgia,serif}
html[data-font="tech"]{--f-display:"Chakra Petch","Segoe UI",system-ui,sans-serif}
.seal.k{font-family:var(--f-kanji);font-weight:600;font-size:15px}
.idx .mk{margin-left:auto;font-family:var(--f-kanji);font-size:22px;line-height:1;color:var(--seal-text);letter-spacing:0;text-transform:none}
.idx .mk:empty{display:none}

html[data-theme="onepiece"]{--ink:#07111c;--slab:#0c1a28;--line:#1f3348;--bone:#f4ead8;--ash:#9fb0bf;--dim:#778695;--seal:#e23b2e;color-scheme:dark;--seal-text:#e34638}
html[data-theme="naruto"]{--ink:#0e0a06;--slab:#18120a;--line:#3a2a17;--bone:#f5e7d0;--ash:#b8a07e;--dim:#927e60;--seal:#ff7a1a;color-scheme:dark;--seal-text:#ff7a1a}
html[data-theme="dbz"]{--ink:#0c0904;--slab:#171008;--line:#382a15;--bone:#f7ecd6;--ash:#bba680;--dim:#8f7d5e;--seal:#ffa31a;color-scheme:dark;--seal-text:#ffa31a}
html[data-theme="jjk"]{--ink:#07070c;--slab:#0e0e18;--line:#232338;--bone:#e6e8f5;--ash:#9a9dbb;--dim:#787b9b;--seal:#8b5cf6;color-scheme:dark;--seal-text:#8b5cf6}
html[data-theme="csm"]{--ink:#0b0807;--slab:#16100e;--line:#362520;--bone:#f2e3da;--ash:#b39b8f;--dim:#8f7b72;--seal:#ff3b1f;color-scheme:dark;--seal-text:#ff3b1f}
html[data-theme="hxh"]{--ink:#070d0a;--slab:#0d1812;--line:#20352a;--bone:#e3f2e8;--ash:#94b3a0;--dim:#6c8978;--seal:#3ad17a;color-scheme:dark;--seal-text:#3ad17a}
html[data-theme="berserk"]{--ink:#070505;--slab:#110b0b;--line:#2c1d1d;--bone:#eae1dc;--ash:#a3958f;--dim:#857a75;--seal:#b3121b;color-scheme:dark;--seal-text:#c55459}
html[data-theme="vinland"]{--ink:#0a0e12;--slab:#111820;--line:#26323e;--bone:#e9eef2;--ash:#9aa8b4;--dim:#77838e;--seal:#d0a248;color-scheme:dark;--seal-text:#d0a248}
html[data-theme="frieren"]{--ink:#0b1018;--slab:#121a26;--line:#283548;--bone:#eef3f6;--ash:#a1afbe;--dim:#788696;--seal:#8fd0c9;color-scheme:dark;--seal-text:#8fd0c9}
html[data-theme="mob"]{--ink:#0d0812;--slab:#170f20;--line:#33244a;--bone:#f4ecfa;--ash:#b2a2c4;--dim:#887a9b;--seal:#ff5fa2;color-scheme:dark;--seal-text:#ff5fa2}
html[data-theme="ttgl"]{--ink:#0c0706;--slab:#170e0c;--line:#38211c;--bone:#f6e6dc;--ash:#b89c8e;--dim:#90796d;--seal:#ff3d2e;color-scheme:dark;--seal-text:#ff3d2e}
html[data-theme="codegeass"]{--ink:#0a0610;--slab:#140c1e;--line:#2f2142;--bone:#efe6f6;--ash:#a99bbb;--dim:#877a97;--seal:#c0267a;color-scheme:dark;--seal-text:#c84990}
/* MOTION — rare, page-level moments only (load + first view of each section). Nav, buttons, copy: instant. */
:root{--ease-out:cubic-bezier(.23,1,.32,1);--ease-in-out:cubic-bezier(.77,0,.175,1)}
@media (prefers-reduced-motion:no-preference){
  /* hero: staggered entrance on load */
  .js .hero [data-in]{opacity:0;transform:translateY(12px);animation:rise .55s var(--ease-out) forwards;animation-delay:calc(var(--i,0) * 50ms + 40ms)}
  @keyframes rise{to{opacity:1;transform:none;filter:none}}
  @keyframes fade{to{opacity:1}}
  .js .beam,.js .halo{opacity:0;animation:fade .9s var(--ease-out) forwards}
  .js .beam{animation-delay:.08s}
  .js .halo{animation-delay:.3s}
  /* sections: reveal once when they first enter the viewport */
  .reveal [data-reveal]>:not(dialog){opacity:0;transform:translateY(12px);transition:opacity .5s var(--ease-out),transform .5s var(--ease-out);transition-delay:calc(min(var(--i,0),4) * 60ms)}
  .reveal [data-reveal].in>:not(dialog){opacity:1;transform:none}
}

/* SIGNAL as a scroll-scrubbed sequence (scroll drives time, Scroll World style): desktop + motion allowed only */
.flow .bar{position:absolute;left:0;top:-1px;height:2px;width:100%;background:var(--seal);transform:scaleX(0);transform-origin:left}
@media (min-width:901px) and (prefers-reduced-motion:no-preference){
  .js #signal.scrub{height:180vh;border-bottom:1px solid var(--line)}
  .js #signal.scrub>.wrap{position:sticky;top:56px;min-height:calc(100vh - 56px);display:flex;flex-direction:column;justify-content:flex-start;padding-top:clamp(24px,5vh,56px)}
  .js #signal.scrub .flow article{transition:opacity .35s var(--ease-out)}
  .js #signal.scrub .flow article:not(.on){opacity:.6}
  .js #signal.scrub .flow article.on h3{color:var(--bone)}
}

/* POLISH — browser surfaces follow the theme */
::selection{background:var(--seal);color:var(--ink)}
html{scrollbar-color:var(--line) var(--ink);accent-color:var(--seal);caret-color:var(--seal)}
a{text-underline-offset:.2em}

/* press feedback: pressable things answer the pointer (Emil: 0.97, 160ms ease-out) */
.btn,.copy,.theme,.shot,.lang button,.v-ctl button{transition:transform 160ms cubic-bezier(.23,1,.32,1),border-color 90ms,background-color 90ms,color 90ms}
.btn:active,.copy:active,.theme:active,.shot:active,.lang button:active,.v-ctl button:active{transform:scale(.97)}

/* hover lifts only where hover exists; taps must not leave a stuck state */
@media (hover:none){.shot img,.shot:hover img{transform:none;filter:none}.proj:hover .arrow{transform:none}}

/* touch targets */
@media (pointer:coarse){.lang button,.v-ctl button,.copy,.btn,.nav nav a{min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:center;gap:8px;box-sizing:border-box}}
.nav nav a{flex:none}

/* viewer: occasional, so it earns a short entrance; exit stays instant */
#viewer[open]{animation:none;transition:opacity 200ms cubic-bezier(.23,1,.32,1),transform 200ms var(--ease-out)}
@starting-style{#viewer[open]{opacity:0;transform:scale(.96)}}
#viewer[open]::backdrop{transition:opacity 200ms ease-out}
@starting-style{#viewer[open]::backdrop{opacity:0}}
@media (prefers-reduced-motion:reduce){.btn:active,.copy:active,.theme:active,.shot:active,.lang button:active,.v-ctl button:active{transform:none}@starting-style{#viewer[open]{transform:none}}}

/* DESIGN PASS (taste · ui-ux-pro-max · break-ui · improve-animations · impeccable) */
.lang button:focus-visible,.copy:focus-visible,.more-themes>summary:focus-visible{outline:2px solid var(--bone);outline-offset:3px}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.email a.mail{text-decoration:none;color:inherit}
.email a.mail:hover code,.email a.mail:focus-visible code{border-color:var(--bone)}
.nav nav a[aria-current]{color:var(--bone)}
.nav nav a[aria-current]::before{content:"// "/"";color:var(--seal-text)}
.more-themes>summary{cursor:pointer;list-style:none;display:flex}
.more-themes>summary::-webkit-details-marker{display:none}
.more-themes>summary>span:first-child::after{content:" +"/"";color:var(--seal-text)}
.more-themes[open]>summary>span:first-child::after{content:" −"/""}
@media (max-width:560px){.themes{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.theme .meta{padding:8px 10px}.theme .meta small,.theme .dots{display:none}.theme .meta b.ttl{font-size:15px}}
@media (max-width:900px){.stackgrid{grid-template-columns:1fr 1fr}}
@media (max-width:560px){.stackgrid{grid-template-columns:1fr}}

/* theme switch: the one deliberate moment, the new palette spreads from the chosen card */
::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}
@media (prefers-reduced-motion:no-preference){
  ::view-transition-new(root){animation:theme-in 560ms var(--ease-out)}
  @keyframes theme-in{from{clip-path:circle(0 at var(--vt-x,50%) var(--vt-y,50%))}to{clip-path:circle(150vmax at var(--vt-x,50%) var(--vt-y,50%))}}
}
@media (prefers-reduced-motion:reduce){::view-transition-new(root){animation:vt-fade 160ms ease}@keyframes vt-fade{from{opacity:0}}}

/* ROUND 2 — web-perf · seo-audit · web-design-guidelines */
html{scroll-padding-top:72px;-webkit-tap-highlight-color:transparent}
@media (max-width:760px){html{scroll-padding-top:112px}}
button,a,.theme,.shot{touch-action:manipulation}
.wrap{padding-inline:max(var(--gutter),env(safe-area-inset-left)) max(var(--gutter),env(safe-area-inset-right))}
.nav{top:0;padding-top:env(safe-area-inset-top,0px)}
#viewer{overscroll-behavior:contain}
.js #themes:not(.near) .sw{background-image:none!important}
.motion{all:unset;cursor:pointer;color:var(--ash);background:var(--ink);border:1px solid var(--line);padding:3px 8px;font-family:var(--f-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;flex:none}
.motion:hover,.motion:focus-visible{color:var(--bone);border-color:var(--bone)}
.motion:focus-visible{outline:2px solid var(--bone);outline-offset:2px}
.motion[aria-pressed="true"]{color:var(--ink);background:var(--bone);border-color:var(--bone)}
@media (pointer:coarse){.motion{min-height:44px;display:inline-flex;align-items:center;box-sizing:border-box}}

/* HERO — HVMANITY composition on the Ryoku dossier: centred dithered figure, light from above, halo, orbit, embers */
:root{--f-hero:"Cinzel","Trajan Pro",Georgia,serif}
html[data-font]{--f-hero:var(--f-display)}
.hero{min-height:clamp(480px,calc(100svh - 57px),960px)}
.hv{min-height:inherit;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto 1fr auto auto;column-gap:24px;padding-block:clamp(26px,5vh,52px) clamp(22px,4vh,40px)}
.corner{margin:0;font-weight:500;text-shadow:0 0 14px var(--ink),0 0 3px var(--ink);font-family:var(--f-hero);font-size:13px;letter-spacing:.2em;text-transform:uppercase;line-height:1.85;color:var(--bone)}
html[data-font] .corner{font-family:var(--f-mono);font-size:11.5px}
.corner em{font-style:normal;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.45em}
.corner.tl{grid-area:1/1}
.corner.tr{grid-area:1/2;justify-self:end;text-align:right}
.hero h1{grid-column:1/-1;grid-row:2;font-family:var(--f-hero);font-weight:500;font-variation-settings:normal;font-size:clamp(64px,min(15vw,28svh),216px);letter-spacing:.08em;line-height:.92;margin:clamp(14px,4vh,40px) 0 0;color:var(--bone);text-shadow:0 0 42px color-mix(in srgb,var(--ink) 85%,transparent),0 0 2px color-mix(in srgb,var(--ink) 60%,transparent)}
html[data-font] .hero h1{font-weight:400;letter-spacing:.02em;font-size:clamp(64px,min(15vw,28svh),216px)}
.hv-line{grid-column:1/-1;grid-row:3;justify-self:end;display:flex;align-items:center;gap:18px;margin:6px 0 0;text-shadow:0 0 18px var(--ink),0 0 4px var(--ink);font-family:var(--f-hero);font-size:clamp(15px,2vw,26px);letter-spacing:.24em;text-transform:uppercase;color:var(--bone)}
.hv-line .rule{width:clamp(80px,22vw,380px);height:1px;background:color-mix(in srgb,var(--bone) 40%,transparent)}
.ringo{display:inline-grid;place-items:center;width:1.25em;height:1.25em;border:1px solid var(--seal);border-radius:50%;box-shadow:0 0 12px color-mix(in srgb,var(--seal) 70%,transparent);margin-inline:.04em;letter-spacing:0}
.corner.ml{grid-column:1;grid-row:4;align-self:center}
.corner.br{grid-column:2;grid-row:5;justify-self:end;text-align:right;align-self:end}
.hv-foot{grid-column:1;grid-row:5;align-self:end;display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}
.hv-cta{grid-column:1/-1;grid-row:6;justify-self:center;display:flex;flex-direction:column;align-items:center;gap:14px;margin-top:clamp(18px,3vh,30px)}
.hv-btn{font-family:var(--f-hero);letter-spacing:.24em;padding:14px 34px;border-color:color-mix(in srgb,var(--bone) 55%,transparent);background:color-mix(in srgb,var(--ink) 80%,transparent)}
html[data-font] .hv-btn{font-family:var(--f-mono)}
.hv-btn:hover{border-color:var(--seal);color:var(--bone)}
.hv-links{display:flex;gap:18px;font-family:var(--f-mono);font-size:12px;letter-spacing:.08em}
.hv-links a{color:var(--ash);text-decoration:none}
.hv-links a:hover,.hv-links a:focus-visible{color:var(--bone)}
.beam{position:absolute;inset:-8% 20% 25%;z-index:1;pointer-events:none;mix-blend-mode:screen;
  background:radial-gradient(ellipse 32% 78% at 50% 0%,color-mix(in srgb,var(--seal) 34%,transparent),transparent 72%),
             repeating-conic-gradient(from 160deg at 50% -6%,transparent 0deg 3deg,color-mix(in srgb,var(--seal) 10%,transparent) 3deg 4deg,transparent 4deg 7deg);
  -webkit-mask:linear-gradient(180deg,#000 10%,transparent 92%);mask:linear-gradient(180deg,#000 10%,transparent 92%)}
.halo{position:absolute;left:50%;top:var(--halo-y,22.5%);width:clamp(130px,15vw,250px);aspect-ratio:4.4/1;transform:translate(-50%,-50%);border-radius:50%;z-index:2;pointer-events:none;
  border:2px solid color-mix(in srgb,var(--seal) 70%,#fff);box-shadow:0 0 14px var(--seal),0 0 38px color-mix(in srgb,var(--seal) 55%,transparent),inset 0 0 10px color-mix(in srgb,var(--seal) 80%,transparent)}
html[data-theme] .halo{display:none}
.orbit{position:absolute;left:50%;top:66%;width:min(92vw,1120px);height:clamp(150px,22vw,300px);transform:translate(-50%,-50%) rotate(-11deg);z-index:2;pointer-events:none;overflow:visible}
.orbit ellipse{fill:none;stroke:color-mix(in srgb,var(--seal) 60%,transparent);stroke-width:1}
.embers{position:absolute;inset:0;z-index:2;pointer-events:none;overflow:hidden}
.embers i{position:absolute;bottom:-4%;width:var(--s,3px);height:var(--s,3px);border-radius:50%;background:color-mix(in srgb,var(--seal) 75%,#fff);box-shadow:0 0 8px var(--seal),0 0 2px #fff;opacity:0}
@media (prefers-reduced-motion:no-preference){.embers i{animation:ember var(--d,10s) linear var(--delay,0s) infinite}}
@keyframes ember{0%{opacity:0;transform:translate3d(0,0,0)}12%{opacity:var(--o,.85)}70%{opacity:calc(var(--o,.85) * .6)}100%{opacity:0;transform:translate3d(var(--dx,20px),-78vh,0)}}
.still .embers{display:none}
@media (max-width:860px){
  .hv{grid-template-columns:1fr;grid-template-rows:none;row-gap:14px}
  .corner.tl,.corner.tr,.corner.ml,.corner.br,.hero h1,.hv-line,.hv-foot,.hv-cta{grid-area:auto;justify-self:start;text-align:left}
  .hv-line{justify-self:end}
  .corner{font-size:11.5px;letter-spacing:.16em}
  .hv-cta{justify-self:stretch;align-items:flex-start}
  .halo{display:none}
  .hv-line{font-size:13px;letter-spacing:.18em;white-space:nowrap;gap:10px}
  .hv-line .rule{width:28px}
  .orbit{opacity:.5;top:58%}
}
html[data-theme="rose"] #wallfx{opacity:.42}

/* ROUND 3 — perf · impeccable · break-ui · motion · guidelines */
.hv-line,.corner,.hv-foot .label,.hv-links a{paint-order:stroke fill;-webkit-text-stroke:.3em var(--ink)}
.corner em,.ringo,.hv-line .vh{-webkit-text-stroke:0}
.hv-foot .label,.hv-links a{color:var(--ash)}
html[data-theme="rose"] .corner,html[data-theme="rose"] .hv-line{font-weight:600;text-shadow:none}
@media (min-width:1601px){#wallfx{-webkit-mask:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);mask:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}}
@keyframes vt-fade{from{opacity:0}}
html.still::view-transition-new(root){animation:vt-fade 160ms ease}
@media (prefers-reduced-motion:reduce){.motion{display:none}}
@media (pointer:coarse){.hv-links a{min-height:44px;display:inline-flex;align-items:center}}
@media (max-width:860px){.hv{grid-template-columns:minmax(0,1fr)}.hv-btn{padding-inline:20px;white-space:nowrap}.embers i:nth-child(n+13){display:none}}
@media (max-width:400px){.hv-line{letter-spacing:.12em}.hv-line .rule{display:none}}
.no-halo .halo{display:none}
