*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--color-canvas);color:var(--color-ink);font-family:var(--font-body)}body{overflow-x:hidden}button,a,select,input{-webkit-tap-highlight-color:transparent}button,select{font:inherit;color:inherit;background:#242629;border:1px solid var(--color-hairline);border-radius:0}button{cursor:pointer;padding:9px 12px;transition:background .15s,transform .15s}button:hover{background:#363a3d}button:active{transform:translate(1px,1px)}button:disabled{cursor:not-allowed;opacity:.45}button:focus-visible,a:focus-visible,select:focus-visible,canvas:focus-visible{outline:2px solid #e6b082;outline-offset:3px}button[aria-pressed=true]{border-color:#c8683b;background:#503120}select{width:100%;padding:7px 8px;font-size:13px;cursor:pointer}small{color:var(--color-muted)}a{color:inherit;text-decoration:none}h1,h2,h3,p{margin:0}button.primary{background:var(--color-primary);color:var(--color-on-primary);border:1px solid #d2764f;font-weight:700}button.primary:hover{background:#c54b19}kbd{font:9px var(--font-mono);border:1px solid #606468;padding:3px 4px;color:#c4c5c5;white-space:nowrap}b,strong,.balance,.raid-clock{font-variant-numeric:tabular-nums}[hidden]{display:none!important}.eyebrow{font:10px var(--font-mono);letter-spacing:1.4px;color:#b7b2a9}.topbar{height:76px;padding:0 36px;border-bottom:1px solid #3a3d42;display:flex;align-items:center;gap:32px;background:#191b1dee;position:relative;z-index:20}.brand{display:flex;gap:10px;align-items:center;font-size:20px;font-weight:700;letter-spacing:2px}.brand-symbol{color:#d37949;font:40px var(--font-mono);line-height:1}.brand small{display:block;font:8px var(--font-mono);letter-spacing:2.6px;margin-top:5px}.edition{font:10px var(--font-mono);letter-spacing:1px;color:#85898b;margin-left:24px}.edition b{color:#bebcb4}.top-actions{display:flex;gap:8px;margin-left:auto}.top-actions button{font-size:11px;background:transparent}.lobby{display:grid;grid-template-columns:minmax(0,1fr) 390px;min-height:calc(100svh - 111px)}.hero{position:relative;isolation:isolate;min-height:640px;overflow:hidden;background:#111b18}.hero-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:26% center;z-index:-3}.hero-shade{position:absolute;inset:0;background:linear-gradient(180deg,#080e0c6b 0%,transparent 32%,#080b0bb3 74%,#080c0cef 100%);z-index:-1}.hero-title{padding:48px 46px}.hero-title h1{font:500 clamp(86px,10.5vw,170px)/1 var(--font-mono);letter-spacing:-12px;margin:12px 0;color:#f4efe0;text-shadow:0 3px 0 #0004}.hero-title h1 span{color:#d0784d}.hero-title h2{font-size:20px;font-weight:500;letter-spacing:5px}.hero-bottom{position:absolute;bottom:46px;left:46px;right:32px}.serial{font:10px var(--font-mono);letter-spacing:2px;border-left:3px solid var(--color-primary);padding-left:10px;color:#c6c0ae}.hero-bottom p{font-size:17px;line-height:1.9;letter-spacing:1px;margin:18px 0}.hero-tags{display:flex;gap:20px;align-items:center;font-size:12px;color:#acae9e}.hero-tags i{font-style:normal;color:#735337}.preparation{padding:28px 28px 22px;border-left:2px solid #363832;background:#202224;display:flex;flex-direction:column;gap:13px}.prep-heading{display:flex;align-items:center;justify-content:space-between}.prep-heading button{font-size:11px;padding:7px 10px}.prep-heading button span{color:#d9ae7c}.balance{display:flex;align-items:baseline;gap:8px;margin:4px 0 6px}.balance>span{font-size:12px;color:var(--color-muted);margin-right:auto}.balance strong{font:36px var(--font-mono)}.balance small{font:10px var(--font-mono)}.kit-presets{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.kit-presets button{font-size:10px;padding:9px 2px}.loadout-slot{display:flex;gap:12px;align-items:center;min-height:87px;border:1px solid #41433f;background:#191c1c;padding:8px 10px;position:relative}.loadout-slot:before{position:absolute;content:"";left:0;top:0;height:100%;width:2px;background:#b99f68;opacity:.45}.atlas-icon{display:inline-block;flex-shrink:0;width:64px;height:64px;background-image:url('../assets/office-atlas.png');background-size:400% 400%;background-position:var(--tile-x,0%) var(--tile-y,0%);background-repeat:no-repeat}.loadout-slot .weapon-icon{width:78px;height:78px}.loadout-slot label{min-width:0;flex:1}.loadout-slot small{display:block;font-size:10px;margin:0 0 4px}.loadout-slot select{background:transparent;padding:3px 2px;border:0;font-size:14px;font-weight:600}.loadout-slot select option{background:#242629}.slot-note{font:10px var(--font-mono);display:block;color:#b9ad95;margin-top:6px}.supply-heading{display:flex;align-items:center;justify-content:space-between;font-size:11px;margin-top:2px}.supply-heading small{font-size:9px}.supplies{display:grid;grid-template-columns:1fr 1fr;gap:6px}.supply{font-size:10px;display:flex;gap:7px;padding:9px 8px;background:#191c1c;border:1px solid #363b39;align-items:center;cursor:pointer}.supply input{accent-color:#b7410e;margin:0}.supply small{margin-left:auto;font:10px var(--font-mono)}.contract-card{display:flex;align-items:center;gap:12px;padding:13px 0;border-top:1px solid #393d39;border-bottom:1px solid #393d39}.contract-art{display:flex;flex-shrink:0;width:84px}.contract-art .atlas-icon{height:48px;width:48px;margin-left:-3px}.contract-card small{font-size:9px;display:block}.contract-card strong{font-size:12px;display:block;margin:7px 0}.contract-card div>span{font-size:10px;color:#aeb0a8}.contract-card b{color:var(--color-up);font-family:var(--font-mono)}.difficulty{display:flex;align-items:center;gap:14px;font-size:11px}.difficulty label{white-space:nowrap;color:#aeb0b1}.difficulty select{font-size:11px}.ledger{border-left:4px solid var(--color-primary);background:#1b1d20;box-shadow:var(--shadow-hard);padding:12px 14px}.ledger>div{display:flex;justify-content:space-between;gap:20px;align-items:center}.ledger>div+div{margin-top:9px}.ledger span{font-size:11px;color:#aeb0b3}.ledger b{font:12px var(--font-mono)}.deployment{margin-top:auto}.deploy{width:100%;padding:15px 18px;display:flex;align-items:center;justify-content:space-between;font-size:16px;letter-spacing:1px}.deploy span{font-size:22px}.prep-note{font-size:10px;color:#a7a6a0;line-height:1.6;text-align:center}.lobby-footer{min-height:35px;padding:10px 36px;display:flex;justify-content:space-between;gap:12px;font:9px var(--font-mono);color:#777f7a;border-top:1px solid #30362f}.raid{height:calc(100svh - 76px);min-height:420px;position:relative;overflow:hidden;background:#151a15}.raid canvas#world{display:block;width:100%;height:100%;touch-action:none;cursor:crosshair;outline:0}.raid-top{position:absolute;inset:20px 22px auto;display:flex;align-items:flex-start;justify-content:space-between;pointer-events:none;gap:16px}.hud-panel{background:#171c18eb;border:1px solid #6269556b;box-shadow:3px 3px 0 #090c0980}.mission{width:274px;padding:14px}.mission>strong{display:block;font-size:12px;line-height:1.7;margin-top:8px}.mission .eyebrow{font-size:8px;letter-spacing:1px;color:#b4b79f}.contract-status{display:flex;gap:12px;margin-top:10px;font-size:10px;color:#bcbca9}.contract-status .done{color:#a8cd8a}.awareness{display:flex;justify-content:space-between;font-size:9px;color:#b8bca9;margin:14px 0 6px}.awareness b{font-family:var(--font-mono)}.meter{height:4px;background:#424b3a;overflow:hidden}.meter i{display:block;width:0;height:100%;background:#ba9d68;transition:width .1s linear}.raid-clock{text-align:center;padding:10px 18px;background:#161d17c9;border-top:2px solid #9d7949}.raid-clock small{display:block;font-size:9px;color:#b5b6a3;letter-spacing:2px}.raid-clock strong{display:block;font:38px/1.2 var(--font-mono);margin:6px 0;color:#e6ddc3;letter-spacing:-2px}.raid-clock span{font-size:9px;color:#c5ad87}.raid-clock.final{border-color:#d16c43}.raid-clock.final strong{color:#e5aa7a}.map{padding:6px;pointer-events:auto;width:196px}.map canvas{display:block;width:100%;height:auto}.map button{width:100%;border:0;background:#2b3328;padding:6px 3px;font-size:9px;color:#bac0a7;display:flex;align-items:center;justify-content:space-between}.map kbd{font-size:8px}.raid-bottom{position:absolute;bottom:44px;left:22px;right:22px;display:flex;align-items:flex-end;gap:14px;pointer-events:none}.vitals{width:220px;padding:14px}.vital-line{display:flex;gap:10px;align-items:center;font-size:9px;color:#c2c8b4;margin:7px 0}.vital-line .meter{flex:1}.vital-line b{width:22px;font:10px var(--font-mono);text-align:right}.vital-line:last-child{padding-right:32px}#hp-bar{background:#bb7856}#armor-bar{background:#8aa3a1}#stamina-bar{background:#b3bd84}.weapon-hud{margin-left:auto;min-width:210px;padding:10px 13px;pointer-events:auto}.weapon-hud small{font-size:9px;color:#b8b9a6}.weapon-hud>div{display:flex;gap:7px;align-items:baseline;margin:6px 0 10px}.weapon-hud strong{font:32px var(--font-mono);line-height:1}.weapon-hud span{font:12px var(--font-mono);color:#939b87}.weapon-hud #reload{padding:4px 5px;font-size:9px;margin-left:auto;background:#313a2d}.weapon-hud #bag-toggle{width:100%;display:flex;align-items:center;gap:9px;padding:7px 0 0;font-size:10px;background:none;border:0;border-top:1px solid #545b4870;text-align:left}.weapon-hud #bag-toggle b{font:10px var(--font-mono);color:#b1bb9b;margin-left:auto}.weapon-hud kbd{font-size:8px}.quickslots{display:flex;gap:6px;pointer-events:auto}.quickslot{width:65px;height:69px;background:#1d241bea;position:relative;padding:7px 3px 4px;text-align:center;color:#ccd0b8;border:1px solid #6a725752}.quickslot kbd{position:absolute;top:3px;left:3px;font-size:7px;padding:1px 3px}.quickslot .atlas-icon{width:40px;height:40px}.quickslot>small{font-size:8px;display:block;margin-top:-3px;color:#c4c3ae}.quickslot.skill{width:55px;font-size:10px;padding-top:22px}.quickslot.skill small{font:9px var(--font-mono);margin-top:8px}.desktop-controls{position:absolute;bottom:14px;left:22px;right:22px;display:flex;justify-content:center;gap:18px;color:#b0b4a0;font-size:9px;pointer-events:none}.desktop-controls kbd{font-size:8px;border-color:#656d5380;padding:2px 3px}.boss-banner{position:absolute;left:50%;top:120px;transform:translateX(-50%);display:flex;flex-direction:column;gap:6px;background:#3c251aea;border-left:3px solid #c7643d;padding:12px 18px;text-align:center;pointer-events:none;max-width:90%;width:max-content}.boss-banner b{font-size:12px;color:#e5b891}.boss-banner span{font-size:10px;color:#c4aa8e}.prompt{position:absolute;left:50%;bottom:190px;transform:translateX(-50%);min-width:220px;max-width:80%;padding:12px 18px;background:#1f271beF;border:1px solid #879c68;box-shadow:3px 3px 0 #0006;text-align:center;pointer-events:none;font-size:12px}.prompt .meter{margin-top:9px}.prompt .meter i{background:#c9daa9}.toast{position:fixed;top:90px;left:50%;transform:translate(-50%,-8px);opacity:0;pointer-events:none;z-index:100;background:#222c20;border:1px solid #768666;box-shadow:var(--shadow-hard);padding:12px 18px;max-width:min(560px,92vw);font-size:12px;line-height:1.6;color:#e4e7d0;transition:opacity .2s,transform .2s}.toast.show{opacity:1;transform:translate(-50%,0)}.toast[data-kind=danger]{border-color:#be734e;background:#3d261c}.bag{position:absolute;top:16px;right:16px;bottom:16px;width:370px;z-index:15;background:#1a201bf7;border:2px solid #657052;box-shadow:var(--shadow-hard);padding:22px;overflow-y:auto}.bag-title{display:flex;justify-content:space-between;align-items:center}.bag-title h2{font-size:22px;margin-top:8px}.bag-title button{font-size:20px}.live-warning{margin:16px 0;font-size:10px;color:#d09971;border-left:2px solid #b7410e;padding-left:9px}.inventory-total{display:flex;justify-content:space-between;align-items:center;font-size:10px;margin-bottom:12px;color:#b3bca7}.inventory-total b{font:14px var(--font-mono);color:#d7ddb9}.item-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.item-card{background:#262e22;border:1px solid #586148;min-width:0;padding:8px;position:relative}.item-card.rare{border-color:#ac965f}.item-card.epic{border-color:#d2ac61}.item-card .atlas-icon{display:block;width:62px;height:62px;margin:0 auto}.item-card strong{display:block;font-size:10px;line-height:1.5}.item-card>small{display:block;margin-top:6px;font:9px var(--font-mono);color:#b4baa3}.item-actions{display:flex;gap:5px;margin-top:9px}.item-actions button{flex:1;min-width:0;font-size:9px;padding:6px 3px;background:#313b2b}.bag h3{margin:24px 0 6px;font-size:13px}.bag h3 small{float:right;font:10px var(--font-mono)}.hint{font-size:10px;color:#a9b09c;line-height:1.7;margin:8px 0 12px}.empty{grid-column:1/-1;min-height:110px;border:1px dashed #48543c;display:grid;place-items:center;text-align:center;color:#858e79;font-size:11px;line-height:1.8;padding:15px}.modal{position:fixed;inset:0;background:#060807c9;z-index:80;padding:24px;display:grid;place-items:center}.modal-sheet{width:580px;max-width:100%;max-height:90svh;overflow-y:auto;padding:30px;background:#24282a;border:2px solid #62635a;box-shadow:6px 6px 0 #090b09;outline:0}.modal-sheet h2{font-size:28px;line-height:1.4;margin:12px 0 20px}.modal-sheet p{font-size:12px;line-height:1.9;color:#b2b7af}.modal-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:24px}.modal-actions button{font-size:12px;flex:1;padding:12px;min-width:110px}.help-grid{display:grid;grid-template-columns:110px 1fr;gap:14px 16px;font-size:11px;line-height:1.7}.help-grid b{color:#d3b18e}.help-grid span{color:#c0c3b8}.result-hero{display:flex;justify-content:space-between;align-items:center;border-top:1px solid #4c5148;border-bottom:1px solid #4c5148;padding:20px 0;margin-bottom:20px}.result-hero strong{font:42px var(--font-mono);color:#b2cf92}.result-hero small{font-size:10px}.result-hero.lost strong{color:#d99572}.result-ledger>div{padding:6px 0}.result-ledger b{font-size:12px}.result-ledger .gain{color:var(--color-up)}.result-stamp{font:8px var(--font-mono);color:#8a9187;text-align:right;letter-spacing:2px;margin-top:20px}.warehouse-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:20px}.warehouse-equipment{font-size:11px;color:#b8beae;line-height:1.8;margin:15px 0;padding:10px;border:1px solid #505749}.touch-controls{display:none;position:absolute;left:18px;right:18px;bottom:20px;justify-content:space-between;align-items:center;gap:10px;pointer-events:none}.joystick{width:105px;height:105px;border:1px solid #d0d5b159;border-radius:50%;background:#0e170dbd;position:relative;touch-action:none;pointer-events:auto;user-select:none}.joystick i{display:block;width:44px;height:44px;border-radius:50%;background:#acb89277;border:1px solid #d0d5b18a;position:absolute;left:30px;top:30px}.joystick>span{position:absolute;bottom:-17px;left:0;right:0;text-align:center;font-size:9px;color:#d1d3b4}.aim-stick{border-color:#d8a5778c}.aim-stick i{background:#a764417d}.touch-buttons{display:flex;gap:7px;align-items:center;pointer-events:auto}.touch-buttons button{touch-action:none;padding:12px 9px;font-size:10px;background:#293821e8;color:#d8dec3}.touch-buttons #touch-interact{border:1px solid #8c9c75;min-height:54px}.touch-mode .touch-controls{display:flex}.touch-mode .desktop-controls{display:none}.touch-mode .raid-bottom{bottom:164px}.touch-mode .prompt{bottom:272px}.touch-mode .quickslot.skill{display:none}.touch-mode .raid{min-height:460px}
@media(min-width:1600px){.lobby{grid-template-columns:minmax(0,1fr) 450px}.preparation{padding:36px;gap:17px}.hero-title{padding:58px}.hero-bottom{left:58px;bottom:58px}.loadout-slot{min-height:96px}.contract-card{padding:20px 0}}
@media(max-width:1050px){.topbar{padding:0 22px}.edition{display:none}.lobby{grid-template-columns:minmax(0,1fr) 355px}.preparation{padding:22px}.hero-title{padding:38px 28px}.hero-title h1{font-size:100px;letter-spacing:-9px}.hero-title h2{font-size:16px;letter-spacing:3px}.hero-bottom{left:28px}.hero-bottom p{font-size:14px}.hero-art{object-position:33% center}.quickslot{width:54px}.quickslots{gap:4px}.raid-bottom{gap:9px}.vitals{width:190px}.desktop-controls{gap:10px;font-size:8px}}
@media(max-width:760px){.topbar{height:62px;padding:0 15px;gap:10px}.brand{font-size:16px;letter-spacing:1px}.brand-symbol{font-size:32px}.brand small{font-size:7px;letter-spacing:1.3px}.top-actions{gap:5px}.top-actions button{font-size:9px;padding:7px}.top-actions kbd{display:none}.lobby{display:block}.hero{min-height:440px}.hero-art{object-position:35% 43%}.hero-title{padding:30px 25px}.hero-title h1{font-size:95px;letter-spacing:-8px;margin:10px 0}.hero-title h2{font-size:15px;letter-spacing:2px}.hero-bottom{left:25px;bottom:24px}.hero-bottom p{font-size:13px;line-height:1.8;margin:12px 0}.hero-tags{font-size:10px;gap:16px}.hero-title .eyebrow{font-size:8px}.preparation{border-left:0;border-top:2px solid #515346;padding:24px;gap:14px}.lobby-footer{padding:12px 20px;font-size:8px;flex-wrap:wrap;line-height:1.7}.lobby-footer>span:last-child{display:none}.raid{height:calc(100svh - 62px)}.raid-top{inset:10px 10px auto;gap:8px}.mission{width:190px;padding:10px}.mission>strong{font-size:10px;margin-top:6px}.mission .eyebrow{font-size:7px}.contract-status{gap:7px;font-size:9px;margin-top:8px}.awareness{margin-top:10px;font-size:8px}.raid-clock{padding:7px 9px;margin-left:auto}.raid-clock strong{font-size:27px;letter-spacing:-1px}.raid-clock small,.raid-clock span{font-size:8px;letter-spacing:0}.map{position:absolute;right:0;top:89px;width:102px;padding:4px}.map button{font-size:8px;padding:3px}.map kbd{display:none}.raid-bottom{left:10px;right:10px;gap:7px;flex-wrap:wrap}.vitals{width:145px;padding:9px;flex-shrink:0}.vital-line{gap:6px;font-size:8px}.vital-line b{font-size:9px}.weapon-hud{min-width:160px;padding:8px 10px}.weapon-hud strong{font-size:26px}.weapon-hud #bag-toggle{font-size:9px;gap:5px}.weapon-hud #bag-toggle b{font-size:9px}.weapon-hud kbd{display:none}.quickslots{position:absolute;bottom:99px;left:0;gap:4px}.quickslot{width:42px;height:54px;padding-top:6px}.quickslot .atlas-icon{width:32px;height:32px}.quickslot>small{font-size:7px}.quickslot kbd{display:none}.quickslot.skill{width:42px;padding-top:10px;font-size:8px}.quickslot.skill small{font-size:8px}.boss-banner{top:153px;padding:10px;width:90%}.boss-banner b{font-size:10px}.boss-banner span{font-size:9px}.prompt{font-size:10px;min-width:190px;padding:9px 12px;bottom:200px}.touch-mode .prompt{bottom:312px}.touch-mode .raid-bottom{bottom:164px}.desktop-controls{font-size:8px;flex-wrap:wrap;gap:5px 10px;bottom:10px}.desktop-controls span:nth-child(n+5){display:none}.touch-controls{left:18px;right:18px;bottom:22px;gap:8px}.joystick{width:96px;height:96px;flex-shrink:0}.joystick i{left:26px;top:26px}.touch-buttons{flex-direction:column;gap:5px}.touch-buttons button{font-size:9px;padding:9px 8px}.touch-buttons #touch-interact{min-height:43px}.bag{inset:8px;width:auto;padding:20px}.bag .item-grid{grid-template-columns:repeat(2,1fr)}.modal{padding:12px}.modal-sheet{padding:23px 20px;max-height:92svh}.modal-sheet h2{font-size:25px}.help-grid{grid-template-columns:84px 1fr;gap:12px;font-size:10px}.warehouse-grid{grid-template-columns:repeat(2,1fr)}.toast{top:74px;font-size:11px;padding:10px 13px}.result-hero strong{font-size:32px}.result-hero{gap:10px}.result-ledger b{font-size:10px}}
@media(max-height:650px) and (min-width:761px){.topbar{height:58px}.lobby{min-height:calc(100svh - 93px)}.preparation{gap:9px;padding:18px 24px}.hero{min-height:600px}.raid{height:calc(100svh - 58px)}.raid-top{top:12px}.mission{padding:10px}.raid-bottom{bottom:38px}.map{width:150px}.boss-banner{top:106px}}
@media(pointer:coarse) and (orientation:landscape){.touch-mode .raid{min-height:330px}.touch-mode .raid-bottom{bottom:24px;left:140px;right:140px}.touch-mode .vitals{width:140px}.touch-mode .weapon-hud{min-width:160px}.touch-mode .quickslots{bottom:102px}.touch-mode .prompt{bottom:136px}.touch-controls{left:18px;right:18px;bottom:30px}.touch-buttons{position:absolute;right:0;bottom:113px}.touch-mode .mission{width:225px}.touch-mode .map{width:120px}.touch-mode .boss-banner{top:90px}.touch-mode .raid-clock{padding:4px 10px}.touch-mode .raid-clock strong{font-size:24px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}

/* v0.5 map readability: the enlarged floor uses a larger strategic inset on
   desktop, while mobile keeps the map compact enough to leave the mission HUD
   readable. The canvas itself carries the zone and gate legend. */
.map{width:232px;padding:7px;background:#151b16e8;border-color:#69745b8c;box-shadow:3px 3px 0 #080b0880}
.map canvas{image-rendering:auto;filter:contrast(1.04) saturate(.92)}
.map button{border-top:1px solid #69745b66;background:#273126;color:#c8ceb4}
@media(max-width:760px){.map{width:124px;padding:4px}.map button{font-size:8px;padding:4px 3px}}

/* v0.5 route contracts: make a multi-region run readable before and during the raid. */
.contract-option{min-height:112px}
.contract-option .contract-region{display:block;font:9px var(--font-mono);font-style:normal;letter-spacing:.3px;color:#d0b57c;line-height:1.35}
.contract-option .contract-note{margin-top:0;color:#818c7b}
.contract-stages{margin-top:9px;border-top:1px solid #485042;padding-top:6px;display:grid;gap:4px}
.contract-route{display:flex;align-items:baseline;justify-content:space-between;gap:7px;padding-bottom:4px;color:#d1b97e;font:8px var(--font-mono);letter-spacing:.4px}
.contract-route small{color:#9aa88b;font:8px var(--font-mono);text-align:right}
.contract-stage{display:grid;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:5px;min-width:0;color:#b0b9a0;font-size:8px;line-height:1.25}
.contract-stage>b{display:grid;place-items:center;width:16px;height:16px;border:1px solid #717a61;color:#c5b68a;font:8px var(--font-mono)}
.contract-stage>span{min-width:0;display:grid;gap:1px}
.contract-stage strong{font-size:8px;font-weight:600;color:#c6ccb7;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.contract-stage small{font-size:7px;color:#87927f;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.contract-stage em{font:8px var(--font-mono);font-style:normal;color:#a9b293;white-space:nowrap}
.contract-stage.done>b{border-color:#8cac77;background:#32462e;color:#e0e5c5}
.contract-stage.done strong,.contract-stage.done em{color:#a9cc8d}
.contract-stage.optional{opacity:.88}
.contract-stage.optional>b{border-style:dashed;color:#d0b57c}
.route-contract{margin-bottom:18px;padding:11px 12px;border:1px solid #59664f;background:#1b231c;display:grid;gap:6px}
.route-contract>strong{font-size:16px;color:#e3d7ba}
.route-contract>small{color:#d2b57e;font:9px var(--font-mono)}
.route-stage{display:grid;grid-template-columns:23px minmax(0,1fr) auto;align-items:center;gap:8px;padding:7px 0;border-top:1px solid #414b3e;color:#bbc4ad;font-size:10px}
.route-stage b{font:10px var(--font-mono);color:#c7b68b}
.route-stage em{font:9px var(--font-mono);font-style:normal;color:#a8b493}
.route-stage.done b,.route-stage.done em{color:#a9cc8d}
.route-stage.optional{color:#c8b68b}
.route-exits>.eyebrow{display:block;margin:0 0 8px}
@media(max-width:760px){.contract-option{min-height:0}.contract-stages{margin-top:7px}.contract-stage small{font-size:7px}.route-contract>strong{font-size:14px}}

/* v0.3 contract desk: make the strategic choice visible before the raid. */
.profile-readout{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:9px 10px;background:#181b1b;border:1px solid #3b4139;color:#9da596;font-size:10px;line-height:1.45}
.loadout-icon{display:inline-block;flex-shrink:0;width:78px;height:78px;background-image:url('../assets/loadout-icons-generated.png');background-size:500% 200%;background-position:var(--icon-x,0%) var(--icon-y,0%);background-repeat:no-repeat;filter:drop-shadow(0 4px 3px #0008)}
.loadout-icon.armor-icon{width:72px;height:72px}
.profile-readout span{font:9px var(--font-mono);letter-spacing:.8px;color:#b5aa92}
.profile-readout b{font:10px var(--font-mono);color:#c8d2b1;text-align:right}
.contract-card{display:block}
.contract-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:10px}
.contract-heading small{font:9px var(--font-mono);letter-spacing:.6px}
.contract-heading>span{font-size:10px;color:#b7c09e;text-align:right}
.contract-options{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.contract-option{display:flex;min-height:86px;flex-direction:column;align-items:flex-start;gap:5px;text-align:left;background:#171b1a;border:1px solid #39413a;padding:9px 8px;transition:transform .15s,border-color .15s,background .15s}
.contract-option:hover{transform:translateY(-1px);border-color:#8b7658;background:#222820}
.contract-option[aria-pressed=true]{border-color:#d2764f;background:#3a261d;box-shadow:inset 0 2px 0 #d2764f}
.contract-option strong{font-size:11px;color:#e2dbc5}
.contract-option span{font-size:9px;line-height:1.5;color:#c2c8b3}
.contract-option small{font-size:8px;line-height:1.35;color:#a2ad95;margin-top:auto}
.contract-name{color:#d4bd8f}
.result-contract{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:9px;padding:11px 0;margin-bottom:10px;border-bottom:1px solid #4c5148;color:#9fa796;font-size:10px}
.result-contract b{font-size:12px;color:#dbcfad}
.result-contract small{font:9px var(--font-mono);color:#b4c294}
@media(max-width:760px){.contract-options{grid-template-columns:1fr}.contract-option{min-height:0}.contract-heading{display:block}.contract-heading>span{display:block;margin-top:5px;text-align:left}.profile-readout{align-items:flex-start;flex-direction:column;gap:4px}.profile-readout b{text-align:left}.result-contract{grid-template-columns:1fr 1fr}.result-contract small{grid-column:1/-1}}
.clockout-mark{display:inline-block;margin-top:16px;padding:5px 8px;border:1px solid #c58a5b;background:#1d2420b8;color:#e0bd8a;font:9px var(--font-mono);letter-spacing:1.6px;box-shadow:3px 3px 0 #090b0b80}
@media(max-width:760px){.clockout-mark{margin-top:10px;font-size:8px;letter-spacing:1px}}

/* Armor icons use independent source windows because the lower row is not a five-column grid. */
.loadout-icon.armor-icon{background-image:none;background-size:contain;background-position:center;background-repeat:no-repeat;object-fit:contain;object-position:center}
.prep-actions{display:flex;gap:6px;align-items:center}.prep-actions button{font-size:11px;padding:7px 10px}.raid-modifier{display:block;margin-top:5px;color:#d2ae76;font:8px var(--font-mono);letter-spacing:.5px;line-height:1.5}.raid-event-status{display:block;margin-top:4px;color:#e4c27d;font:9px var(--font-mono);line-height:1.45}.raid-event-status[data-state=alert]{color:#e09a70}.raid-event-status[data-state=done]{color:#9dbd88}.workbench-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:18px}.workbench-card{background:#1b211c;border:1px solid #56604a;padding:11px;min-width:0}.workbench-card h3{font-size:12px;margin:0 0 6px}.workbench-card p{font-size:10px;line-height:1.6;color:#b2b8aa;margin:0 0 9px}.workbench-card small{display:block;color:#c5b890;font:9px var(--font-mono);margin-bottom:9px}.workbench-card button{width:100%;font-size:10px;padding:7px 6px;background:#313c2d}.workbench-card button.primary{background:var(--color-primary)}.workbench-card button:disabled{opacity:.45}.workbench-kicker{margin-top:18px;padding-top:12px;border-top:1px solid #4c5148;color:#d0b57c;font:9px var(--font-mono);letter-spacing:1px}.profile-readout i{font:9px var(--font-mono);font-style:normal;color:#d0b57c;white-space:nowrap}@media(max-width:760px){.prep-actions{gap:4px}.prep-actions button{font-size:9px;padding:6px 7px}.workbench-grid{grid-template-columns:1fr}.profile-readout i{white-space:normal}.raid-event-status{font-size:8px}}

/* Keep the route contract additions after the legacy v0.3 rules so the expanded card stays readable. */
.contract-options{grid-template-columns:repeat(auto-fit,minmax(105px,1fr))}
.contract-option{min-height:112px}
.contract-option .contract-region{display:block;font:9px var(--font-mono);font-style:normal;letter-spacing:.3px;color:#d0b57c;line-height:1.35}
.contract-option .contract-note{margin-top:0;color:#818c7b}
.contract-stages{margin-top:9px;border-top:1px solid #485042;padding-top:6px;display:grid;gap:4px}
.contract-route{display:flex;align-items:baseline;justify-content:space-between;gap:7px;padding-bottom:4px;color:#d1b97e;font:8px var(--font-mono);letter-spacing:.4px}
.contract-route small{color:#9aa88b;font:8px var(--font-mono);text-align:right}
.contract-stage{display:grid;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:5px;min-width:0;color:#b0b9a0;font-size:8px;line-height:1.25}
.contract-stage>b{display:grid;place-items:center;width:16px;height:16px;border:1px solid #717a61;color:#c5b68a;font:8px var(--font-mono)}
.contract-stage>span{min-width:0;display:grid;gap:1px}
.contract-stage strong{font-size:8px;font-weight:600;color:#c6ccb7;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.contract-stage small{font-size:7px;color:#87927f;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.contract-stage em{font:8px var(--font-mono);font-style:normal;color:#a9b293;white-space:nowrap}
.contract-stage.done>b{border-color:#8cac77;background:#32462e;color:#e0e5c5}
.contract-stage.done strong,.contract-stage.done em{color:#a9cc8d}
.contract-stage.optional{opacity:.88}
.contract-stage.optional>b{border-style:dashed;color:#d0b57c}
.route-contract{margin-bottom:18px;padding:11px 12px;border:1px solid #59664f;background:#1b231c;display:grid;gap:6px}
.route-contract>strong{font-size:16px;color:#e3d7ba}
.route-contract>small{color:#d2b57e;font:9px var(--font-mono)}
.route-stage{display:grid;grid-template-columns:23px minmax(0,1fr) auto;align-items:center;gap:8px;padding:7px 0;border-top:1px solid #414b3e;color:#bbc4ad;font-size:10px}
.route-stage b{font:10px var(--font-mono);color:#c7b68b}
.route-stage em{font:9px var(--font-mono);font-style:normal;color:#a8b493}
.route-stage.done b,.route-stage.done em{color:#a9cc8d}
.route-stage.optional{color:#c8b68b}
.route-exits>.eyebrow{display:block;margin:0 0 8px}
@media(max-width:760px){.contract-options{grid-template-columns:1fr}.contract-option{min-height:0}.contract-stages{margin-top:7px}.contract-stage small{font-size:7px}.route-contract>strong{font-size:14px}}

@media(max-width:760px){.contract-stages .contract-route{display:none}.contract-stages .contract-stage:not(.current){display:none}.contract-stages .contract-stage{font-size:9px;min-height:28px}.contract-stages .contract-stage strong{font-size:9px}.mission .raid-modifier{display:none}}

/* Persistent chapter goals use the existing ledger palette and compact rhythm. */
.campaign-board,.campaign-settlement{border:1px solid #55554d;border-left:3px solid var(--color-primary);padding:12px;background:#202322;min-width:0}
.campaign-heading{display:flex;justify-content:space-between;align-items:center;gap:8px}.campaign-heading>span,.campaign-settlement>span{font:10px var(--font-mono);color:#c9af8e}
.campaign-heading button{font-size:10px;padding:5px 7px}.campaign-board>strong,.campaign-settlement>strong{display:block;font-size:14px;margin:9px 0 6px;color:#efe9da}
.campaign-board p,.campaign-settlement p{font-size:11px;line-height:1.65;margin:5px 0;color:#b8beb5}.campaign-board>small{display:block;font-size:10px;line-height:1.6;color:#c9af8e}
.campaign-list{display:grid;gap:10px;margin-top:18px}.campaign-chapter{padding:13px;border:1px solid #484e46;background:#1b201c}.campaign-chapter.current{border-color:var(--color-primary)}.campaign-chapter h3{font-size:15px;margin:7px 0}.campaign-chapter small{font-size:10px;color:#c9af8e}.campaign-settlement{margin-top:18px}

.modal{grid-template-columns:minmax(0,1fr)}.modal-sheet{width:min(580px,100%);min-width:0;overflow-wrap:anywhere}
.audio-preview-row{display:flex;flex-wrap:wrap;align-items:center;gap:7px 10px;margin-top:9px;color:#abb4a9;font-size:10px;line-height:1.5}.audio-preview-row button{flex:none;padding:7px 10px;border:1px solid #687b65;background:#283428;color:#e1e7d4;font-size:10px}.audio-preview-row button:hover{background:#354735}
