:root{
  --acid:#e4ff57;--ink:#111210;--paper:#f3f4ee;--ember:#ff7845;--muted:#8d9183;--line:#ffffff24;
  --display:"Dela Gothic One","Hiragino Sans",sans-serif;
  --mincho:"Shippori Mincho","Hiragino Mincho ProN","Yu Mincho",serif;
  --body:"Zen Kaku Gothic New","Hiragino Sans","Noto Sans JP",Meiryo,sans-serif;
  --serif:"Instrument Serif",Georgia,serif;
  --mono:"Martian Mono",ui-monospace,SFMono-Regular,Consolas,monospace;
  --gutter:clamp(18px,4.4vw,72px);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:80px}
body{margin:0;background:var(--ink);color:var(--paper);font-family:var(--body);-webkit-font-smoothing:antialiased;overflow-x:hidden}
.no-webgl body{background:radial-gradient(circle at 70% 30%,#2a2f1a 0%,var(--ink) 55%)}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit}
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid var(--acid);outline-offset:4px}
::selection{background:var(--acid);color:var(--ink)}
.skip-link{position:fixed;top:-100px;left:20px;padding:14px;background:var(--acid);color:var(--ink);z-index:100}
.skip-link:focus{top:10px}

#gl{position:fixed;inset:0;width:100%;height:100%;z-index:0;display:block}
.no-gl #gl{display:none}
/* WebGL paints these; the DOM originals stay for layout, screen readers and search. */
.gl [data-gl]{opacity:0}
.grain{position:fixed;inset:-50%;z-index:40;pointer-events:none;opacity:.075;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
/* No z-index on main: headings must blend (difference) with the canvas itself. */
main,.footer{position:relative}
.plate > :not(.glyph):not(.caption),.chapter > :not(.plate){position:relative}

/* Loader: the canvas draws the spark; this layer only carries words. */
.loader{display:none}
.motion .loader{display:flex;position:fixed;inset:0;z-index:60;flex-direction:column;justify-content:flex-end;padding:0 var(--gutter) 40px;pointer-events:none}
.loader-line{font:500 clamp(20px,2.4vw,34px)/1.7 var(--mincho);margin:0 0 50px;letter-spacing:.08em}
.loader-foot{display:flex;justify-content:space-between;align-items:end;font:10px var(--mono);letter-spacing:.14em;color:var(--muted)}
.loader-count{font:clamp(40px,6vw,90px)/1 var(--display);color:var(--acid);letter-spacing:-.02em}
.motion:not(.entered) body{overflow:hidden}
.motion:not(.entered) main,.motion:not(.entered) .header,.motion:not(.entered) .hud,.motion:not(.entered) .rail,.motion:not(.entered) .controls{visibility:hidden}

/* Cursor: a measuring instrument */
.cursor{display:none}
@media(hover:hover) and (pointer:fine){
  .motion.motion-started .cursor{display:block;position:fixed;top:0;left:0;z-index:70;pointer-events:none;mix-blend-mode:difference}
  .motion.motion-started, .motion.motion-started a, .motion.motion-started button, .motion.motion-started label{cursor:none}
  .motion.motion-started input,.motion.motion-started textarea,.motion.motion-started select{cursor:text}
}
.cursor i{position:absolute;left:-7px;top:-7px;width:14px;height:14px;border:1px solid #fff;border-radius:50%;transition:transform .35s cubic-bezier(.2,.8,.2,1),background .2s}
.cursor i::before,.cursor i::after{content:"";position:absolute;background:#fff;left:50%;top:50%}
.cursor i::before{width:26px;height:1px;transform:translate(-50%,-50%)}
.cursor i::after{width:1px;height:26px;transform:translate(-50%,-50%)}
.cursor.is-hot i{transform:scale(4);background:#fff}
.cursor.is-hot i::before,.cursor.is-hot i::after{opacity:0}
.cursor-label{position:absolute;left:0;top:0;transform:translate(-50%,-50%);font:700 11px var(--body);color:#000;opacity:0;white-space:nowrap}
.cursor.is-hot .cursor-label{opacity:1}
.cursor-xy{position:absolute;left:18px;top:14px;font:9px var(--mono);letter-spacing:.06em;color:#fff;white-space:nowrap;opacity:.8}
.cursor.is-hot .cursor-xy{opacity:0}

/* Header, HUD, rail, controls */
.header{position:fixed;top:0;left:0;right:0;z-index:50;height:74px;padding:0 var(--gutter);display:flex;align-items:center;gap:32px;mix-blend-mode:difference;color:#fff}
.wordmark{font:32px/1 var(--display);letter-spacing:-.05em}
.header nav{display:flex;gap:28px;margin-left:auto;font:500 13px var(--body)}
.header nav a{position:relative}
.header nav a::after{content:"";position:absolute;left:0;right:0;bottom:-4px;height:1px;background:currentColor;transform:scaleX(0);transform-origin:right;transition:transform .35s}
.header nav a:hover::after{transform:scaleX(1);transform-origin:left}
.header-contact{border:1px solid currentColor;border-radius:40px;padding:10px 18px;font:600 13px var(--body);display:flex;gap:18px}
.hud{position:fixed;left:var(--gutter);bottom:28px;z-index:45;display:flex;flex-direction:column;gap:10px;pointer-events:none;mix-blend-mode:difference;color:#fff}
.hud-plate{display:flex;align-items:baseline;gap:14px}
.hud-no{font:10px var(--mono);letter-spacing:.14em}
.hud-title{font:800 22px/1 var(--mincho);letter-spacing:.06em}
.hud-meta{display:flex;align-items:center;gap:14px;font:9px var(--mono);letter-spacing:.12em;opacity:.75}
.hud-progress{display:block;width:120px;height:1px;background:#ffffff40;position:relative}
.hud-progress i{position:absolute;inset:0;background:#fff;transform-origin:left;transform:scaleX(0)}
.rail{position:fixed;right:calc(var(--gutter) - 6px);top:50%;transform:translateY(-50%);z-index:45;display:flex;flex-direction:column;gap:6px;mix-blend-mode:difference;color:#fff}
.rail button{background:none;border:0;padding:4px 6px;font:9px var(--mono);letter-spacing:.1em;opacity:.45;text-align:right;display:flex;align-items:center;gap:8px;justify-content:flex-end;cursor:pointer}
.rail button::after{content:"";width:10px;height:1px;background:currentColor;transition:width .4s}
.rail button:hover,.rail button[aria-current="true"]{opacity:1}
.rail button[aria-current="true"]::after{width:30px}
.rail button span{max-width:0;overflow:hidden;white-space:nowrap;transition:max-width .4s;font-family:var(--mincho);font-size:11px}
.rail button:hover span,.rail button[aria-current="true"] span{max-width:120px}
.controls{position:fixed;right:var(--gutter);bottom:26px;z-index:45;display:flex;gap:8px}
.ctl{background:#11121099;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--line);border-radius:30px;padding:9px 14px;font:9px var(--mono);letter-spacing:.14em;cursor:pointer}
.ctl b{color:var(--acid);font-weight:600;margin-left:6px}
.ctl:hover{border-color:#ffffff70}

/* Shared type */
.readable{background:#11121088;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);padding:18px 22px;border-radius:2px}
.pill{display:inline-flex;align-items:center;gap:34px;padding:19px 26px;border-radius:60px;font:700 15px var(--body);border:0;cursor:pointer;background:var(--acid);color:var(--ink);transition:transform .3s,background .3s}
.pill:hover{background:var(--paper)}
.pill span{font-size:21px;line-height:1}
.pill-ink{background:var(--ink);color:var(--paper)}
.pill-ink:hover{background:#3a3d33}
.line-link{display:inline-flex;gap:46px;border-bottom:1px solid currentColor;padding:10px 0;font-weight:700;font-size:14px;margin-top:6px}
.glyph{position:absolute;font:800 clamp(260px,44vw,760px)/.9 var(--mincho);color:transparent;-webkit-text-stroke:1px #f3f4ee2e;pointer-events:none;user-select:none;top:6vh}
.caption{position:relative;margin:36px 0 0;width:230px;padding:14px 16px;border-top:1px solid #f3f4ee70;display:grid;gap:4px;font-size:12px;background:#1112107a;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.cap-no{font:9px var(--mono);letter-spacing:.14em;color:var(--acid)}
.caption strong{font:800 20px/1.3 var(--mincho);letter-spacing:.06em}
.caption em{font:italic 16px/1.2 var(--serif);color:#d8dbcf}
.cap-meta{font:9px/1.7 var(--mono);color:var(--muted);letter-spacing:.04em;margin-top:6px}
.cap-meta b{font-weight:400;color:var(--paper)}

/* Plates */
.plate{position:relative;min-height:135vh;padding:22vh var(--gutter);display:flex;flex-direction:column;justify-content:center}
.plate-left{align-items:flex-start}
.plate-left > :not(.glyph):not(.caption){max-width:min(620px,46vw)}
.plate-left .glyph{right:2vw}
.plate-right{align-items:flex-end}
.plate-right > :not(.glyph):not(.caption){max-width:min(620px,46vw);width:100%}
.plate-right .glyph{left:2vw}

.hero{min-height:100vh;padding-top:120px;padding-bottom:70px;justify-content:space-between;align-items:flex-start}
.exhibit{display:flex;gap:24px;font:10px var(--mono);letter-spacing:.14em;color:var(--muted);margin:0}
.exhibit span:first-child{font:500 12px var(--mincho);letter-spacing:.2em;color:var(--paper)}
.hero-title{margin:0;font:clamp(58px,10.4vw,196px)/1.03 var(--display);letter-spacing:-.035em;font-weight:400;mix-blend-mode:difference;color:#fff}
.hero-title .line{display:block;white-space:nowrap}
.stroke{color:transparent;-webkit-text-stroke:2px #fff}
.hero-foot{display:flex;align-items:flex-end;gap:28px;flex-wrap:wrap}
.hero-intro{margin:0;font-size:15px;line-height:2}
.hero .caption{position:absolute;right:calc(var(--gutter) + 72px);top:96px;margin:0}
.hero-hint{position:absolute;right:var(--gutter);bottom:78px;margin:0;text-align:right;font:500 12px/1.9 var(--mincho);color:#c9ccc0;letter-spacing:.08em}
/* Beats `.plate > :not(...){position:relative}` so the hint stays pinned bottom-right. */
.plate.hero > .hero-hint{position:absolute}
.hero-hint em{font:italic 14px var(--serif);letter-spacing:0;color:var(--muted)}

.chapter{position:relative}
.chapter-head{display:flex;justify-content:space-between;padding:120px var(--gutter) 0;font:10px var(--mono);letter-spacing:.14em;color:var(--muted);border-top:1px solid var(--line);margin:0 var(--gutter);padding-left:0;padding-right:0;padding-top:22px}
.chapter-intro{padding:18vh var(--gutter) 6vh;max-width:1100px}
.chapter-title{font:clamp(46px,7.4vw,132px)/1.12 var(--display);letter-spacing:-.035em;font-weight:400;margin:0 0 34px;mix-blend-mode:difference;color:#fff}
.chapter-intro p{max-width:520px;font-size:16px;line-height:2;margin:0}
.aside-en{font:italic clamp(22px,2.4vw,34px)/1.3 var(--serif)!important;color:var(--acid);background:none!important;padding:0!important}

.statement{font:clamp(52px,9.6vw,178px)/1.08 var(--display);letter-spacing:-.035em;font-weight:400;margin:0 0 40px;mix-blend-mode:difference;color:#fff}
.statement .split{display:block;white-space:nowrap}
.soft{color:var(--ember)}
.body p{font-size:16px;line-height:2.05;margin:0 0 18px}

.service .en,.step .en{font:10px var(--mono);letter-spacing:.16em;color:var(--acid);margin-bottom:14px}
.service h3,.step h3{font:clamp(34px,4.1vw,76px)/1.15 var(--display);letter-spacing:-.035em;font-weight:400;margin:0 0 26px;mix-blend-mode:difference;color:#fff}
.service p,.step p{font-size:16px;line-height:2;margin:0}
.tags{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px}
.tags span{font-size:12px;border:1px solid #f3f4ee60;padding:6px 12px;border-radius:40px}
.service-note{margin:0 var(--gutter) 12vh;max-width:620px;font-size:13px;color:#c7cabd}

.company{min-height:130vh}
.company .chapter-head{margin:0;position:absolute;top:0;left:var(--gutter);right:var(--gutter)}
.company-note{font:500 16px var(--mincho);letter-spacing:.1em;margin:0 0 30px;color:#d6d9cd}
dl{margin:0}
dl>div{display:grid;grid-template-columns:96px 1fr;gap:18px;padding:18px 0;border-top:1px solid var(--line);font-size:15px;line-height:1.95}
dl>div:first-child{border-top:0;padding-top:0}
dt{font:10px/2.9 var(--mono);letter-spacing:.12em;color:var(--muted)}
dd{margin:0;font-weight:500}

.contact{min-height:auto;padding-top:0;padding-bottom:18vh}
.contact .chapter-head{margin:0 0 14vh}
.contact-grid{display:grid;grid-template-columns:1fr minmax(0,560px);gap:6vw;align-items:start}
.contact-copy{position:relative;min-height:70vh;display:flex;flex-direction:column;gap:30px}
.contact-copy p{font-size:16px;line-height:2;margin:0;align-self:flex-start}
.contact-copy .caption{position:static;margin-top:auto}
.contact-title{font:clamp(44px,5.6vw,120px)/1.12 var(--display);letter-spacing:-.035em;font-weight:400;margin:0;mix-blend-mode:difference;color:#fff}
.contact-form{background:var(--acid);color:var(--ink);padding:clamp(24px,3vw,44px);display:grid;gap:22px;border-radius:3px;position:relative}
.form-honeypot{position:absolute!important;left:-9999px;width:1px;height:1px;overflow:hidden}
.form-pair{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.form-field label{display:block;font:700 13px var(--body);margin-bottom:6px}
.form-field label span{font:10px var(--mono);margin-left:6px;background:var(--ink);color:var(--acid);padding:2px 6px}
.form-field label span.optional{background:transparent;color:var(--ink);border:1px solid var(--ink)}
.form-field input,.form-field select,.form-field textarea{width:100%;font:16px var(--body);color:var(--ink);background:transparent;border:0;border-bottom:2px solid var(--ink);padding:11px 2px;border-radius:0;transition:background .25s,padding .25s}
.form-field input:focus,.form-field select:focus,.form-field textarea:focus{outline:none;background:#ffffff80;padding-left:12px}
.form-field input::placeholder,.form-field textarea::placeholder{color:#11121080}
.form-notice{font-size:12px;line-height:1.9;margin:0}
.form-notice a{text-decoration:underline}
.form-consent{display:flex;gap:10px;align-items:center;font-size:14px;font-weight:700}
.form-consent input{width:20px;height:20px;accent-color:var(--ink)}
.form-submit{justify-self:start}
.form-help{font-size:14px;font-weight:700;margin:0}

.footer{min-height:110vh;padding:22vh var(--gutter) 34px;display:flex;flex-direction:column;justify-content:space-between;align-items:center;text-align:center}
.footer-line{font:500 clamp(16px,1.8vw,24px) var(--mincho);letter-spacing:.2em;margin:0}
.footer-word{font:clamp(110px,26vw,460px)/1 var(--display);letter-spacing:-.05em;color:var(--acid)}
.footer-row{width:100%;display:flex;justify-content:space-between;gap:20px;font:9px var(--mono);letter-spacing:.14em;color:var(--muted)}
.footer-row small{font:inherit}

@media(max-width:860px){
  .header{height:62px;gap:14px}
  .wordmark{font-size:26px}
  .header nav{display:none}
  .header-contact{margin-left:auto;padding:8px 13px;font-size:12px;gap:10px}
  .rail{display:none}
  .hud{bottom:18px}
  .hud-title{font-size:17px}
  .hud-progress{width:70px}
  .controls{bottom:16px}
  .ctl{padding:8px 11px}
  .plate{min-height:auto;padding:62vh var(--gutter) 12vh;align-items:stretch}
  .plate-left > :not(.glyph):not(.caption),.plate-right > :not(.glyph):not(.caption){max-width:none}
  .glyph{font-size:78vw;top:10vh;left:auto!important;right:-6vw!important}
  .caption{width:auto;margin-top:22px}
  .statement,.chapter-title,.service h3,.step h3,.contact-title,.hero-title{mix-blend-mode:normal;text-shadow:0 0 28px #111210,0 0 10px #111210}
  .hero{min-height:100svh;padding-top:96px;padding-bottom:84px}
  .hero .caption,.hero-hint{display:none}
  .hero-title{font-size:clamp(46px,14vw,100px)}
  .exhibit{flex-direction:column;gap:6px}
  .statement{font-size:clamp(38px,11.4vw,80px)}
  .statement .split{white-space:normal}
  .chapter-intro{padding:14vh var(--gutter) 0}
  .company .chapter-head{position:static;margin-bottom:30px}
  .company{padding-top:60vh}
  .contact .chapter-head{margin-bottom:40vh}
  .contact-grid{grid-template-columns:1fr;gap:40px}
  .contact-copy{min-height:auto}
  .form-pair{grid-template-columns:1fr}
  .footer{min-height:90vh}
  .footer-row{flex-direction:column;align-items:center;gap:10px;padding-bottom:50px}
  dl>div{grid-template-columns:72px 1fr;font-size:14px}
}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important;animation:none!important}}

/* ===== proto4: rooms (3D world only) ===== */
.gl body{transition:color .8s}
.gl body[data-theme="light"],.gl body[data-theme="acid"]{color:var(--ink)}
.gl .readable,.gl .caption{transition:background .8s,color .8s}
.gl body[data-theme="light"] .readable,.gl body[data-theme="light"] .caption{background:#f1f2ecb3}
.gl body[data-theme="acid"] .readable,.gl body[data-theme="acid"] .caption{background:#e4ff57b3}
.gl body[data-theme="light"] .caption em,.gl body[data-theme="acid"] .caption em{color:#3c3f36}
.gl body[data-theme="light"] .cap-meta b,.gl body[data-theme="acid"] .cap-meta b{color:var(--ink)}
.gl body[data-theme="light"] .cap-no,.gl body[data-theme="acid"] .cap-no{color:#566b00}
.gl body[data-theme="light"] .glyph,.gl body[data-theme="acid"] .glyph{-webkit-text-stroke-color:#11121030}
.gl body[data-theme="light"] .company-note{color:#3c3f36}
.gl body[data-theme="light"] dl>div{border-top-color:#1112102e}
.gl body[data-theme="acid"] .contact-form{background:var(--paper);box-shadow:0 30px 80px -30px #11121066}
.gl .contact-form{transition:background .8s,box-shadow .8s}
.gl body[data-theme="light"] .ctl,.gl body[data-theme="acid"] .ctl{background:#f4f5ef99;color:var(--ink);border-color:#11121030}
.gl body[data-theme="light"] .ctl b,.gl body[data-theme="acid"] .ctl b{color:#566b00}
.gl body[data-theme="acid"] .chapter-head,.gl body[data-theme="light"] .chapter-head{border-top-color:#11121030;color:#3c3f36}
.gl body[data-theme="light"] .tags span,.gl body[data-theme="acid"] .tags span{border-color:#11121060}
