:root{--bg:#050812;--panel:#0d1729;--ink:#edf5f8;--muted:#adbccb;--accent:#22d3ee;--line:rgba(170,203,223,.24);--gold:#f0cd8a;color-scheme:dark;font-family:var(--ag-font-sans);background:var(--bg);color:var(--ink);font-synthesis:none}*{box-sizing:border-box}body{margin:0}button,a,input,select{-webkit-tap-highlight-color:transparent}button,input,select{font:inherit}button,a{touch-action:manipulation}button{color:inherit;cursor:pointer}button:disabled{cursor:default;opacity:.5}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #fff;outline-offset:4px}button{border:1px solid var(--line);background:#0d192c}img{display:block;max-width:100%}svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}h1,h2,h3,p{margin:0}h1,h2,h3{font-weight:500}p{line-height:1.7}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.skip{position:fixed;left:12px;top:-100px;padding:12px 20px;background:var(--accent);color:#04121b;z-index:100}.skip:focus{top:12px}.hall-header{height:66px;display:flex;align-items:center;justify-content:space-between;padding:0 clamp(18px,3.5vw,64px);border-bottom:1px solid var(--line);background:#050812;position:relative;z-index:5}.brand{display:flex;align-items:center;gap:12px;letter-spacing:.12em;font-size:17px;font-weight:600}.brand span{display:flex;align-items:center;gap:20px}.brand small{font-size:12px;letter-spacing:.05em;color:var(--muted);font-weight:400;border-left:1px solid var(--line);padding-left:20px}.header-tools{display:flex;align-items:center;gap:16px}.world-label{font-size:12px;color:var(--muted)}.language-control select{min-height:44px;border:0;background:transparent;color:var(--ink);padding:0 8px}.icon-button{width:44px;height:44px;display:grid;place-items:center;background:transparent;border-color:transparent}.hall{position:relative;isolation:isolate;min-height:calc(100svh - 66px);height:max(730px,calc(100svh - 66px));overflow:clip;display:grid;grid-template-rows:auto 1fr auto}.hall-world{position:absolute;inset:0;z-index:-3;overflow:hidden}.hall-world>img{width:100%;height:100%;object-fit:cover;object-position:50% 44%;filter:saturate(.68) brightness(.68)}.world-vignette{position:absolute;inset:0;background:linear-gradient(90deg,rgba(1,7,14,.6),transparent 40%,transparent 60%,rgba(1,7,14,.6)),linear-gradient(0deg,#050812 0%,rgba(5,8,18,.7) 20%,transparent 58%,rgba(5,8,18,.45))}.world-light{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 30%,rgba(148,236,217,.17),transparent 40%)}.hall-heading{display:flex;justify-content:space-between;align-items:center;padding:32px clamp(24px,4vw,72px);z-index:2}.eyebrow{text-transform:uppercase;letter-spacing:.18em;font-size:12px;font-weight:600;color:var(--accent);margin-bottom:8px}h1{font-size:clamp(21px,2.3vw,32px);letter-spacing:.02em}.text-button{font-size:12px;background:transparent;border:0;border-bottom:1px solid var(--line);padding:12px 0;color:var(--muted)}.landmarks{position:absolute;top:130px;left:32%;right:32%;display:flex;justify-content:space-between;z-index:2}.landmark{display:flex;align-items:center;gap:7px;color:#d7e9eb;font-size:12px;text-shadow:0 2px 5px #000;min-height:44px;padding:4px 10px;border:1px solid rgba(217,247,244,.2);background:rgba(5,18,24,.5);backdrop-filter:blur(4px);transition:background .2s,border-color .2s}.landmark:hover{background:#16313d;border-color:var(--accent)}.landmark svg{width:18px;height:18px}.portal-deck{position:absolute;top:23%;left:5%;right:5%;display:flex;justify-content:space-between;pointer-events:none;z-index:3}.portal{width:29%;max-width:360px;min-width:240px;pointer-events:auto;background:linear-gradient(150deg,rgba(15,34,53,.96),rgba(8,18,32,.96));border:1px solid #49687a;box-shadow:0 24px 65px #0009,0 0 40px #2a9cc30c;position:relative;transition:transform .2s,border-color .2s}.portal::before{content:"";position:absolute;top:-1px;left:25%;right:25%;height:2px;background:var(--accent);box-shadow:0 0 22px var(--accent);z-index:2}.portal.survivor{background:linear-gradient(150deg,rgba(18,39,38,.97),rgba(8,23,26,.97));border-color:#4b766d}.portal.survivor::before{background:#a2deb6;box-shadow:0 0 22px #a2deb6}.portal:hover,.portal:focus-within{transform:translateY(-4px);border-color:var(--accent)}.portal-art{width:100%;height:120px;position:relative;display:block;padding:0;overflow:hidden;border:0;border-bottom:1px solid var(--line)}.portal-art img{width:100%;height:100%;object-fit:cover;filter:saturate(.8) brightness(.65);transition:transform .35s}.portal-art:hover img{transform:scale(1.04)}.portal-art::after{content:"";position:absolute;inset:0;background:linear-gradient(transparent,rgba(8,19,32,.7))}.portal-rune{position:absolute;inset:0;display:grid;place-items:center;color:#d7f7ff;z-index:1}.portal-rune svg{width:54px;height:54px;stroke-width:1.2;filter:drop-shadow(0 0 10px #32daf6)}.survivor .portal-rune{color:#d1f8c9}.inspect-mark{position:absolute;right:14px;top:10px;z-index:2;color:white;font-size:22px;font-weight:400}.portal-copy{padding:22px 24px 24px}.portal-genre{font-size:12px;color:#a5c2d2;letter-spacing:.07em}.portal h2{font-size:35px;line-height:1.1;margin:8px 0 12px;letter-spacing:-.035em}.portal h2 small{font-size:12px;display:block;text-transform:uppercase;letter-spacing:.15em;margin-top:9px;color:#d1e3ee;font-weight:400}.portal-status{font-size:12px;display:flex;align-items:baseline;gap:6px;color:#b2ead4;line-height:1.45}.portal-status i{display:inline-block;width:5px;height:5px;flex:none;background:currentColor;border-radius:50%}.portal-status.development{color:#e2cf9f}.portal-description{font-size:13px;color:#bacbd5;margin:13px 0 18px;min-height:44px}.button{min-height:48px;padding:13px 17px;border:1px solid var(--line);display:inline-flex;align-items:center;justify-content:center;gap:12px;font-size:13px;font-weight:600;text-align:center;line-height:1.4}.button.primary{background:var(--accent);border-color:var(--accent);color:#04121b}.button.secondary{background:rgba(105,186,149,.12);border-color:#78af96;color:#d5eddd}.button:hover{filter:brightness(1.12)}.portal .button{width:100%}.css-arrow{display:inline-block;width:15px;height:10px;position:relative;flex:none}.css-arrow::before{content:"";position:absolute;left:0;top:4px;width:13px;border-top:1.5px solid}.css-arrow::after{content:"";position:absolute;right:0;top:1px;width:7px;height:7px;border-top:1.5px solid;border-right:1.5px solid;transform:rotate(45deg)}.guardian-stage{position:absolute;inset:19% 31% 102px;z-index:2;display:flex;align-items:center;justify-content:flex-end;flex-direction:column;pointer-events:none}.guardian-stage canvas{width:100%;height:calc(100% - 96px);object-fit:contain;filter:drop-shadow(0 8px 10px #0007);pointer-events:none}.guardian-fallback{position:absolute;width:70%;height:64%;top:0;object-fit:contain}.ground-ring{position:absolute;bottom:112px;left:22%;right:22%;height:28px;border:1px solid rgba(155,234,221,.3);border-radius:50%;box-shadow:0 0 45px #51c5bd33,inset 0 0 20px #51c5bd22;background:radial-gradient(ellipse,#79cbb026,transparent 70%);z-index:-1}.guardian-name{pointer-events:auto;text-align:center;width:100%;max-width:310px}.guardian-name>button{background:rgba(7,20,31,.85);border:1px solid var(--line);width:100%;padding:11px 38px 11px 16px;position:relative;display:flex;flex-direction:column;align-items:center;gap:4px}.guardian-title{font-size:23px;font-weight:500;letter-spacing:.03em}.guardian-name #selected-hero-class{font-size:12px;color:var(--muted);letter-spacing:.06em}.guardian-name>button svg{position:absolute;right:10px;top:20px;width:20px}.pose-controls{display:flex;justify-content:center;gap:5px;margin-top:6px}.pose-controls button{min-height:38px;background:rgba(5,13,24,.65);border-color:transparent;font-size:12px;padding:7px 12px;color:#c0d1dc}.pose-controls button:hover{border-color:var(--line)}.motion-caption{min-height:18px;font-size:12px;color:#b4c4cf;margin-top:3px;line-height:1.3}.hall-bottom{grid-row:3;padding:15px 24px 18px;z-index:4;display:flex;align-items:center;flex-direction:column;gap:10px;background:linear-gradient(transparent,rgba(5,8,18,.65))}.scene-caption{font-size:12px;color:#9eafba;line-height:1.3;text-align:center}.hall-dock{display:flex;align-items:stretch;justify-content:center;background:#0a1728e8;border:1px solid #395065;box-shadow:0 12px 40px #0008;backdrop-filter:blur(10px)}.hall-dock>a,.hall-dock>button{display:flex;gap:10px;align-items:center;justify-content:center;min-height:54px;padding:10px 26px;background:transparent;border:0;border-right:1px solid var(--line);font-size:12px;color:#d5e3e9}.hall-dock>*:last-child{border-right:0}.hall-dock>*:hover{background:#193246}.hall-dock svg{width:21px;height:21px;color:#a5c9d6}.motes i{position:absolute;left:47%;top:37%;width:3px;height:3px;background:#b8eddb;border-radius:50%;box-shadow:0 0 8px #80e6d0;animation:drift 12s ease-in-out infinite}.motes i:nth-child(2){left:61%;top:47%;animation-delay:-3s}.motes i:nth-child(3){left:34%;top:29%;animation-delay:-7s}.motes i:nth-child(4){left:48%;top:60%;animation-delay:-5s}.motes i:nth-child(5){left:55%;top:19%;animation-delay:-10s}.motes i:nth-child(6){left:40%;top:53%;animation-delay:-2s}@keyframes drift{0%,100%{transform:translate(0,0);opacity:.1}50%{transform:translate(15px,-28px);opacity:.7}}
/* Drawers are readable content, not battlefield controls. Native selection and zoom remain available. */
dialog{border:1px solid #496276;background:#0b1627;color:var(--ink);padding:34px;max-width:min(760px,calc(100vw - 28px));max-height:calc(100svh - 36px);width:620px;box-shadow:0 30px 100px #000b;overflow:auto}dialog::backdrop{background:rgba(1,5,12,.8);backdrop-filter:blur(6px)}dialog h2{font-size:28px;line-height:1.25;margin:6px 38px 18px 0}dialog p{font-size:14px;color:#b6c7d3;margin:12px 0}dialog .eyebrow{font-size:12px;color:var(--accent)}.close{width:44px;height:44px;display:grid;place-items:center;position:absolute;right:12px;top:12px;background:#15273c;border:1px solid var(--line);font-size:25px;font-weight:400;z-index:2}.sheet-heading{margin-bottom:20px}.heroes-dialog{width:740px}.hero-roster{display:grid;grid-template-columns:repeat(8,1fr);gap:6px;margin:20px 0}.hero-roster button{min-width:0;padding:8px 2px 7px;display:flex;flex-direction:column;align-items:center;gap:6px;font-size:12px;min-height:94px;background:#101f32}.hero-roster img{width:58px;height:60px;object-fit:contain}.hero-roster button[aria-pressed=true]{border-color:var(--accent);background:#143648;box-shadow:inset 0 -2px var(--accent)}.hero-detail{padding:15px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:grid;grid-template-columns:90px 1fr;gap:20px;align-items:center}.hero-detail>img{width:90px;height:110px;object-fit:contain}.hero-detail h3{font-size:24px}.hero-detail p{font-size:13px;margin:6px 0}.hero-detail a{color:var(--accent);font-size:12px;text-decoration:underline;text-underline-offset:4px;display:inline-block;padding:8px 0}.hero-actions{display:flex;justify-content:space-between;gap:14px;margin-top:20px;align-items:center}.tier-picker{display:flex}.tier-picker button{min-height:48px;min-width:68px;padding:10px 15px;background:#0b1627}.tier-picker button[aria-pressed=true]{background:#214456;border-color:var(--accent)}.small-copy,dialog .small-copy{font-size:12px;line-height:1.7;color:#99afc0}.angle-boundary{border-left:2px solid #506f84;padding-left:12px}.feature-list{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:20px 0}.feature-list span{padding:12px;border:1px solid var(--line);font-size:12px;text-align:center;color:#cce2ea}.dialog-art{height:180px;width:calc(100% + 68px);max-width:none;object-fit:cover;margin:-34px -34px 24px;filter:brightness(.7)}.dialog-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}.inline-link{font-size:13px;color:var(--accent);text-decoration:underline;text-underline-offset:4px;padding:10px 0;display:inline-block}.learning-record{border-left:2px solid var(--accent);padding:8px 18px;background:#122337;margin:18px 0}.story-links{display:grid;gap:4px;margin-top:20px}.story-links a{padding:13px 4px;border-bottom:1px solid var(--line);font-size:13px;color:#c6dce5;display:flex;justify-content:space-between}.story-links a::after{content:"›"}#settings-dialog{width:490px}#settings-dialog label{display:flex;flex-direction:column;gap:10px;margin:22px 0;font-size:14px}#settings-dialog label.check{flex-direction:row;align-items:center}input[type=checkbox]{width:20px;height:20px;accent-color:var(--accent)}input[type=range]{width:100%;accent-color:var(--accent)}.noscript-note{padding:25px;background:var(--panel);position:relative;z-index:10}
[data-reduced-motion=true] .motes{display:none}[data-reduced-motion=true] *{scroll-behavior:auto!important;transition:none!important;animation:none!important}
@media(min-width:1500px){.portal-deck{left:10%;right:10%}.guardian-stage{inset:16% 32% 108px}.landmarks{left:37%;right:37%}}
@media(max-width:1000px){.hall{height:max(760px,calc(100svh - 66px))}.portal-deck{left:3%;right:3%;top:26%}.portal{width:30%;min-width:220px}.portal-copy{padding:18px}.portal-art{height:100px}.portal h2{font-size:30px}.guardian-stage{inset:16% 29% 110px}.landmarks{top:125px;left:29%;right:29%}.hall-dock>a,.hall-dock>button{padding:10px 22px}.hall-heading{padding:26px}}
@media(max-width:700px){.hall-header{height:58px;padding:0 16px}.brand{font-size:14px;gap:8px}.brand img{width:24px;height:24px}.brand span{gap:12px}.brand small{font-size:12px;padding-left:12px}.world-label{display:none}.header-tools{gap:3px}.hall{height:calc(100svh - 58px);min-height:635px;grid-template-rows:auto 1fr auto}.hall-heading{padding:15px 18px;align-items:flex-start}.hall-heading .eyebrow{font-size:12px;margin-bottom:4px}.hall h1{font-size:20px}.hall-heading .text-button{font-size:12px;max-width:83px;padding:7px 0;line-height:1.4;text-align:right}.hall-world>img{object-position:50% 38%;filter:saturate(.75) brightness(.7)}.world-vignette{background:linear-gradient(0deg,#050812 0%,#05081299 30%,transparent 70%,#05081277)}.landmarks{top:83px;left:18px;right:18px}.landmark{font-size:12px;padding:2px 6px;min-height:36px;gap:5px}.landmark svg{width:15px;height:15px}.guardian-stage{inset:52px 21% auto;height:258px;justify-content:flex-start;z-index:2}.guardian-stage canvas{height:194px;width:230px;max-width:132%;flex:none}.guardian-name{position:absolute;top:178px;max-width:200px}.guardian-name>button{padding:6px 30px 6px 12px;gap:2px;min-height:47px}.guardian-title{font-size:17px}.guardian-name #selected-hero-class{font-size:12px}.guardian-name>button svg{top:14px;right:5px;width:18px}.ground-ring{bottom:73px;left:20%;right:20%;height:15px}.pose-controls{margin-top:3px;gap:3px}.pose-controls button{font-size:12px;min-height:30px;padding:4px 9px}.motion-caption{display:none}.guardian-fallback{height:170px;top:8px}.portal-deck{top:auto;bottom:104px;left:14px;right:14px;gap:10px;display:grid;grid-template-columns:1fr 1fr;align-items:stretch}.portal{width:auto;min-width:0;max-width:none}.portal-art{height:54px}.portal-art .portal-rune svg{width:31px;height:31px}.inspect-mark{font-size:18px;top:7px;right:10px}.portal-copy{padding:11px 11px 12px}.portal-genre{font-size:12px;line-height:1.35;min-height:11px;letter-spacing:0}.portal h2{font-size:25px;margin:6px 0 10px}.portal h2 small{font-size:12px;letter-spacing:.08em;margin-top:5px}.portal-status{font-size:12px;line-height:1.4;min-height:26px;gap:4px}.portal-description{display:none}.portal .button{min-height:48px;font-size:12px;gap:6px;padding:8px 5px}.portal .css-arrow{width:11px;height:9px}.portal .css-arrow::before{width:10px}.portal .css-arrow::after{width:5px;height:5px;top:2px}.hall-bottom{padding:7px 14px max(10px,env(safe-area-inset-bottom));gap:7px}.scene-caption{font-size:12px;max-width:95%}.hall-dock{width:100%}.hall-dock>a,.hall-dock>button{flex:1;flex-direction:column;min-width:0;gap:5px;font-size:12px;padding:9px 3px;min-height:54px}.hall-dock svg{width:18px;height:18px}dialog{padding:25px 22px;max-width:calc(100vw - 24px)}dialog h2{font-size:24px}.hero-roster{grid-template-columns:repeat(4,1fr);gap:7px}.hero-roster button{min-height:85px}.hero-roster img{height:50px}.hero-detail{grid-template-columns:65px 1fr;gap:12px}.hero-detail>img{width:65px;height:90px}.hero-detail h3{font-size:21px}.hero-actions{align-items:stretch}.hero-actions>.button{flex:1}.tier-picker button{min-width:56px;padding:8px}.feature-list{grid-template-columns:1fr}.dialog-art{width:calc(100% + 44px);margin:-25px -22px 20px;height:145px}.dialog-actions .button{width:100%}.guardian-stage .pose-controls button{min-height:32px}}
@media(max-width:400px){.hall{min-height:645px}.hall h1{font-size:19px}.portal h2{font-size:23px}.portal-genre{min-height:21px}.portal-status{min-height:27px}.portal-art{height:48px}.portal-copy{padding:9px}.hall-heading .text-button{max-width:67px}.portal-deck{bottom:102px}}
@media(max-height:530px) and (min-width:701px){.hall{min-height:510px;height:510px}.hall-heading{padding:16px 28px}.hall h1{font-size:22px}.landmarks{top:85px}.portal-deck{top:105px}.portal-art{height:60px}.portal-copy{padding:14px 18px}.portal h2{font-size:27px}.portal-description{display:none}.guardian-stage{inset:66px 31% 92px}.hall-bottom{padding-bottom:10px}.hall-dock>a,.hall-dock>button{min-height:48px}.scene-caption{font-size:12px}}
@media(prefers-reduced-motion:reduce){.motes{display:none}*{transition:none!important;scroll-behavior:auto!important}}

/* Every primary hall touch action is at least 48 CSS pixels. */
.language-control select,.icon-button{min-height:48px}.icon-button{width:48px}
.landmark,.pose-controls button,.guardian-stage .pose-controls button{min-height:48px}
@media(max-width:700px){.guardian-stage canvas{height:180px}.guardian-name{top:166px}.guardian-stage{height:280px}.guardian-name>button{min-height:48px}.pose-controls{margin-top:0}.guardian-name .pose-controls button{padding:7px 8px}.landmarks{top:78px}.landmark{font-size:12px}}
.guardian-stage canvas{object-position:center bottom}
@media(max-width:700px){.ground-ring{bottom:110px}}
.hall-heading>div{min-width:0}.hall-heading{gap:18px}.hall-heading>.text-button{flex:none}
@media(max-width:700px){[data-locale=en] .hall-heading h1{font-size:17px;letter-spacing:0;max-width:24ch}[data-locale=en] .portal-genre{font-size:12px;min-height:19px}[data-locale=en] .portal-status{font-size:12px;min-height:28px}}
/* Short landscape: keep both destinations and controls, reduce scenery instead of shrinking targets. */
@media(max-height:530px) and (min-width:540px) and (max-width:700px){
 .hall-header{height:50px}.brand small{display:none}.hall{height:calc(100svh - 50px);min-height:320px}.hall-heading{padding:10px 16px}.hall-heading .eyebrow{display:none}.hall h1,[data-locale=en] .hall-heading h1{font-size:17px;max-width:none}.hall-heading .text-button{max-width:none}.landmarks{display:none}
 .portal-deck{top:48px;bottom:auto;left:16px;right:16px;display:flex;gap:0}.portal{width:32%;max-width:206px}.portal-art{height:28px}.portal-rune svg{width:23px!important;height:23px!important}.portal-copy{padding:8px}.portal-genre{display:none}.portal h2{font-size:22px;margin:4px 0 6px}.portal h2 small{font-size:12px;margin-top:3px}.portal-status,[data-locale=en] .portal-status{min-height:25px;font-size:12px}.portal .button{min-height:48px;font-size:12px;padding:8px 4px}
 .guardian-stage{inset:35px 34% auto;height:208px}.guardian-stage canvas{height:118px;max-width:100%}.guardian-name{top:106px;width:100%;max-width:196px}.guardian-name>button{min-height:44px;padding:5px 25px 5px 7px}.guardian-title{font-size:16px}.guardian-name #selected-hero-class{display:none}.guardian-name>button svg{top:11px}.guardian-name .pose-controls button{padding:6px;font-size:12px;min-height:48px}.ground-ring{bottom:92px;height:12px}.hall-bottom{padding:5px 16px 8px;gap:4px}.hall-dock>a,.hall-dock>button{flex-direction:row;min-height:48px;padding:6px 8px;font-size:12px;gap:6px}.hall-dock svg{width:16px;height:16px}.scene-caption{font-size:12px}
}
@media(min-width:701px) and (min-height:531px){.hall{height:calc(100svh - 66px);min-height:620px}}
@media(max-width:700px) and (min-height:531px){.portal-genre,[data-locale=en] .portal-genre{font-size:12px;min-height:25px;line-height:1.35}.portal-status,[data-locale=en] .portal-status{font-size:12px;min-height:29px}.portal .button{font-size:12px}.portal h2 small{font-size:12px}.portal-copy{padding:10px}.portal h2{margin:5px 0 9px}.portal-art{height:42px}.scene-caption{font-size:12px}.hall-dock>a,.hall-dock>button{font-size:12px}}
@media(max-height:530px) and (min-width:540px) and (max-width:700px){.guardian-name{top:121px}.guardian-stage{height:223px}.ground-ring{bottom:107px}}

/* Close remains reachable while a long mobile drawer scrolls. */
dialog>.close,dialog>form>.close{position:sticky;top:0;right:auto;float:right;margin:-12px -10px 0 12px;z-index:5}
.close{width:48px;height:48px}
/* Respect semantic hidden even when generic image display rules are present. */
[hidden]{display:none!important}

/* Additive shared-world links; leave the accepted ring geometry and hit-area fix intact. */
.world-story-link{display:inline-flex;align-items:center;min-height:44px;color:var(--ag-ui-secondary);font:var(--ag-type-body2);text-underline-offset:5px;margin-top:4px}.world-story-link:hover{color:var(--ag-ui-text)}.showcase-motive{margin:4px 0 8px;text-align:center;color:var(--ag-ui-secondary);font:var(--ag-type-body2)}.world-story-link[hidden],.showcase-motive[hidden]{display:none!important}
