@font-face{font-family:Galmuri11;src:url(/fonts/Galmuri11.woff2)format("woff2");font-display:swap}@font-face{font-family:Galmuri9;src:url(/fonts/Galmuri9.woff2)format("woff2");font-display:swap}@font-face{font-family:Galmuri7;src:url(/fonts/Galmuri7.woff2)format("woff2");font-display:swap}:root{--text-scale:1;--color-semantic-background-app:#141714;--color-semantic-text-primary:#f2e7cb;--color-semantic-text-secondary:#b8aa8c;--color-semantic-text-accent:#d8892b;--color-semantic-surface-panel:#252a22f0;--color-semantic-surface-raised:#30362b;--color-semantic-surface-sunken:#20271d;--color-semantic-border-default:#555b48;--color-semantic-border-focus:#ffd36a;--color-semantic-terrain-route:#d8892b;--color-semantic-terrain-river:#3c7890;--color-semantic-terrain-ridge:#777a55;--color-semantic-status-warning:#e1b54a;--color-semantic-status-danger:#c94a3e;--color-semantic-status-safe:#3f9a62}*{box-sizing:border-box}html,body{background:var(--color-semantic-background-app);height:100%;color:var(--color-semantic-text-primary);font-family:Galmuri11,Neo둥근모,monospace;font-size:calc(15px * var(--text-scale));image-rendering:pixelated;background-image:linear-gradient(#555b4814 1px,#0000 1px),linear-gradient(90deg,#555b4814 1px,#0000 1px);background-size:32px 32px;margin:0}#game-root canvas{image-rendering:pixelated;display:block}.dom-layer{pointer-events:none;position:fixed;inset:0;overflow-y:auto}.dom-layer>.screen{pointer-events:auto}.dom-layer[data-surface=canvas]{width:min(360px,100vw);max-height:100vh;inset:auto 0 0 auto}.screen{background:linear-gradient(135deg, #ffffff05, transparent 38%), var(--color-semantic-surface-panel);border:2px solid var(--color-semantic-border-default);flex-direction:column;gap:16px;max-width:960px;margin:0 auto;padding:24px 20px 48px;display:flex;box-shadow:8px 8px #0000003d}.screen-eyebrow{color:var(--color-semantic-text-accent);letter-spacing:.08em;margin:0;font-size:.8em}.screen-headline{margin:4px 0 0;font-size:1.6em}.screen-support,.screen-question{color:var(--color-semantic-text-secondary);margin:0;line-height:1.6}.screen-body{flex-direction:column;gap:12px;display:flex}.card{border:1px solid var(--color-semantic-border-default);background:color-mix(in srgb, var(--color-semantic-surface-raised) 72%, transparent);padding:12px 14px}.card-title{color:var(--color-semantic-text-accent);margin:0 0 6px;font-size:.9em}.card-value{margin:0;line-height:1.5}.card-list{margin:0;padding-left:18px;line-height:1.7}.data-list{border:1px dashed var(--color-semantic-border-default);grid-template-columns:max-content 1fr;gap:4px 16px;margin:0;padding:12px 14px;display:grid}.data-key{color:var(--color-semantic-text-secondary)}.data-value{margin:0}.data-value>.data-list{gap:2px 12px;padding:6px 10px}.data-sublist{margin:0;padding-left:16px;line-height:1.6}.button{border:2px solid var(--color-semantic-border-default);min-height:44px;color:inherit;font:inherit;cursor:pointer;background:0 0;padding:10px 16px}.button-primary{border-color:var(--color-semantic-text-accent);color:var(--color-semantic-text-accent);background:color-mix(in srgb, var(--color-semantic-terrain-route) 10%, transparent)}.button:hover:not(:disabled){background:color-mix(in srgb, var(--color-semantic-text-primary) 6%, transparent)}.button:active:not(:disabled){transform:translate(1px,1px)}.button:focus-visible,.slot:focus-visible,.faction-card:focus-visible,.input:focus-visible{outline:3px solid var(--color-semantic-border-focus);outline-offset:2px}.field{flex-direction:column;gap:6px;display:flex}.field-label{color:var(--color-semantic-text-secondary);font-size:.85em}.input{border:2px solid var(--color-semantic-border-default);background:var(--color-semantic-surface-sunken);color:inherit;font:inherit;padding:10px 12px}.trait-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;display:grid}.trait-cell{border:1px solid var(--color-semantic-border-default);justify-content:space-between;padding:8px 10px;display:flex}.trait-name{color:var(--color-semantic-text-secondary)}.slot-grid,.faction-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px;display:grid}.slot,.faction-card{border:2px solid var(--color-semantic-border-default);min-height:56px;color:inherit;font:inherit;cursor:pointer;background:0 0;flex-direction:column;align-items:flex-start;gap:4px;padding:10px;display:flex}.faction-card{border-left:6px solid var(--faction-color,currentColor)}.faction-card[aria-pressed=true]{border-color:var(--color-semantic-text-accent)}.faction-shape{color:var(--color-semantic-text-secondary);font-size:.8em}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}:root[data-reduce-motion=true] *{transition-duration:.001ms!important;animation-duration:.001ms!important}:root[data-high-contrast=true] .screen{background:#000;border-color:#fff}:root[data-high-contrast=true]{--color-semantic-text-secondary:#fff}@media (max-width:767px){.screen{padding:16px 12px 32px}.dom-layer[data-surface=canvas]{width:100vw;max-height:55vh}.button{min-height:48px}}@media (min-width:1440px){.screen{max-width:1120px}}.ledger-slot{flex-direction:column;gap:8px;display:flex}.ledger-section{border:1px solid var(--color-semantic-border-default);flex-direction:column;gap:8px;padding:12px 14px;display:flex}.ledger-notice{color:var(--color-semantic-text-secondary);border-left:3px solid var(--color-semantic-text-accent);margin:0;padding-left:8px;font-size:.82em;line-height:1.5}.shop-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;display:grid}.shop-item{border:2px solid var(--color-semantic-border-default);min-height:56px;color:inherit;font:inherit;cursor:pointer;text-align:left;background:0 0;flex-direction:column;align-items:flex-start;gap:4px;padding:10px 12px;display:flex}.shop-item:disabled{cursor:not-allowed;opacity:.5;border-style:dashed}.shop-item:focus-visible{outline:3px solid var(--color-semantic-border-focus);outline-offset:2px}.shop-price{color:var(--color-semantic-text-accent);font-size:.85em}@media (max-width:767px){.shop-item{min-height:60px}}.world-list{flex-direction:column;gap:12px;display:flex}.world-card[data-selected=true]{border-color:var(--color-semantic-text-accent)}.world-head{width:100%;min-height:48px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:2px solid #0000;justify-content:space-between;align-items:center;gap:12px;padding:6px 8px;display:flex}.world-head[aria-pressed=true]{border-color:var(--color-semantic-text-accent)}.world-head:focus-visible{outline:3px solid var(--color-semantic-border-focus);outline-offset:2px}.world-phase{color:var(--color-semantic-text-secondary);letter-spacing:.08em;font-size:.8em}.tally{border:1px dashed var(--color-semantic-border-default);grid-template-columns:1.4fr repeat(3,1fr);gap:4px 10px;padding:10px 12px;font-size:.95em;display:grid}.tally-head{color:var(--color-semantic-text-secondary);font-size:.85em}.tally-name{align-items:center;gap:6px;display:flex}.tally-value{text-align:right;font-variant-numeric:tabular-nums}.faction-mark{color:var(--faction-color,currentColor)}.faction-mark:before{content:"◆"}.faction-mark[data-symbol=triangle-up]:before{content:"▲"}.faction-mark[data-symbol=square]:before{content:"■"}.faction-mark[data-symbol=cross]:before{content:"✚"}.faction-mark[data-symbol=hexagon]:before{content:"⬢"}.faction-mark[data-symbol=ring]:before{content:"◯"}.stat-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px;display:grid}.stat-cell{border:1px solid var(--color-semantic-border-default);justify-content:space-between;gap:8px;padding:6px 8px;display:flex}.stat-cost{color:var(--color-semantic-text-secondary);font-variant-numeric:tabular-nums}.slot-cost{color:var(--color-semantic-text-secondary);font-size:.8em}.slot[disabled],.faction-card[disabled]{cursor:not-allowed;opacity:.45}.ledger-note{color:var(--color-semantic-text-secondary);margin:0;font-size:.85em;line-height:1.5}.hint{color:var(--color-semantic-text-secondary);margin:0;line-height:1.6}.hint[hidden]{display:none}.blocked{color:var(--color-semantic-text-secondary);font-size:.8em;line-height:1.4}:root[data-faction-patterns=true] .faction-card[data-hatch=diagonal-right]{background-image:repeating-linear-gradient(45deg, transparent 0 6px, var(--faction-color) 6px 7px)}:root[data-faction-patterns=true] .faction-card[data-hatch=diagonal-left]{background-image:repeating-linear-gradient(-45deg, transparent 0 6px, var(--faction-color) 6px 7px)}:root[data-faction-patterns=true] .faction-card[data-hatch=dots]{background-image:radial-gradient(var(--faction-color) 1px, transparent 1px);background-size:8px 8px}@media (max-width:767px){.tally{gap:4px 6px;font-size:.85em}.world-head{min-height:56px}}.world{flex-direction:column;gap:10px;display:flex}.world [hidden]{display:none}.world-card{border:1px solid var(--color-semantic-border-default);flex-direction:column;gap:6px;padding:10px 12px;display:flex}.world-card-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.world-card-title{color:var(--color-semantic-text-accent);margin:0;font-size:.85em}.world-line{margin:0;line-height:1.5}.world-countdown{font-variant-numeric:tabular-nums;margin:0;font-size:1.3em}.world-view-row{align-items:center;gap:6px;display:flex}.world-view-button{min-width:42px;min-height:40px;padding:6px 10px;font-size:1.1em}.world-view-reset{margin-left:auto;font-size:.85em}.world-zoom-value{min-width:58px;color:var(--color-semantic-text-accent);text-align:center;font-variant-numeric:tabular-nums}.world-minimap-row .button{flex:1;min-height:40px;padding:6px 8px;font-size:.82em}.world-note{color:var(--color-semantic-text-secondary);margin:0;font-size:.85em;line-height:1.5}.world-note:empty{display:none}.world-badge{border:1px solid var(--color-semantic-border-default);white-space:nowrap;padding:2px 8px;font-size:.8em}.world-badge[data-phase=INPUT],.world-badge[data-state=ACCEPTED]{border-color:var(--color-semantic-text-accent);color:var(--color-semantic-text-accent)}.world-badge[data-state=REJECTED]{border-style:dashed}.world-vitals{grid-template-columns:max-content 1fr max-content 1fr;gap:4px 10px;margin:0;display:grid}.world-vital-key{color:var(--color-semantic-text-secondary);font-size:.85em}.world-vital-value{font-variant-numeric:tabular-nums;margin:0}.world-reasons{margin:0;padding-left:16px}.world-reason{color:var(--color-semantic-text-secondary);font-size:.85em;line-height:1.6}.world-kinds{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.world-kind{min-height:40px;padding:8px 4px}.world-kind[aria-pressed=true]{border-color:var(--color-semantic-text-accent);color:var(--color-semantic-text-accent)}.world-kind:disabled,.world .button:disabled{opacity:.45;cursor:not-allowed}.world-actions{gap:6px;display:flex}.world-actions .button{flex:1;min-height:44px}.world-intel,.world-log{max-height:168px;margin:0;padding:0;list-style:none;overflow-y:auto}.world-intel-row,.world-log-row{border-bottom:1px solid color-mix(in srgb, var(--color-semantic-border-default) 60%, transparent);align-items:baseline;gap:6px;padding:3px 0;font-size:.85em;display:flex}.world-intel-range{font-variant-numeric:tabular-nums}.world-intel-target,.world-intel-seen,.world-log-tick{color:var(--color-semantic-text-secondary);white-space:nowrap}.world-log-text{line-height:1.5}.world-nav{grid-template-columns:repeat(2,1fr);gap:6px;display:grid}@media (max-width:767px){.world-kind,.world-actions .button{min-height:48px}.world-intel,.world-log{max-height:120px}}.roster-sheet{flex-direction:column;gap:16px;display:flex}.roster-section{flex-direction:column;gap:8px;display:flex}.roster-section-title{letter-spacing:.04em;color:var(--color-semantic-text-accent);margin:0;font-size:.9em}.officer-dossier{border:1px solid var(--color-semantic-border-default);background:var(--color-semantic-surface-sunken);grid-template-columns:minmax(120px,180px) 1fr;align-items:stretch;gap:18px;padding:14px;display:grid}.officer-portrait{border:3px double var(--color-semantic-text-secondary);min-height:192px;image-rendering:pixelated;box-shadow:inset 0 -32px 0 color-mix(in srgb, var(--color-semantic-background-app) 28%, transparent);background:url(/art/officer-portraits.png) 0/400% 100% no-repeat}.officer-identity{flex-direction:column;justify-content:center;gap:10px;display:flex}.officer-name{margin:0;font-size:clamp(1.5rem,4vw,2.5rem)}.officer-identity .roster-note{padding-block:4px}.officer-identity .trait-grid{grid-template-columns:repeat(5,minmax(72px,1fr))}.roster-note{border-left:3px solid var(--color-semantic-border-default);color:var(--color-semantic-text-secondary);margin:0;padding:8px 10px;font-size:.9em;line-height:1.6}.roster-rows{flex-direction:column;gap:6px;display:flex}.roster-row{border:1px solid var(--color-semantic-border-default);flex-wrap:wrap;gap:2px 14px;padding:8px 10px;display:flex}.roster-row-id{min-width:9em}.roster-row-field{color:var(--color-semantic-text-secondary)}.roster-row[data-self=true]{border-color:var(--color-semantic-text-accent)}.roster-summary{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px;display:grid}.roster-summary .card-value{font-size:1.3em}.roster-summary[hidden]{display:none}.roster-actions{flex-wrap:wrap;gap:8px;display:flex}.roster-actions .button{flex:auto}.roster-actions .button[disabled]{opacity:.55;cursor:not-allowed}@media (max-width:767px){.officer-dossier{grid-template-columns:104px 1fr;gap:12px;padding:10px}.officer-portrait{min-height:144px}.officer-identity .trait-grid,.roster-summary{grid-template-columns:repeat(2,1fr)}.roster-row{flex-direction:column}}.battle-chip{border:2px solid var(--color-semantic-border-default);min-height:44px;color:inherit;font:inherit;cursor:pointer;background:0 0;padding:8px 12px}.battle-chip[aria-pressed=true]{border-color:var(--color-semantic-text-accent);color:var(--color-semantic-text-accent)}.battle-note,.siege-note{color:var(--color-semantic-text-secondary);margin:6px 0 0;font-size:.82em;line-height:1.5}.battle-speeds{gap:8px;display:flex}.battle-speeds>.battle-chip{flex:1}.battle-verdict{border-left:3px solid var(--color-semantic-text-accent)}.battle-winner{color:var(--color-semantic-text-accent);font-size:1.15em}.siege-progress{counter-reset:siege-stage;grid-template-columns:repeat(3,1fr);gap:4px;margin:0;padding:0;list-style:none;display:grid}.siege-progress-step{border:1px solid var(--color-semantic-border-default);min-height:52px;color:var(--color-semantic-text-secondary);counter-increment:siege-stage;padding:8px 6px;font-size:.76em;line-height:1.4}.siege-progress-step:before{content:counter(siege-stage, decimal-leading-zero) " ";margin-bottom:3px;display:block}.siege-progress-step[data-state=done]{border-color:var(--color-semantic-text-accent)}.siege-progress-step[data-state=active]{border:2px solid var(--color-semantic-text-accent);color:var(--color-semantic-text-accent);animation:1.1s steps(2,end) infinite siege-active}.siege-progress-note{border-left:3px solid var(--color-semantic-text-accent);color:var(--color-semantic-text-primary);margin:8px 0 0;padding:10px 12px;line-height:1.5}@keyframes siege-active{50%{background:color-mix(in srgb, var(--color-semantic-text-accent) 12%, transparent)}}.siege-targets{flex-direction:column;gap:6px;display:flex}.siege-target{border:2px solid var(--color-semantic-border-default);min-height:44px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;justify-content:space-between;align-items:baseline;gap:10px;padding:8px 10px;display:flex}.siege-target[aria-pressed=true]{border-color:var(--color-semantic-text-accent)}.siege-target-owner{color:var(--color-semantic-text-secondary);font-size:.82em}.siege-engines,.siege-slots{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.siege-slot{border:2px dashed var(--color-semantic-border-default);min-height:56px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;flex-direction:column;gap:2px;padding:8px;display:flex}.siege-slot[aria-pressed=true]{border-style:solid;border-color:var(--color-semantic-text-accent)}.siege-slot-name{font-size:.9em}.siege-slot-troops{color:var(--color-semantic-text-secondary);font-size:.78em}.battle-chip:focus-visible,.siege-target:focus-visible,.siege-slot:focus-visible{outline:3px solid var(--color-semantic-border-focus);outline-offset:2px}@media (max-width:767px){.battle-chip,.siege-target{min-height:48px}.siege-slots{grid-template-columns:repeat(2,1fr)}}
