:root{color:#11161d;background:radial-gradient(circle at top left,rgba(255,146,76,.28),transparent 34%),radial-gradient(circle at top right,rgba(89,164,255,.2),transparent 28%),linear-gradient(160deg,#efe3cf,#f8f5ef 55%,#dfe7f4);font-family:Bahnschrift,Trebuchet MS,sans-serif;--ink: #11161d;--muted: #506070;--paper: rgba(255, 250, 244, .92);--paper-strong: rgba(255, 255, 255, .95);--line: rgba(17, 22, 29, .14);--brand: #154a98;--brand-2: #c75d2c;--success: #2f7b5f;--warning: #9c5a15;--shadow: 0 20px 50px rgba(17, 22, 29, .12)}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;min-width:320px;color:var(--ink)}button,input,select{font:inherit}button{border:0;border-radius:12px;min-height:2.75rem;padding:.75rem 1rem;background:linear-gradient(135deg,var(--brand),#2f74dc);color:#fff;cursor:pointer;font-weight:800;transition:transform .12s ease,box-shadow .12s ease,opacity .12s ease}button:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 10px 18px #154a982e}button:disabled{opacity:.55;cursor:not-allowed;box-shadow:none}.button-secondary{background:linear-gradient(135deg,#2f7b5f,#419273)}.button-ghost{background:#154a9814;color:var(--ink);border:1px solid rgba(21,74,152,.12);box-shadow:none}.button-ghost.is-current{background:#154a982e;border-color:#154a9857}input,select{width:100%;padding:.8rem .9rem;border-radius:12px;border:1px solid var(--line);background:var(--paper-strong);color:var(--ink)}label{display:grid;gap:.45rem;font-weight:700}h1,h2,h3,p{margin:0}.shell{width:min(1400px,calc(100vw - 2rem));margin:0 auto;padding:2.25rem 0 4rem}.hero{display:grid;grid-template-columns:auto 1fr;gap:1.25rem;align-items:center}.crest{display:grid;place-items:center;width:5.4rem;height:5.4rem;border-radius:18px;background:linear-gradient(145deg,#102239,#2354a3);color:#fff;font-size:3rem;font-weight:900;box-shadow:0 18px 40px #10223933,0 0 0 4px #ffffff73}.eyebrow{color:var(--brand-2);font-size:.75rem;font-weight:900;letter-spacing:.18em;text-transform:uppercase}#title{font-size:clamp(2.8rem,7vw,5.6rem);line-height:.94}.subtitle{max-width:60rem;margin-top:.75rem;color:var(--muted);font-size:clamp(1rem,2vw,1.25rem)}.subtitle-small,.helper-copy,small{color:var(--muted);line-height:1.45}.toolbar,.identity-band,.section-nav{display:flex;flex-wrap:wrap;gap:1rem;align-items:center;justify-content:space-between;margin-top:1.5rem;padding:1rem 1.1rem;border-radius:18px;background:#ffffff9e;border:1px solid rgba(255,255,255,.54);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:var(--shadow)}.section-nav{justify-content:flex-start}.status-meta{display:grid;gap:.3rem;justify-items:end}.auth-grid,.dashboard-grid,.battle-layout{display:grid;gap:1rem;margin-top:1.5rem}.auth-grid,.dashboard-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.battle-layout{grid-template-columns:minmax(0,1.8fr) minmax(320px,.95fr)}.panel{padding:1.2rem;border-radius:22px;background:var(--paper);border:1px solid rgba(255,255,255,.62);box-shadow:var(--shadow)}.guest-panel,.maps-panel,.battle-panel,.battle-sidebar{display:grid;gap:1rem}.panel-heading,.battle-header{display:flex;gap:1rem;justify-content:space-between;align-items:flex-start}.inline-form{display:grid;grid-template-columns:repeat(2,minmax(220px,1fr));gap:.9rem;flex:1 1 38rem}.actions,.legend-row,.command-group{display:flex;flex-wrap:wrap;gap:.75rem}.command-group{margin-top:.5rem}.roster,.preset-list,.map-grid,.turn-order-list,.participant-list,.event-log,.detail-stack{display:grid;gap:.75rem}.roster-row,.preset-row,.map-row,.assignment-row,.turn-order-row,.participant-row,.event-row{display:grid;gap:.45rem;padding:.9rem;border-radius:16px;background:#ffffffb3;border:1px solid var(--line)}.roster-row,.assignment-row{grid-template-columns:minmax(0,1fr) 15rem;align-items:center}.preset-row{grid-template-columns:minmax(0,1fr) auto;align-items:center}.assignment-list{display:grid;gap:.65rem}.message{margin-top:1rem;padding:.95rem 1rem;border-radius:16px;background:#154a9817;border:1px solid rgba(21,74,152,.18)}.message-warning{background:#c75d2c1a;border-color:#c75d2c38}.validation-box,.code-block{padding:.95rem 1rem;border-radius:16px;background:#11161d0a;border:1px solid var(--line)}.flat-list{margin:.5rem 0 0;padding-left:1rem}.map-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.badge{padding:.35rem .65rem;border-radius:999px;background:#154a981f;font-size:.82rem;font-weight:800}.status-stack{display:grid;gap:.3rem;justify-items:end}.battle-grid{display:grid;gap:.35rem}.battle-tile{position:relative;min-height:7.2rem;padding:.6rem;align-content:space-between;justify-items:start;background:#ffffffdb;color:var(--ink);border:1px solid rgba(17,22,29,.08);box-shadow:none}.battle-tile.terrain-plain{background:linear-gradient(180deg,#f3ecd8,#e6dcc2)}.battle-tile.terrain-forest{background:linear-gradient(180deg,#d9ead8,#bfd8b7)}.battle-tile.terrain-river{background:linear-gradient(180deg,#d7ebff,#b8d9ff)}.battle-tile.terrain-ridge{background:linear-gradient(180deg,#ede7f6,#d7d0ec)}.battle-tile.spawn-player:after,.battle-tile.spawn-enemy:after{content:"";position:absolute;inset:6px;border-radius:14px;border:1px dashed rgba(17,22,29,.18);pointer-events:none}.battle-tile.is-selected{outline:3px solid rgba(21,74,152,.35)}.battle-tile.is-reachable{box-shadow:inset 0 0 0 3px #2f7b5f40}.battle-tile.is-targetable{box-shadow:inset 0 0 0 3px #c75d2c47}.battle-tile.is-deployable{box-shadow:inset 0 0 0 3px #9c5a1538}.battle-tile.is-active{transform:translateY(-2px)}.tile-coord,.tile-terrain{font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em}.tile-unit{width:100%;padding:.5rem .55rem;border-radius:14px;background:#ffffffc7;border:1px solid rgba(17,22,29,.1)}.tile-unit.side-player{background:#154a9824}.tile-unit.side-enemy{background:#c75d2c24}.tile-unit.is-defeated{opacity:.45}.turn-order-row.is-current{border-color:#154a9859;background:#154a9814}.legend-row{align-items:center;color:var(--muted)}.code-block{overflow:auto;white-space:pre-wrap;font-family:Consolas,Courier New,monospace}@media(max-width:1120px){.battle-layout,.dashboard-grid,.auth-grid{grid-template-columns:1fr}.status-meta,.status-stack{justify-items:start}}@media(max-width:760px){.shell{width:min(100vw - 1rem,100%);padding-top:1.25rem}.hero,.roster-row,.assignment-row,.inline-form,.preset-row{grid-template-columns:1fr}.toolbar,.identity-band,.section-nav{padding:.95rem}.battle-tile{min-height:6rem}}
