/* The browser is a game viewport. Only explicit menu panels can scroll. */
html,body{position:fixed;inset:0;width:100%;height:100dvh;min-height:0;margin:0;padding:0;overflow:hidden;overscroll-behavior:none}
#app{position:fixed;inset:0 0 var(--ad-space);height:calc(100dvh - var(--ad-space));overflow:hidden}
.shell.stage{height:100%;min-height:0;overflow:hidden;container-type:size;container-name:game-stage}
.shell.stage>.screen{height:100%;min-height:0;max-height:100%;box-sizing:border-box}
.shell.stage>.menu-screen,.shell.stage>.result-screen{overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
.modal-backdrop,.game-menu-backdrop{overflow:hidden;padding:12px}
.modal-backdrop>.dialog,.game-menu-backdrop>.game-menu{max-height:100%;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
/* Logo, choices and footer share the available height. No fixed empty spacers. */
.shell.stage>.home.screen{display:grid;grid-template-rows:minmax(70px,.8fr) minmax(0,2.2fr) auto;gap:10px;justify-content:normal;align-items:stretch;width:min(760px,100%);max-width:760px;margin:0 auto;transform:none;padding:max(38px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) 8px max(16px,env(safe-area-inset-left));overflow:hidden}
.home .home-top{display:grid;grid-template-rows:minmax(0,1fr) 16px;gap:2px;margin:0 auto;width:100%;max-width:600px;min-height:0}
.home .home-top h1{height:100%;min-height:0;margin:0}
.home .wordmark{width:100%;height:100%;object-fit:contain;aspect-ratio:auto}
.home .home-oath{font-size:8px;line-height:14px;letter-spacing:1.3px;margin:0;white-space:nowrap}
.home .quest-menu-layout{height:100%;min-height:0;width:100%;max-width:560px;margin:0 auto;grid-template-columns:minmax(0,.9fr) minmax(0,1.35fr);gap:18px;align-items:center}
.home .quest-choices{gap:clamp(3px,1cqh,10px);padding:0;min-width:0}
.home .quest-choices .btn{min-height:40px;padding:8px 5px 8px 25px;font-size:clamp(16px,2.7cqh,22px);letter-spacing:1.3px}
.home .quest-choices .embark{font-size:clamp(20px,3.3cqh,28px)}
.home .quest-choices .hard-entry{font-size:clamp(10px,1.8cqh,14px);min-height:35px}
.home .quest-choices .btn small{font-size:6px;line-height:1.35;padding-top:3px;letter-spacing:.25px}
.home .quest-choices .btn.hard-entry{display:grid;grid-template-columns:30px minmax(0,1fr);column-gap:6px;align-items:center;padding:6px 5px}
.home .hard-entry .hard-entry-blades{position:static;width:30px;height:30px;translate:none;transform:none}
.home .hard-entry-copy{display:block;min-width:0}
.game-menu .playtest-version{font:8px/1.5 'Knightle Quill';letter-spacing:1px;color:#c7b78e;margin:3px 0 10px}
.home .knight-dossier{width:100%;max-width:none;max-height:100%;min-height:0;gap:3px;justify-content:center;align-items:center}
.home .portrait-button{order:-1;width:auto;max-width:100%;height:clamp(80px,calc(32cqh - 70px),180px);min-height:60px;aspect-ratio:96/108;flex:0 1 auto;margin:0;padding:5px}
.home .portrait-button .scene{height:100%;width:100%;padding:3px}
.home .portrait-button .pixel-scene{width:100%;height:100%;object-fit:contain;aspect-ratio:auto}
.home .knight-dossier .level-panel{display:grid;grid-template-rows:auto 5px auto;flex:none;gap:3px;padding:2px 0}
.home .rank-crest,.home .rank-crest:not([data-tier="0"]){width:62px;height:62px;min-width:62px;min-height:62px}
.home .legacy-rank .rank-caption{gap:2px}.home .rank-level-label{font-size:4px;letter-spacing:1px}
.home .legacy-rank{gap:1px;padding:0 0 4px}.home .legacy-rank:after{display:none}.home .legacy-rank>strong{font-size:8px;line-height:1.1;letter-spacing:.5px;margin:0;padding:0}
.home .knight-dossier .level-panel .meter{height:5px;margin:0}.home .knight-dossier .level-panel small{font-size:6px;line-height:1.3;margin:0}
.home .dossier-gold{font-size:14px;min-height:20px;padding:0}.home .dossier-gold .coin-icon{width:17px;height:17px}
.home .dossier-teeth{gap:3px;min-height:19px;margin:0}.home .dossier-teeth .tooth-icon{width:15px;height:18px}.home .dossier-teeth b{font-size:12px}.home .dossier-teeth small{font-size:4px}
.home .ascend-entry{padding:4px 6px;font-size:8px;min-height:28px;margin:0}.home .ascend-entry small{font-size:4px;margin-top:2px}
.home .quest-caption{align-self:end;max-width:560px;margin:0 auto;padding:0 30px;line-height:1.3;font-size:9px}
.home .quest-caption p{font-size:10px;line-height:1.25;margin:0 0 4px}
.home .quest-caption>span{font-size:6px;letter-spacing:1px}
.home .home-counter{margin-top:4px;font-size:6px;line-height:14px;letter-spacing:.8px}.home .home-counter strong{font-size:8px}
.stage-home .royal-deed-entry{position:absolute;bottom:6px;right:6px;transform:scale(.8);transform-origin:bottom right}
@container game-stage (max-height:430px){
 .home .portrait-button{height:clamp(50px,15cqh,70px);min-height:50px}
 .home .knight-dossier .rank-crest,.home .knight-dossier .rank-crest:not([data-tier="0"]){width:42px;height:42px;min-width:42px;min-height:42px}
}
/* Reclaim the excess footer strip and restore the active row's prominence. */
.stage-combat .combat.screen{--board-height:clamp(156px,calc(32dvh - 34px),230px);--active-row-height:44px;padding-bottom:8px;container-name:none}
.stage-combat .combat .combat-foot{grid-template-rows:29px var(--board-height) 18px 21px auto;row-gap:2px}
.stage-combat .combat .rune-board-controls .guess-board{--row-active:var(--active-row-height);--row-inactive:calc((var(--board-height) - var(--row-active) - (var(--row-count) - 1)*3px)/(var(--row-count) - 1));--rune-large:24px;--rune-small:clamp(11px,calc(var(--row-inactive)*.72),17px);display:flex;flex-direction:column;justify-content:flex-start;height:100%;gap:3px;grid-template-rows:none}
.stage-combat .combat .guess-board>.guess-row,.stage-combat .combat .guess-board>.guess-row.current,.stage-combat .combat .guess-board>.guess-row.last-attack{height:var(--row-inactive);min-height:0;flex:none}
.stage-combat .combat .guess-board>.guess-row.row-seat{height:var(--row-active)}
.stage-combat .combat .guess-board>.guess-row>.tile,.stage-combat .combat .guess-board>.guess-row.current>.tile,.stage-combat .combat .guess-board>.guess-row.last-attack>.tile{height:100%;font-size:var(--rune-small)}
.stage-combat .combat .guess-board>.guess-row.row-seat>.tile{font-size:var(--rune-large)}
.stage-combat .combat .guess-board>.row-seat .cipher-glyph{width:23px;height:27px}
/* Protection floats over the middle of the status strip and consumes no space. */
.stage-combat .combat .command-line>.ward-rack{position:absolute;left:50%;top:calc(50% - 7px);right:auto;bottom:auto;transform:translate(-50%,-50%);margin:0;gap:2px;min-height:0;z-index:5;pointer-events:none}
.stage-combat .combat .command-line .armed-ward,.stage-combat .combat .command-line .ward-half canvas{width:30px;height:36px}
.stage-combat .combat .command-line .armed-ward+.armed-ward{margin-left:-12px}
@media(max-width:350px){
 .stage-combat .combat .command-line .heart-rack{gap:0}
 .stage-combat .combat .command-line .heart-icon{width:15px;min-width:15px;height:18px}
}
/* Keep provisions on the outer edge. The board takes the width between them
   and its small damage gutter, instead of stopping at the old 248px cap. */
.stage-combat .combat .rune-board-controls,.stage-combat .combat.boss-combat .rune-board-controls{display:grid;grid-template-columns:24px minmax(0,1fr) 12px 38px;gap:0;width:100%;max-width:none;margin:0;position:relative}
.stage-combat .combat .rune-board-controls .guess-board{grid-column:2;grid-row:1;width:100%;max-width:248px;justify-self:center}
.stage-combat .combat.boss-combat .rune-board-controls .guess-board{max-width:280px}
.stage-combat .combat .rune-board-controls .row-damage{right:calc(100% + 3px);width:24px;font-size:5px}
.stage-combat .combat .rune-board-controls .consumable-belt{position:relative;grid-column:4;grid-row:1;left:auto;right:auto;top:1px;align-self:start;width:38px;margin:0}
.stage-combat .combat .rune-board-controls .combat-purse{left:0;bottom:-43px}
.stage-combat .combat .inscription{grid-row:3}
.stage-combat .combat .turn-clock{grid-row:4}
/* Feats slide into the same left-side pocket as the playtest chamber controls. */
.combat-notice-anchor{position:absolute;left:0;top:3px;width:128px;height:34px;z-index:8;pointer-events:none}
body:has(.stage-combat) .combat-notice-anchor #achievement-toast{position:absolute;inset:0 auto auto 0;width:128px;max-width:128px;height:34px;margin:0;padding:0;transform:translateX(-16px)}
body:has(.stage-combat) .combat-notice-anchor #achievement-toast.show{transform:translateX(0)}
body:has(.stage-combat) .combat-notice-anchor #achievement-toast .notice-dismiss{height:34px;min-height:34px;padding:3px 4px}
body:has(.stage-combat) .combat-notice-anchor #achievement-toast strong{font-size:9px;line-height:10px}
.battle-wrap:has(.combat-notice-anchor #achievement-toast.show) .test-oracle{visibility:hidden;pointer-events:none}
.encounter-intro .combat-notice-anchor{visibility:hidden}
@media(max-height:650px){
 .stage-combat .combat .rune-board-controls .combat-purse{bottom:-39px}
 .stage-combat .combat.screen{--active-row-height:40px}
 .stage-combat .combat .combat-foot{grid-template-rows:25px var(--board-height) 16px 19px auto}
 .home .rank-crest,.home .rank-crest:not([data-tier="0"]){width:52px;height:52px;min-width:52px;min-height:52px}
 .home .quest-choices .btn{min-height:36px;padding-top:6px;padding-bottom:6px}
}
@container battle-stage (max-height:480px){
 .stage-combat .combat .rune-board-controls .combat-purse{bottom:-23px}
 .stage-combat .combat.screen{--board-height:146px;--active-row-height:38px}
 .stage-combat .combat .combat-foot{grid-template-rows:25px var(--board-height) 0 19px auto}
}
@media(orientation:landscape) and (max-height:500px){
 .stage-combat .combat.screen{grid-template-rows:25px 52px minmax(0,1fr) 20px;--board-height:calc(100dvh - var(--ad-space) - 59px);--active-row-height:44px}
 .stage-combat .combat .combat-foot{display:contents}
 .stage-combat .combat .command-line>.ward-rack{top:50%}
 .stage-combat .combat .rune-board-controls .combat-purse{bottom:-20px}
 .stage-combat .combat .rune-board-controls,.stage-combat .combat.boss-combat .rune-board-controls{grid-template-columns:minmax(0,1fr) 8px 32px;width:100%;margin:0}
 .stage-combat .combat .rune-board-controls .guess-board{grid-column:1}
 .stage-combat .combat .rune-board-controls .consumable-belt{grid-column:3;width:32px;top:8px}
 .stage-combat .combat .rune-board-controls .draught-slot{width:32px;min-width:32px}
 .stage-combat .combat .combat-controls{grid-row:3/5}
 .stage-combat .combat .turn-clock{grid-row:2}.stage-combat .combat .inscription{grid-row:2}
 .shell.stage>.home.screen{grid-template-columns:1fr 1.2fr;grid-template-rows:minmax(0,1fr) auto;padding:30px 40px 6px;gap:6px 22px;max-width:1100px}
 .home .home-top{grid-column:1;grid-row:1;max-height:190px;align-self:center}
 .home .quest-menu-layout{grid-column:2;grid-row:1/3;gap:10px;grid-template-columns:.75fr 1.2fr}
 .home .quest-caption{grid-column:1;grid-row:2;font-size:7px;padding:0}
 .home .portrait-button{height:75px;min-height:45px;padding:3px}
 .home .quest-choices{gap:2px}.home .quest-choices .btn{min-height:30px;padding-top:4px;padding-bottom:4px;font-size:13px}.home .quest-choices .embark{font-size:17px}.home .quest-choices .hard-entry{font-size:9px}.home .quest-choices .btn small{font-size:4px}
 .home .rank-crest,.home .rank-crest:not([data-tier="0"]){width:42px;height:42px;min-width:42px;min-height:42px}.home .knight-dossier{gap:2px}.home .legacy-rank strong{font-size:6px}
}
/* Reward screens also stay inside the playfield; only their artwork flexes. */
.stage-loot .spoils-screen{display:grid;grid-template-rows:auto auto auto minmax(64px,.55fr) auto minmax(0,1.45fr);gap:4px;padding:40px 14px 8px;--chest-size:clamp(110px,27cqh,190px);--stage-open:clamp(120px,30cqh,200px);--stage-small:80px}
.stage-loot .spoils-screen>.eyebrow{margin:0;font-size:7px}
.stage-loot .spoils-screen>h1{font-size:clamp(17px,3.5cqh,26px);margin:0;letter-spacing:1px}
.stage-loot .spoils-screen>.loot-rarity{margin:0;font-size:7px;min-height:10px}
.stage-loot .spoils-screen .loot-stage{height:100%!important;min-height:0;margin:0 auto!important}
.stage-loot .spoils-screen>h2{font-size:15px;line-height:18px;margin:0}
.stage-loot .loot-presentation{display:grid;grid-template-rows:minmax(0,1fr) 32px 42px;gap:6px;height:100%;min-height:0;width:100%}
.stage-loot .treasure-spread{grid-template-columns:repeat(var(--mobile-finds),minmax(0,1fr));grid-auto-rows:minmax(0,1fr);gap:6px;height:100%;min-height:0;width:min(100%,calc(var(--mobile-finds)*128px));margin:0 auto;align-items:center}
.stage-loot .treasure-item{display:grid;grid-template-rows:minmax(0,90px) 26px 22px;align-content:center;min-height:0;height:min(100%,138px)}
.stage-loot .relic-figure{height:100%;min-height:0;max-height:90px}
.stage-loot .treasure-item canvas[data-loot-art]{position:absolute;inset:0;margin:auto!important;height:100%;width:100%;max-height:90px;max-width:90px;object-fit:contain}
.stage-loot .treasure-item strong{font-size:10px;line-height:1.2;min-height:0;margin:0;align-self:center}
.stage-loot .treasure-item .treasure-value{font-size:18px;line-height:22px;min-height:0;height:22px;margin:0}
.stage-loot .treasure-value b{font:inherit}.stage-loot .treasure-value .coin-icon{margin:0;width:16px;height:16px}
.stage-loot .loot-total{min-height:0;height:32px;margin:0 auto}.stage-loot .loot-total b{font-size:25px}.stage-loot .loot-total .coin-icon{width:22px;height:22px}
.stage-loot .loot-continue{min-height:42px;height:42px;padding:8px;margin:0 auto;font-size:10px}
.stage-experience .experience-screen{padding:38px 20px 8px;gap:5px}
.stage-experience .experience-screen>.eyebrow{font-size:7px;margin:0}
.stage-experience .experience-screen>h1{font-size:clamp(19px,4cqh,32px);margin:0 0 6px}
.stage-experience .experience-screen .ascension-emblem{height:clamp(90px,25cqh,200px);width:clamp(90px,25cqh,200px)}
.stage-experience .experience-screen h2{font-size:clamp(18px,3.5cqh,24px);min-height:25px;margin:5px 0}
.stage-experience .rank-announcement{min-height:15px;margin:0 0 3px;font-size:7px}
.stage-experience .legacy-xp-track{flex:none;height:24px}
.stage-experience .xp-tally{font-size:16px;margin:3px 0}.stage-experience .xp-tally small{font-size:7px;margin-top:3px}
.stage-experience .xp-story{font-size:12px;margin:5px 0;line-height:1.3}
.stage-experience .xp-continue{min-height:42px;margin:2px 0;padding:8px}
.stage-experience .xp-test-ascension{margin:0;padding:8px;font-size:6px}
.stage-loot .hoard-finale{padding:40px 18px 8px;gap:4px}
.stage-loot .hoard-finale header{flex:none}.stage-loot .hoard-finale header p{margin:3px 0}
.stage-loot .hoard-finale h1{font-size:clamp(18px,4cqh,32px);margin:0}
.stage-loot .hoard-finale .hoard-theater{flex:1;min-height:80px;height:auto;margin:0}
.stage-loot .hoard-finale .hoard-receipt{min-height:110px;flex:none}
.stage-loot .hoard-finale .hoard-continue{min-height:42px;margin:3px 0 0;flex:none}
.quest-prelude .oath-screen{max-height:100%;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
@media(orientation:landscape) and (max-height:500px){
 .stage-loot .spoils-screen{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);grid-template-rows:auto auto auto minmax(0,1fr) auto;padding:30px 35px 6px;column-gap:20px}
 .stage-loot .spoils-screen>.eyebrow,.stage-loot .spoils-screen>h1,.stage-loot .spoils-screen>.loot-rarity,.stage-loot .spoils-screen>.loot-stage,.stage-loot .spoils-screen>h2{grid-column:1}
 .stage-loot .loot-presentation{grid-column:2;grid-row:1/6}
 .stage-experience .experience-screen{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto minmax(0,1fr) auto auto;padding:28px 45px 7px;gap:4px 20px}
 .stage-experience .experience-screen>.eyebrow{grid-column:1;grid-row:1}.stage-experience .experience-screen>h1{grid-column:1;grid-row:2}
 .stage-experience .experience-screen .ascension-emblem{grid-column:1;grid-row:3;justify-self:center;height:90px;width:90px}
 .stage-experience .experience-screen>h2{grid-column:1;grid-row:4}.stage-experience .rank-announcement{grid-column:1;grid-row:5}
 .stage-experience .legacy-xp-track{grid-column:2;grid-row:2}.stage-experience .xp-tally{grid-column:2;grid-row:1}.stage-experience .xp-story{grid-column:2;grid-row:3}
 .stage-experience .xp-continue{grid-column:2;grid-row:4;min-width:0}.stage-experience .xp-test-ascension{grid-column:2;grid-row:5}
 .stage-loot .hoard-finale{display:grid;grid-template-columns:1.2fr 1fr;grid-template-rows:auto minmax(0,1fr) auto;padding:30px 35px 6px;gap:5px 22px}
 .stage-loot .hoard-finale header{grid-column:1;grid-row:1}.stage-loot .hoard-finale .hoard-theater{grid-column:1;grid-row:2/4;height:100%}
 .stage-loot .hoard-finale .hoard-receipt{grid-column:2;grid-row:1/3;align-self:center}.stage-loot .hoard-finale .hoard-continue{grid-column:2;grid-row:3}
}

/* Non-combat notices stay at the left shoulder, never beside the ad. */
body:not(:has(.stage-combat)) #achievement-toast{top:max(60px,env(safe-area-inset-top));bottom:auto;left:8px;width:136px;max-width:calc(100vw - 84px)}
/* Every loot stage has a single centered track, including the chest camera. */
.stage-loot .spoils-screen{grid-template-columns:minmax(0,1fr);justify-items:center}
.stage-loot .spoils-screen .loot-stage{position:relative;width:min(260px,100%);justify-self:center}
.stage-loot .spoils-screen .chest-camera{grid-area:auto;left:50%;top:50%}
.stage-loot .treasure-item:after{top:auto;bottom:48px;width:auto;animation:none}
.stage-loot .treasure-item:before{inset:0 -6px 40px}
@media(orientation:landscape) and (max-height:500px){.stage-loot .spoils-screen{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr)}}
/* Seven full-size cells exist from the beginning. No width animation competes
   with flexbox; the first five slide one cell while the extra pair materialize. */
.stage-combat .combat .seven-runes>.guess-row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px;translate:0 0}
.stage-combat .combat.dragon-awakening .seven-runes>.guess-row{animation:none;translate:0 0;transform:none}
.stage-combat .combat .seven-runes>.guess-row>.tile{width:auto;min-width:0;margin:0}
.stage-combat .combat.dragon-dormant .awakened-rune{display:flex;visibility:hidden;opacity:0}
.stage-combat .combat.dragon-dormant .guess-row>.tile:nth-child(-n+5){transform:translateX(calc(100% + 3px))}
.stage-combat .combat.dragon-awakening .guess-row>.tile:nth-child(-n+5){animation:dragon-five-slide 1.05s cubic-bezier(.22,.7,.25,1) both;animation-delay:calc(var(--dragon-age) + var(--row-index)*55ms)}
.stage-combat .combat.dragon-awakening .guess-row>.awakened-rune{display:flex;overflow:visible;animation:dragon-pair-arrives .9s cubic-bezier(.18,.75,.2,1) both;animation-delay:calc(var(--dragon-age) + 580ms + var(--row-index)*55ms + (var(--tile-index) - 5)*140ms);transform-origin:center}
.dragon-forge{display:none}
.dragon-announcement{animation-delay:var(--dragon-age,0ms)}
.combat-reveal-held *,.combat-reveal-held *:before,.combat-reveal-held *:after{animation-play-state:paused!important}
.dragon-awakening .dragon-forge{display:block;position:absolute;inset:-1px;pointer-events:none;z-index:4;border:1px solid #ffbd62;box-shadow:inset 0 0 8px #ef792755,0 0 7px #f4a44055;animation:dragon-seal-cools 1.15s ease-out both;animation-delay:calc(var(--dragon-age) + 580ms + var(--row-index)*55ms + (var(--tile-index) - 5)*140ms)}
.dragon-forge:before{content:'';position:absolute;inset:0;background:linear-gradient(0deg,#fbbe66aa,transparent);clip-path:polygon(0 100%,0 45%,17% 70%,30% 15%,45% 65%,62% 0,76% 60%,100% 35%,100% 100%)}
.dragon-forge i{position:absolute;left:50%;top:65%;width:2px;height:3px;background:#ffdd96;--a:calc(var(--ember)*45deg);animation:dragon-ember-flies .8s ease-out both;animation-delay:calc(var(--dragon-age) + 640ms + var(--row-index)*55ms + (var(--tile-index) - 5)*140ms)}
@keyframes dragon-five-slide{0%,15%{transform:translateX(calc(100% + 3px));border-color:#a18750}26%{transform:translateX(calc(100% + 5px));border-color:#efd596}72%{transform:translateX(-2px);border-color:#b78443}100%{transform:none}}
@keyframes dragon-pair-arrives{0%{opacity:0;transform:translateY(12px);clip-path:inset(100% -12px -12px)}35%{opacity:1;clip-path:inset(-12px);border-color:#ffe5ab}65%{transform:translateY(-2px)}100%{opacity:1;transform:none;clip-path:inset(-12px)}}
@keyframes dragon-seal-cools{0%{opacity:0}18%,30%{opacity:1}100%{opacity:0}}
@keyframes dragon-ember-flies{0%{opacity:0;transform:rotate(var(--a)) translateY(4px)}20%{opacity:1}100%{opacity:0;transform:rotate(var(--a)) translateY(-28px)}}
.stage-combat .combat .seven-runes>.ash-row{display:flex;align-items:center;justify-content:center;min-height:0;opacity:1}
.stage-combat .combat .ash-caption{white-space:nowrap;line-height:1;writing-mode:horizontal-tb;font-size:9px;letter-spacing:1px;color:#c9b28f;opacity:.9;text-shadow:0 1px 2px #000,0 0 5px #080c09}
@media(prefers-reduced-motion:reduce){.stage-combat .combat.dragon-awakening .guess-row>.tile{animation:none!important;transform:none;opacity:1}}
@media(prefers-reduced-motion:reduce){.dragon-awakening .dragon-forge{display:none}}
/* Rune changes happen in the ink only; key faces and brightness remain steady. */
.cipher-symbol,.cipher-symbol.rune-changing{color:inherit!important;filter:none!important;text-shadow:none!important;transform:none}
.cipher-origin{font-family:var(--cipher-font,'Knightle Quill');transform:none;text-shadow:none}
.cipher-ink .ink-live{filter:none;stroke-width:1.7px}
.cipher-ink .ink-echo,.cipher-ink .ink-cinders{display:none}
/* Keep the frame's original pixel aspect and the numeral's shared center. */
.home .rank-crest:not([data-tier="0"]) canvas.oath-frame{left:6.25%;width:87.5%;height:100%}
.home .rank-crest:not([data-tier="0"]) canvas[data-rank-number]{width:41.125%}
.rank-crest canvas.oath-frame{filter:drop-shadow(0 2px 0 #030907) drop-shadow(0 0 3px var(--oath-glow))}
.oath-ceremony .oath-new-rank{transition:opacity .65s,transform .8s cubic-bezier(.2,.7,.2,1);transform:translateY(6px)}
.oath-ceremony .oath-witness{aspect-ratio:160/144}
.oath-ceremony .oath-new-rank .oath-frame{filter:drop-shadow(0 2px 0 #030907) drop-shadow(0 0 6px var(--oath-glow))}
/* Ceremony content shares the phone budget instead of overflowing below it. */
.oath-ceremony{container-type:size;display:grid;grid-template-rows:14px auto minmax(0,1fr) 25px 18px 60px 40px;justify-items:center;align-items:center;gap:4px;padding:20px 12px 10px;overflow:hidden}
.oath-ceremony>.eyebrow,.oath-ceremony h1,.oath-ceremony .oath-earned-title,.oath-ceremony .oath-earned-copy,.oath-ceremony .oath-earned-boons,.oath-ceremony .oath-continue{margin:0}
.oath-ceremony h1{font-size:clamp(20px,4.2cqh,32px);line-height:1.1;letter-spacing:2px}
.oath-ceremony .oath-heart{height:100%;min-height:0;margin:0;width:min(410px,100%)}
.oath-ceremony .oath-witness{width:min(280px,46cqh)}
.oath-ceremony .oath-new-rank{height:clamp(66px,16cqh,112px)}
.oath-ceremony .oath-new-rank .rank-crest{height:clamp(66px,16cqh,112px);width:clamp(57.75px,14cqh,98px);min-width:0;min-height:0}
.oath-ceremony .oath-earned-copy{font-size:12px;line-height:1.3}
.oath-ceremony .oath-earned-title{font-size:20px;line-height:1.1;letter-spacing:3px}
.oath-ceremony .oath-earned-boons{padding:6px;gap:22px}
.oath-ceremony .oath-earned-boons b{font-size:24px;margin-bottom:4px}
.oath-ceremony .oath-continue{font-size:8px;min-height:38px;max-width:100%;padding:8px 14px}
@media(orientation:landscape) and (max-height:500px){
 .oath-ceremony{grid-template-columns:1fr 1fr;grid-template-rows:14px auto 24px 18px 52px 38px;gap:4px 14px;padding:12px 24px}
 .oath-ceremony .oath-heart{grid-column:1;grid-row:1/7}
 .oath-ceremony>*:not(.oath-heart):not(.oath-forge):not(.sr-only){grid-column:2}
 .oath-ceremony .oath-witness{width:min(200px,65cqh)}
 .oath-ceremony .oath-new-rank,.oath-ceremony .oath-new-rank .rank-crest{height:60px}.oath-ceremony .oath-new-rank .rank-crest{width:52.5px}
}
/* Playtest-only scene navigation, kept out of the regular game layout. */
.home .home-oath{position:relative;overflow:visible}
.home-dev{font:5px 'Knightle Quill';color:#d6bf89;background:#14201bcc;border:1px solid #b2965366;padding:3px 5px;margin-left:8px;vertical-align:middle;cursor:pointer}
.last-call-mark{width:30px;height:30px;filter:drop-shadow(1px 2px #060b08)}
.last-call-dialog{text-align:center}.last-call-dialog p{font:italic 15px/1.6 Georgia;color:#c4b591}.last-call-dialog .coming-soon{font:7px 'Knightle Quill';letter-spacing:3px;margin:25px 0}
.developer-backdrop{z-index:100}.developer-dialog{width:min(560px,100%);padding:22px;max-height:100%;overflow-y:auto;background:linear-gradient(125deg,#202a23,#101b16);border:1px solid #958255;color:#e4d1a7}
.developer-heading{display:flex;justify-content:space-between;align-items:center;gap:10px}.developer-heading .eyebrow{font-size:6px;margin:0}.developer-close{border:0;background:none;color:#e5d4b0;font:24px Georgia;padding:0 4px}
.developer-dialog h2{font:26px 'Knightle Herald';margin:8px 0}.developer-dialog>p{font:13px/1.5 Georgia;color:#b5b6a1;margin:0 0 16px}.developer-dialog h3{font:7px/1.5 'Knightle Quill';letter-spacing:1px;margin:22px 0 9px;color:#b9a574}
.developer-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.developer-dialog .btn{font:11px/1.3 'Knightle Herald';letter-spacing:.3px;min-height:38px;padding:7px 5px;margin:0;text-transform:uppercase}.developer-dialog>.btn{margin-top:18px;width:100%}
.developer-enemies{display:grid;gap:6px;margin-bottom:8px}.developer-enemies>div{display:grid;grid-template-columns:minmax(0,1fr) 63px 63px;gap:6px;align-items:center}.developer-enemies strong{font:13px 'Knightle Herald';color:#d8c798}
.dev-preview-tools{position:fixed;z-index:90;top:max(4px,env(safe-area-inset-top));left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:5px;padding:3px 5px;background:#111e17ed;border:1px solid #a48e5a66;white-space:nowrap}.dev-preview-tools>span{font:4px 'Knightle Quill';color:#9caa91}.dev-preview-tools button{font:5px 'Knightle Quill';color:#e1c996;background:#27352a;border:1px solid #b9a16e66;min-height:22px;padding:3px 6px;cursor:pointer}
body:has(.developer-dialog) .dev-preview-tools{visibility:hidden}
