:root{color-scheme:dark;--ivory:#eee7d5;--gold:#cfb47e;--ink:#060d12}*{box-sizing:border-box}body{margin:0;background:var(--ink);color:var(--ivory);font-family:Manrope,Arial,sans-serif;overflow:hidden}button,input,select{font:inherit}button{color:inherit;cursor:pointer;border:0;background:none}button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--gold);outline-offset:6px}[hidden]{display:none!important}#world{height:100dvh;position:relative;isolation:isolate}canvas{position:absolute;inset:0;width:100%;height:100%;display:block}#backdrop{z-index:0}#objects{z-index:1;pointer-events:none}#effects{z-index:20;pointer-events:none}.vignette{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 45%,transparent 35%,#02060980 100%);z-index:2}header{position:absolute;top:30px;left:38px;right:38px;display:flex;align-items:center;justify-content:space-between;z-index:3;pointer-events:none}.wordmark{font-family:Georgia,serif;font-size:17px;color:#d9c59e}.chapter-mark{font-size:9px;letter-spacing:3px;color:#ded7c3aa}#menu{position:absolute;inset:0;z-index:3}.menu-title{position:absolute;z-index:2;top:12%;left:0;right:0;text-align:center;pointer-events:none;text-shadow:0 4px 18px #000}.menu-title p,.eyebrow{font-size:11px;letter-spacing:4px;color:var(--gold)}h1,h2,.portal-title{font-family:'Cormorant Garamond',Georgia,serif;font-weight:400;line-height:.98;letter-spacing:-1px}.menu-title h1{font-size:clamp(34px,3.6vw,70px);margin:20px 0}.portals{position:absolute;inset:0;display:grid;grid-template-columns:repeat(4,1fr)}.portal{position:relative;padding:0 3vw;display:flex;align-items:center;justify-content:center;flex-direction:column;padding-top:10vh;text-align:center;background:linear-gradient(0deg,#02070dc7,transparent 85%);transition:background .3s;color:#d9d6cc}.portal+.portal{border-left:1px solid #dbc69d1a}.portal:hover,.portal.hovered{background:linear-gradient(0deg,#040b117a,transparent 85%);color:#fff4d9}.roman{font-family:Georgia,serif;font-size:19px;color:#d5b875;margin-bottom:22px;opacity:.75}.portal-title{font-size:clamp(37px,4.4vw,90px);text-shadow:0 3px 30px #000;min-height:2em;display:flex;align-items:center}.portal-sub{font-size:clamp(10px,.8vw,16px);letter-spacing:2.5px;color:#dfc99d;margin-top:22px}.portal-action{font-family:Georgia,serif;font-style:italic;font-size:clamp(16px,1.25vw,26px);color:#c4c9c6;margin-top:14px}.portal-line{width:50px;height:1px;background:#d5b87588;margin-top:25px;position:relative}.portal-line:after{content:'';position:absolute;inset:0;background:#fff2c8;transform:scaleX(var(--dwell,0));transform-origin:left;box-shadow:0 0 10px #efcb84}.menu-hint{position:absolute;bottom:75px;left:10%;right:10%;text-align:center;font-size:clamp(16px,1.1vw,26px);pointer-events:none;color:#d5d9d6}footer{position:absolute;bottom:22px;left:0;right:0;display:flex;justify-content:center;gap:25px;z-index:8}.quiet{font-size:clamp(14px,1vw,23px);color:#d6d6c8;padding:10px 4px}.quiet:hover{color:#fff3cf}.panel{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;z-index:7;padding:60px 8vw;background:linear-gradient(90deg,#02080ecc,#02080e80,#02080ecc)}.panel h1{font-size:clamp(52px,6.2vw,120px);margin:20px 0 24px}.panel>p:not(.eyebrow):not(.privacy){font-size:clamp(19px,1.8vw,36px);line-height:1.5;max-width:850px;margin:8px auto}.panel .gesture{color:#e9d7af}.panel .privacy{font-size:12px;color:#9eaaa8;max-width:600px;line-height:1.7;margin:25px 0}.actions{display:flex;flex-direction:column;align-items:center;gap:6px;margin-top:20px}.spell-button{font-family:Georgia,serif;font-size:clamp(22px,1.7vw,36px);letter-spacing:.5px;padding:17px 35px;border-top:1px solid #ba9c5f77;border-bottom:1px solid #ba9c5f77;background:linear-gradient(90deg,transparent,#c5a66a19,transparent);position:relative}.spell-button:hover,.spell-button.hovered{background:linear-gradient(90deg,transparent,#c5a66a44,transparent);color:#fff5d6}.back{position:absolute;top:24px;left:32px}.corner{position:absolute;top:20px;right:24px;z-index:8;font-size:24px;width:48px;height:48px;opacity:.55}.corner:hover,.corner.hovered{opacity:1;background:#03101a66}.progress{position:absolute;top:26px;left:50%;transform:translateX(-50%);z-index:3;font-family:Georgia,serif;font-size:clamp(20px,1.5vw,36px);letter-spacing:3px;text-shadow:0 2px 12px #000;color:#e5d7b9}.cue{position:absolute;bottom:5%;left:8%;right:8%;z-index:3;text-align:center;font-size:clamp(24px,2vw,48px);line-height:1.4;text-shadow:0 2px 7px #000,0 4px 30px #000;font-weight:500;margin:0;pointer-events:none;transition:opacity .5s}.cue.faded{opacity:0}.countdown{position:absolute;inset:0;z-index:7;display:flex;align-items:center;justify-content:center;flex-direction:column;background:#030b1240;text-align:center}.countdown p{font-size:clamp(25px,2vw,48px);max-width:80%}.countdown strong{font:140px Georgia,serif;color:#e8d4ac}.flash{position:absolute;inset:0;z-index:4;pointer-events:none;opacity:0;transition:opacity .25s;background:#96d8ef}.ending{background:linear-gradient(0deg,#02080ed9,transparent 100%);justify-content:flex-end;padding-bottom:6vh}.ending h1{font-size:clamp(48px,5vw,90px)}.ending .actions{flex-direction:row;gap:25px}.ending .eyebrow{margin:0}.ending>p:not(.eyebrow){font-size:clamp(18px,1.6vw,30px)}#message{position:absolute;left:50%;top:10%;transform:translateX(-50%);z-index:30;background:#081620ee;border:1px solid #baa87866;padding:20px 30px;font-size:20px;max-width:85%;text-align:center;line-height:1.5}dialog{background:#10191e;color:var(--ivory);border:1px solid #aa966055;border-radius:0;max-width:680px;width:calc(100% - 35px);max-height:85dvh;overflow:auto;padding:35px}dialog::backdrop{background:#020609bb}dialog h2{font-size:42px;margin:10px 0 20px}dialog p{font-size:16px;line-height:1.6}dialog label{display:flex;justify-content:space-between;gap:20px;align-items:center;margin:24px 0;font-size:17px}dialog input[type=range]{width:48%;accent-color:var(--gold)}dialog input[type=checkbox]{accent-color:var(--gold);width:22px;height:22px}dialog select{background:#19272c;color:var(--ivory);padding:10px;border:1px solid #a08a5655;max-width:70%}dialog input[type=file]{max-width:100%;padding:15px 0}dialog video{width:250px;max-width:100%;transform:scaleX(-1);margin:15px auto}.muted{color:#a3b1b3;font-size:14px!important}.close{position:absolute;top:10px;right:16px;font-size:30px}details{border-top:1px solid #ba9c5f44;margin-top:20px;padding-top:20px}summary{cursor:pointer;color:#e2c99a;font-size:18px}a{color:#cfba8f}.legacy{display:block;margin-top:30px;font-size:14px}body.playing header,body.playing footer{display:none}body.playing #world{cursor:none}body.playing dialog,body.playing .panel{cursor:auto}.hovered{color:#fff1c8!important;text-shadow:0 0 20px #e7c17a}
@media(max-width:700px){header{top:18px;left:20px;right:20px}.chapter-mark{display:none}.menu-title{top:10%}.menu-title h1{font-size:32px}.menu-title p{font-size:9px;letter-spacing:2px}.portal{padding:9vh 8px 0}.portal-title{font-size:34px}.portal-sub{font-size:8px;letter-spacing:1px;min-height:25px;line-height:1.6}.portal-action{font-size:13px;line-height:1.5}.menu-hint{bottom:95px;font-size:16px}footer{gap:10px;flex-wrap:wrap;padding:0 12px}.quiet{font-size:14px}.panel{padding:75px 7vw}.panel h1{font-size:50px}.panel>p:not(.eyebrow):not(.privacy){font-size:20px}.cue{font-size:23px;left:5%;right:5%;bottom:5%}.ending .actions{flex-direction:column}.ending{padding-bottom:5vh}.progress{top:28px;font-size:19px}.spell-button{font-size:23px;padding:14px 20px}}@media(max-height:650px){.menu-title{top:8%}.menu-title h1{margin:10px 0}.portal-title{font-size:50px}.portal-sub{margin-top:9px}.roman{margin-bottom:10px}.portal-action{margin-top:10px}.panel h1{font-size:48px;margin:10px 0}.panel>p:not(.eyebrow):not(.privacy){font-size:20px}.panel .privacy{margin:12px 0}.actions{margin-top:15px}.ending{padding-bottom:20px}.cue{font-size:23px}}

/* Cinematic chapter changes and the vault inscription. */
#transitionVeil{position:absolute;inset:0;z-index:90;pointer-events:none;opacity:0;background:radial-gradient(ellipse at center,#0d1b22,#000);transition:opacity .55s ease}#transitionVeil.closed{opacity:1;pointer-events:auto}.riddle{position:absolute;top:7.5%;left:15%;right:15%;z-index:3;margin:0;text-align:center;font:italic clamp(24px,2.1vw,45px)/1.3 Georgia,serif;color:#f2dfb1;text-shadow:0 3px 18px #000,0 0 8px #000;pointer-events:none}.playing .progress{top:14px;font-size:18px}.portal{transition:background .5s,filter .5s}.portal:hover{filter:brightness(1.15)}@media(max-width:700px){.portals{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(2,1fr);top:23%;bottom:115px}.portal{padding:6px}.portal-title{min-height:auto;font-size:32px}.roman{display:none}.portal-sub{margin-top:5px}.portal-action{display:none}.portal-line{margin-top:8px}.riddle{top:8%;left:5%;right:5%;font-size:22px}}

.playing .progress{display:none}.portal-action,.portal-sub,.roman,.chapter-mark{display:none}.portal-title{min-height:0}.menu-title p{display:none}.riddle{top:5%;left:12%;right:12%;font-size:clamp(26px,2.5vw,44px)}.cue{font-size:clamp(24px,2vw,38px);bottom:4%}.playing .cue.faded{opacity:0}.ending .eyebrow{display:none}

/* Final vault shot ends in absolute black; no replay card, cursor or overlay. */
#blackout{position:absolute;inset:0;z-index:100;background:#000;opacity:0;pointer-events:none}
body.blackout #world{background:#000;cursor:none}
.riddle{top:2.5%;left:7%;right:7%;font-size:clamp(26px,2.25vw,44px);line-height:1.23}

/* V15: four titles only; all chapters remain inside one fullscreen document. */
#launchGate{position:absolute;inset:0;z-index:200;background:#03070c;display:grid;place-content:center;text-align:center;padding:30px}
#launch{font:clamp(28px,4vw,60px) Georgia,serif;color:#ebdcc0;padding:35px}
#launchStatus{max-width:650px;line-height:1.6;font-size:20px;color:#c5d3dc}
#castleFrame{position:absolute;inset:0;width:100%;height:100%;border:0;z-index:120;background:#000}
.portals{inset:12% 9% 17%;grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(2,1fr);gap:5vh 5vw}
.portal,.portal:hover,.portal.hovered{padding:20px;background:none;border:0;filter:none}
.portal+.portal{border:0}.portal-title{font-size:clamp(38px,5.3vw,86px);min-height:0;line-height:1.2;letter-spacing:0;color:#e9dec6;text-shadow:none}
.portal:hover .portal-title,.portal.hovered .portal-title{color:#fff6df;text-shadow:0 0 25px #d8bc7355}
.portal::after{content:'';position:absolute;bottom:20%;left:25%;width:50%;height:2px;background:#ecd8aa;transform:scaleX(var(--dwell,0));transform-origin:left;opacity:.8}
#footer{opacity:0;transition:opacity .2s}#footer:hover,#footer:focus-within{opacity:1}
@media(prefers-reduced-motion:reduce){#footer{transition:none}}
