:root{--qh-bg:#0e0b14;--qh-bg-deep:#07050b;--qh-panel:#17121f;--qh-panel-2:#1f1829;--qh-line:#3a2f4a;--qh-line-strong:#5a4a6e;--qh-text:#d9cfbd;--qh-text-strong:#efe6d2;--qh-muted:#b9aec4;--qh-accent:#d9b45a;--qh-accent-strong:#f1d58a;--qh-accent-soft:#d9b45a24;--qh-on-accent:#0e0b14;--qh-danger:#e8705f;--qh-danger-strong:#d0453a;--qh-danger-soft:#d0453a29;--qh-danger-fill:#7a1f1a;--qh-on-danger:#efe6d2;--qh-ok:#8fcf9a;--qh-warn:#f0a35a;--qh-info:#9cc0f0;--qh-display:"Cinzel", "Trajan Pro", Georgia, serif;--qh-body:"Crimson Pro", Georgia, "Times New Roman", serif;--text:var(--qh-text);--text-h:var(--qh-text-strong);--bg:var(--qh-bg);--border:var(--qh-line);--code-bg:var(--qh-panel-2);--accent:var(--qh-accent);--accent-bg:var(--qh-accent-soft);--accent-border:#d9b45a6b;--social-bg:var(--qh-panel);--shadow:0 4px 16px #0006;--sans:var(--qh-body);--heading:var(--qh-display);--mono:"Consolas", "Courier New", monospace;font:17px/1.5 var(--sans);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;letter-spacing:0;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root[data-theme=light]{--qh-bg:#f2f1f5;--qh-bg-deep:#d6d3df;--qh-panel:#fff;--qh-panel-2:#fafafc;--qh-line:#dcd8e4;--qh-line-strong:#b9b3c7;--qh-text:#3a344a;--qh-text-strong:#1b1626;--qh-muted:#6c6680;--qh-accent:#8a6a1c;--qh-accent-strong:#6e5414;--qh-accent-soft:#8a6a1c1f;--qh-on-accent:#fffaf0;--qh-danger:#b3362a;--qh-danger-strong:#a32a22;--qh-danger-soft:#b3362a1a;--qh-danger-fill:#a32a22;--qh-on-danger:#fffaf0;--qh-ok:#2e7a45;--qh-warn:#a5601c;--qh-info:#2f5f9e;--shadow:0 4px 16px #3c28141f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}button,input,select,textarea{font-family:inherit}h1,h2,h3{letter-spacing:.04em}::selection{background:var(--qh-accent);color:var(--qh-on-accent)}#root{box-sizing:border-box;width:100%;min-height:100svh}body{background:var(--bg);margin:0}h1,h2{font-family:var(--heading);color:var(--text-h);font-weight:700}h1{margin:0;font-size:3rem}h2{margin:0;font-size:1.5rem;line-height:1.2}p{margin:0}code,.counter{font-family:var(--mono);color:var(--text-h);border-radius:2px;display:inline-flex}code{background:var(--code-bg);padding:4px 8px;font-size:15px;line-height:135%}.login-page{box-sizing:border-box;background:var(--bg);justify-content:center;align-items:center;min-height:100svh;padding:24px;display:flex}.login-card{box-sizing:border-box;border:1px solid var(--border);background:var(--qh-panel);width:100%;max-width:380px;box-shadow:var(--shadow);border-radius:2px;gap:16px;padding:40px 36px;display:grid}.login-badge{background:var(--accent-bg);color:var(--accent);text-transform:uppercase;letter-spacing:.08em;border-radius:2px;justify-self:start;padding:5px 12px;font-size:12px;font-weight:700}.login-card h1{margin:0;font-size:2.1rem}.login-subtitle{color:var(--text);margin:-8px 0 4px;font-size:14px;line-height:1.4}.login-field{gap:6px;display:grid}.login-field span{color:var(--text-h);font-size:13px;font-weight:700}.login-field input{box-sizing:border-box;border:1px solid var(--border);background:var(--qh-panel);width:100%;color:var(--text-h);font:inherit;border-radius:2px;padding:12px 14px;transition:border-color .2s,box-shadow .2s}.login-field input:focus{border-color:var(--accent-border);box-shadow:0 0 0 3px var(--accent-bg);outline:none}.login-submit{background:var(--accent);color:var(--qh-on-accent);cursor:pointer;border:0;border-radius:2px;margin-top:8px;padding:13px 18px;font-size:15px;font-weight:700;transition:background-color .15s,opacity .15s}.login-submit:hover:not(:disabled){background:var(--qh-danger)}.login-submit:disabled{opacity:.6;cursor:default}.login-logout{color:inherit;font:inherit;opacity:.7;cursor:pointer;background:0 0;border:0;align-self:center;padding:4px 8px;font-size:13px;text-decoration:underline}.login-logout:hover{opacity:1}.login-error{color:var(--qh-danger);background:#d0453a14;border:1px solid #d0453a4d;border-radius:2px;margin:0;padding:10px 12px;font-size:13px;font-weight:600}.login-theme{top:calc(env(safe-area-inset-top,0px) + 16px);position:fixed;right:16px}.join-page-heroes{flex-direction:column;justify-content:flex-start;gap:24px}.login-card.join-heroes{max-width:1040px}.join-heroes h2{color:var(--qh-accent)}.login-hint{color:var(--qh-muted);font-size:.95rem;font-style:italic}@media (width<=520px){.join-page-heroes{padding:16px}.login-card.join-heroes{padding:24px 16px}}.theme-toggle{border:1px solid var(--qh-line);width:38px;height:38px;color:var(--qh-accent);cursor:pointer;background:0 0;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;font-size:18px;line-height:1;display:inline-flex}.theme-toggle:hover{border-color:var(--qh-accent);background:var(--qh-accent-soft)}.theme-toggle:focus-visible{outline:2px solid var(--qh-accent);outline-offset:2px}.admin-shell{--admin-bg:var(--qh-bg);--admin-panel:var(--qh-panel);--admin-panel-strong:var(--qh-panel-2);--admin-line:var(--qh-line);--admin-line-strong:var(--qh-line-strong);--admin-text:var(--qh-text);--admin-text-strong:var(--qh-text-strong);--admin-accent:var(--qh-accent);--admin-accent-soft:var(--qh-accent-soft);--admin-nav:var(--qh-bg);--admin-nav-soft:#d9b45a14;--admin-nav-active:var(--qh-accent);--admin-shadow:var(--shadow);background:var(--admin-bg);min-height:100svh;color:var(--admin-text);grid-template-rows:auto 1fr;grid-template-columns:minmax(0,1fr);display:grid}.admin-topbar{z-index:30;border-bottom:1px solid var(--admin-accent);background:var(--admin-bg);flex-wrap:wrap;align-items:center;gap:4px 20px;padding:0 28px;display:flex;position:sticky;top:0}.admin-brand{color:var(--admin-accent);font-family:var(--qh-display);letter-spacing:.14em;text-transform:uppercase;padding:12px 0;font-size:22px;font-weight:700;text-decoration:none}.admin-nav{flex-wrap:wrap;flex:1;min-width:0;display:flex}.admin-nav a{color:var(--admin-text-strong);font-family:var(--qh-display);letter-spacing:.1em;text-transform:uppercase;border-bottom:2px solid #0000;padding:16px 10px 14px;font-size:13px;text-decoration:none}.admin-nav a:hover{color:var(--admin-accent)}.admin-nav a.active{border-bottom-color:var(--admin-accent);color:var(--admin-accent)}.admin-nav a:focus-visible,.admin-logout:focus-visible,.admin-brand:focus-visible{outline:2px solid var(--admin-accent);outline-offset:2px}.admin-campaign-switch{color:var(--qh-muted);font-family:var(--qh-display);letter-spacing:.08em;text-transform:uppercase;align-items:center;gap:8px;font-size:11px;display:flex}.admin-campaign-switch select{border:1px solid var(--admin-line);background:var(--qh-panel);max-width:180px;color:var(--admin-text-strong);font-family:var(--qh-body);text-transform:none;letter-spacing:0;border-radius:2px;padding:6px 8px;font-size:15px}.admin-campaign-field{border-top:1px solid var(--admin-line);border-bottom:1px solid var(--admin-line);gap:10px;padding:12px 0;display:grid}.admin-campaign-field strong{color:var(--qh-accent);font-family:var(--qh-display);letter-spacing:.04em}.admin-campaign-copy{flex-wrap:wrap;align-items:end;gap:8px 12px;display:flex}.admin-campaign-copy .admin-field{flex:200px}.admin-campaign-copy small{color:var(--qh-muted);flex:100%}.admin-logout{border:1px solid var(--admin-line);color:var(--admin-text);font-family:var(--qh-display);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;background:0 0;padding:8px 12px;font-size:12px}.admin-logout:hover{border-color:var(--qh-danger-strong);color:var(--qh-danger)}.admin-content{min-width:0;padding:28px}.admin-page-header{margin-bottom:24px}.admin-page-header h1{letter-spacing:0;color:var(--admin-text-strong);margin:10px 0 12px;font-size:clamp(2.1rem,3vw,3.6rem)}.admin-page-header p{max-width:720px;line-height:1.6}.admin-page-badge{background:var(--admin-accent-soft);color:var(--admin-accent);text-transform:uppercase;letter-spacing:.08em;border:1px solid #d9b45a2e;border-radius:2px;align-items:center;padding:7px 12px;font-size:12px;font-weight:700;display:inline-flex}.admin-page-error{color:var(--qh-danger);font-size:14px;font-weight:600}.admin-panel-session{flex-direction:column;gap:16px;margin-top:24px;display:flex}.admin-page-grid{grid-template-columns:minmax(0,1.5fr) minmax(320px,.9fr);align-items:start;gap:24px;display:grid}.admin-panel{border:1px solid var(--admin-line);background:var(--admin-panel-strong);box-shadow:var(--admin-shadow);border-radius:2px;overflow:hidden}.admin-panel-heading{border-bottom:1px solid var(--admin-line);justify-content:space-between;align-items:start;gap:16px;padding:22px 24px 18px;display:flex}.admin-panel-heading h2,.admin-record-card h3{letter-spacing:0;color:var(--admin-text-strong);margin:0}.admin-panel-heading p,.admin-record-head p,.admin-empty-state p,.admin-field small,.admin-dashboard-card p,.admin-dashboard-card li{color:var(--admin-text)}.admin-card-list{gap:10px;padding:14px;display:grid}.admin-record-card{border:1px solid var(--admin-line);background:var(--admin-panel-strong);border-radius:2px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:16px;padding:14px 16px;display:grid}.admin-record-card.is-editing{border-color:#d9b45a6b;box-shadow:inset 0 0 0 1px #d9b45a1f}.admin-record-main{flex-direction:column;align-items:center;gap:18px;min-width:0;display:flex}.admin-record-head{min-width:0}.admin-record-head p{margin-top:4px;font-size:13px;line-height:1.35}.admin-record-meta{background:var(--admin-accent-soft);color:var(--admin-accent);border-radius:2px;flex-shrink:0;padding:6px 9px;font-size:12px;font-weight:600}.admin-record-aside{justify-items:end;gap:10px;display:grid}.admin-record-actions{flex-wrap:wrap;justify-content:end;gap:8px;display:inline-flex}.admin-record-grid{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin:0;display:grid}.admin-record-flex{align-items:start;gap:24px;display:flex}.admin-record-flex.column{flex-direction:column}.admin-record-grid div{border-left:1px solid var(--admin-line);min-width:0;padding-left:12px}.admin-record-grid dt{text-transform:uppercase;letter-spacing:.08em;color:var(--qh-muted);margin-bottom:2px;font-size:11px;font-weight:700}.admin-record-grid dd{color:var(--admin-text-strong);margin:0;font-size:14px;font-weight:600;line-height:1.3}.admin-form{gap:16px;padding:20px;display:grid}.admin-field{gap:8px;display:grid}.admin-field span{color:var(--admin-text-strong);font-size:14px;font-weight:700}.admin-multi{border:0;min-width:0;margin:0;padding:0}.admin-multi legend{color:var(--admin-text-strong);margin-bottom:8px;padding:0;font-size:14px;font-weight:700}.admin-multi-options{flex-wrap:wrap;gap:6px;display:flex}.admin-field .admin-multi-options input{width:auto;margin:0;padding:0}.admin-multi-options label{border:1px solid var(--admin-line-strong);cursor:pointer;border-radius:2px;align-items:center;gap:6px;padding:5px 10px;font-size:13px;display:inline-flex}.admin-multi-options label.is-checked{border-color:var(--admin-accent);background:var(--admin-accent-soft)}.admin-field input,.admin-field textarea,.admin-field select{box-sizing:border-box;border:1px solid var(--admin-line-strong);background:var(--qh-panel);width:100%;color:var(--admin-text-strong);font:inherit;border-radius:2px;padding:13px 14px;transition:border-color .2s,box-shadow .2s,background-color .2s}.admin-field input:focus,.admin-field textarea:focus,.admin-field select:focus{background:var(--qh-panel-2);border-color:#d9b45a85;outline:none;box-shadow:0 0 0 4px #d9b45a1f}.admin-field textarea{resize:vertical;min-height:120px}.admin-primary-button{background:var(--admin-accent);color:var(--qh-on-accent);font:inherit;cursor:pointer;border:0;border-radius:2px;padding:14px 18px;font-weight:700;transition:background-color .15s,opacity .15s}.admin-primary-button:hover:not(:disabled){background:var(--qh-danger)}.admin-primary-button:disabled{opacity:.7;cursor:wait}.admin-secondary-button,.admin-text-button,.admin-ghost-button,.admin-danger-button{font:inherit;cursor:pointer;border-radius:2px}.admin-secondary-button{border:1px solid var(--admin-line-strong);background:var(--qh-panel);color:var(--admin-text-strong);padding:11px 14px;font-weight:600}.admin-secondary-button.is-active{background:var(--admin-accent-soft);color:var(--admin-accent);border-color:#d9b45a8c}.admin-secondary-button:disabled{opacity:.5;cursor:not-allowed}.admin-text-button{color:var(--admin-accent);background:0 0;border:0;padding:8px 10px;font-weight:600}.admin-ghost-button,.admin-danger-button{padding:8px 10px;font-size:13px;font-weight:600}.admin-ghost-button{border:1px solid var(--admin-line-strong);background:var(--qh-panel);color:var(--admin-text-strong)}.admin-danger-button{color:var(--qh-danger);background:#d0453a14;border:1px solid #d0453a29}.admin-danger-button:disabled,.admin-ghost-button:disabled{opacity:.6;cursor:wait}.admin-form-actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;display:flex}.admin-relation-editor{gap:14px;padding-top:4px;display:grid}.admin-media-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.admin-media-card{border:1px solid var(--admin-line);background:var(--qh-panel);border-radius:2px;gap:12px;padding:12px;display:grid}.admin-media-preview{border:1px dashed var(--admin-line-strong);background:linear-gradient(135deg, #d9b45a0f, var(--qh-panel));color:var(--admin-text);border-radius:2px;place-items:center;display:grid;overflow:hidden}.admin-media-preview-icon{aspect-ratio:1;max-width:140px}.admin-media-preview-portrait{aspect-ratio:4/5;min-height:180px}.admin-media-preview img{object-fit:cover;width:100%;height:100%}.admin-upload-field{gap:6px;display:grid}.admin-upload-field strong{color:var(--admin-text-strong)}.admin-upload-field small,.admin-upload-state{color:var(--admin-text);font-size:14px}.admin-upload-error{color:var(--qh-danger);margin:0;font-size:14px;font-weight:600}.admin-upload-field input[type=file]{border:1px solid var(--admin-line-strong);background:var(--qh-panel);border-radius:2px;padding:10px 12px}.admin-relation-header{justify-content:space-between;align-items:center;gap:16px;display:flex}.admin-relation-header strong{color:var(--admin-text-strong);display:block}.admin-relation-header p,.admin-inline-empty p{margin-top:4px;font-size:14px}.admin-relation-list{gap:10px;display:grid}.admin-relation-row{border:1px solid var(--admin-line);background:var(--qh-panel);border-radius:2px;grid-template-columns:minmax(0,1.4fr) 120px auto;align-items:end;gap:10px;padding:12px;display:grid}.admin-inline-empty{border:1px dashed var(--admin-line-strong);background:var(--qh-panel-2);border-radius:2px;padding:14px}.admin-empty-state{text-align:center;padding:48px 24px}.admin-empty-state strong{color:var(--admin-text-strong);font-size:18px;display:block}.admin-empty-state p{max-width:420px;margin:10px auto 0}.admin-dashboard-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;display:grid}.admin-dashboard-alert{color:var(--qh-danger);background:#d0453a14;border:1px solid #d0453a2e;border-radius:2px;margin:0 0 18px;padding:12px 14px;font-weight:600}.admin-dashboard-stats{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:20px;display:grid}.admin-dashboard-stat{min-width:0;color:inherit;gap:8px;padding:18px;text-decoration:none;display:grid}.admin-dashboard-stat span,.admin-dashboard-card-head a{color:var(--admin-accent);text-transform:uppercase;letter-spacing:.08em;font-size:12px;font-weight:800}.admin-dashboard-stat strong{color:var(--admin-text-strong);font-size:36px;line-height:1}.admin-dashboard-stat small{text-overflow:ellipsis;white-space:nowrap;color:var(--admin-text);overflow:hidden}.admin-dashboard-main{grid-template-columns:minmax(0,1fr) minmax(280px,.85fr) minmax(0,1fr);align-items:start;gap:20px;display:grid}.admin-dashboard-card{padding:22px}.admin-dashboard-card-head{justify-content:space-between;align-items:center;gap:14px;margin-bottom:16px;display:flex}.admin-dashboard-card-head h2{color:var(--admin-text-strong);margin:0}.admin-dashboard-card-head a{text-decoration:none}.admin-dashboard-card ul{margin:16px 0 0;padding-left:18px}.admin-dashboard-list,.admin-dashboard-checklist{gap:10px;display:grid}.admin-dashboard-list button,.admin-dashboard-checklist a{border:1px solid var(--admin-line);background:var(--qh-panel);min-width:0;color:var(--admin-text-strong);font:inherit;text-align:left;border-radius:2px;gap:4px;padding:12px;text-decoration:none;display:grid}.admin-dashboard-list span,.admin-dashboard-list small,.admin-dashboard-checklist strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.admin-dashboard-list small{color:var(--admin-text);font-size:13px}.admin-dashboard-list p{color:var(--admin-text);margin:0}.admin-dashboard-checklist a{grid-template-columns:auto minmax(0,1fr);align-items:center}.admin-dashboard-checklist span{color:var(--qh-danger);background:#d0453a14;border-radius:2px;padding:5px 8px;font-size:12px;font-weight:800}.admin-dashboard-checklist a.is-done span{color:var(--qh-ok);background:#7fc78c1f}.admin-map-page{min-width:0}.admin-map-page.is-editor-expanded{min-height:calc(100svh - 64px);display:grid}.admin-map-page.is-editor-expanded .admin-page-header,.admin-map-page.is-editor-expanded .map-builder-sidebar{display:none}.map-builder-layout{grid-template-columns:340px minmax(0,1fr);align-items:start;gap:22px;display:grid}.admin-map-page.is-editor-expanded .map-builder-layout{grid-template-columns:minmax(0,1fr)}.map-builder-sidebar,.map-builder-workspace{min-width:0}.admin-map-page.is-editor-expanded .map-builder-workspace{flex-direction:column;min-height:calc(100svh - 64px);display:flex}.map-builder-sidebar{position:sticky;top:24px}.map-builder-controls,.map-builder-list,.map-object-inspector{gap:14px;padding:18px;display:grid}.map-object-inspector{gap:8px;padding:12px 18px}.map-object-inspector .admin-field{gap:3px}.map-object-inspector .admin-field span{font-size:11px}.map-object-inspector .admin-field input{padding:7px 10px}.map-object-inspector-grid-4{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;display:grid}.map-object-inspector-toggles{flex-wrap:wrap;gap:6px 16px;display:flex}.map-object-inspector-toggles .map-lock-toggle,.map-object-inspector-toggles .map-obstacle-toggle{gap:6px;font-size:13px}.map-builder-list,.map-object-inspector{border-top:1px solid var(--admin-line)}.map-builder-list>strong,.map-object-inspector>strong{color:var(--admin-text-strong)}.map-builder-list>p,.map-builder-status,.map-builder-footer{color:var(--admin-text);margin:0;font-size:14px}.map-builder-control-grid,.map-builder-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.map-builder-toggles{gap:8px;display:grid}.map-builder-toggles label{color:var(--admin-text-strong);align-items:center;gap:9px;font-weight:600;display:flex}.map-layer-actions{flex-wrap:wrap;gap:8px;display:flex}.map-lock-toggle,.map-obstacle-toggle{color:var(--admin-text-strong);align-items:center;gap:9px;font-weight:600;display:flex}.map-grid-type-toggle{gap:6px;display:flex}.map-grid-type-toggle button{border:1px solid var(--admin-line);background:var(--qh-panel);color:var(--admin-text-strong);cursor:pointer;border-radius:2px;flex:1;padding:8px 10px;font-weight:600}.map-grid-type-toggle button.is-active{border-color:var(--admin-accent);background:var(--admin-accent);color:var(--qh-on-accent)}.map-builder-hint{color:var(--admin-text-muted,var(--qh-muted));margin:0;font-size:12px}.map-background-controls{border:1px solid var(--admin-line);background:var(--qh-panel);border-radius:2px;gap:10px;padding:12px;display:grid}.map-background-current{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;min-width:0;display:grid}.map-background-current span{text-overflow:ellipsis;white-space:nowrap;color:var(--admin-text);font-size:14px;overflow:hidden}.map-builder-list-item{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;display:grid}.map-builder-list-item>button:first-child{border:1px solid var(--admin-line);background:var(--qh-panel);min-width:0;color:var(--admin-text-strong);text-align:left;cursor:pointer;border-radius:2px;gap:3px;padding:10px 12px;display:grid}.map-builder-list-item span,.map-asset-palette span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.map-builder-list-item small{color:var(--admin-text)}.map-builder-toolbar{border-bottom:1px solid var(--admin-line);background:var(--qh-panel-2);flex-wrap:wrap;justify-content:flex-end;align-items:end;gap:16px;padding:18px;display:flex}.map-builder-status-inline{text-align:right;flex-basis:100%;font-weight:600;color:var(--admin-accent)!important;margin-top:4px!important}.map-builder-tool-buttons{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.map-history-controls,.map-zoom-controls{align-items:center;gap:6px;padding:0 4px;display:flex}.map-history-controls button,.map-zoom-controls button{border:1px solid var(--admin-line-strong);background:var(--qh-panel);min-width:30px;height:34px;color:var(--admin-text-strong);cursor:pointer;border-radius:2px;padding:0 10px;font-weight:700}.map-history-controls button:disabled{opacity:.4;cursor:default}.map-zoom-controls span{min-width:42px;color:var(--admin-text-strong);text-align:center;font-size:13px;font-weight:700}.map-terrain-toolbar{border-bottom:1px solid var(--admin-line);background:var(--qh-panel);flex-wrap:wrap;align-items:center;gap:10px;padding:12px 18px;display:flex}.map-terrain-toolbar>strong{color:var(--admin-text-strong)}.map-terrain-toolbar button{border:1px solid var(--admin-line-strong);background:var(--qh-panel);color:var(--admin-text-strong);cursor:pointer;border-radius:2px;align-items:center;padding:6px 12px;font-weight:600;display:inline-flex}.map-terrain-toolbar button.is-active{border-color:var(--admin-accent);background:var(--admin-accent);color:var(--qh-on-accent)}.map-terrain-swatch{border-radius:2px;width:10px;height:10px;margin-right:6px;display:inline-block}.map-bulk-actions{border-bottom:1px solid var(--admin-line);background:#3b82c814;flex-wrap:wrap;align-items:center;gap:10px;padding:12px 18px;display:flex}.map-bulk-actions>strong{color:var(--admin-text-strong)}.map-inspector-kind-toggle button{padding:6px 4px;font-size:11px}.map-object-controls{border-bottom:1px solid var(--admin-line);background:var(--qh-panel-2);grid-template-columns:repeat(2,minmax(160px,220px));gap:10px;padding:14px 18px;display:grid}.map-texture-library{border-bottom:1px solid var(--admin-line);background:var(--qh-panel);gap:0;padding:0;display:grid}.map-texture-library-heading{justify-content:space-between;align-items:center;gap:12px;display:flex}.map-texture-library>.map-texture-library-heading,.map-asset-palette>.map-texture-library-heading{width:100%;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:14px 18px}.map-texture-library-heading strong{color:var(--admin-text-strong)}.map-texture-library-heading span{color:var(--admin-text);font-size:13px}.map-texture-library-grid{grid-template-columns:repeat(auto-fill,minmax(126px,1fr));gap:10px;max-height:256px;padding:0 18px 14px;display:none;overflow:auto}.map-texture-library.is-open .map-texture-library-grid{display:grid}.map-texture-library-grid>p{color:var(--admin-text);margin:0}.map-texture-library-grid button{border:1px solid var(--admin-line);background:var(--qh-panel);min-width:0;color:var(--admin-text-strong);cursor:pointer;border-radius:2px;gap:7px;padding:8px;display:grid}.map-texture-library-grid button.is-in-map{background:var(--admin-accent-soft);border-color:#d9b45a8a}.map-texture-library-grid img{aspect-ratio:1;object-fit:cover;border:1px solid var(--admin-line);background:var(--qh-panel-2);border-radius:2px;width:100%}.map-texture-library-grid span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.map-texture-library-grid small{color:var(--admin-accent);font-weight:700}.map-texture-library-grid small:nth-of-type(2){color:var(--admin-text-strong)}.map-asset-palette{border-bottom:1px solid var(--admin-line);background:var(--qh-panel);gap:0;padding:0;display:grid}.map-asset-palette-grid{gap:10px;padding:0 18px 14px;display:none;overflow-x:auto}.map-asset-palette.is-open .map-asset-palette-grid{display:flex}.map-asset-palette-grid>p{color:var(--admin-text);margin:8px 0}.map-asset-palette button{border:1px solid var(--admin-line);background:var(--qh-panel);width:118px;color:var(--admin-text-strong);cursor:pointer;border-radius:2px;flex:none;gap:7px;padding:8px;display:grid}.map-asset-palette button.is-selected{border-color:#d9b45ab3;box-shadow:0 0 0 3px #d9b45a1f}.map-asset-palette img{aspect-ratio:1;object-fit:cover;border:1px solid var(--admin-line);background:var(--qh-panel-2);border-radius:2px;width:100%}.map-asset-palette small{color:var(--admin-accent);font-weight:700}.map-canvas-scroll{background-color:#0000;background-image:linear-gradient(45deg,#d9b45a0f 25%,#0000 25%),linear-gradient(-45deg,#d9b45a0f 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#d9b45a0f 75%),linear-gradient(-45deg,#0000 75%,#d9b45a0f 75%);background-position:0 0,0 10px,10px -10px,-10px 0;background-repeat:repeat,repeat,repeat,repeat;background-size:20px 20px;background-attachment:scroll,scroll,scroll,scroll;background-origin:padding-box,padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box,border-box;max-height:min(85svh,1100px);padding:22px;overflow:auto}.admin-map-page.is-editor-expanded .map-canvas-scroll{flex:1;min-height:0;max-height:none}.map-canvas-zoom-wrapper{position:relative}.map-canvas{border:1px solid var(--qh-line-strong);-webkit-user-select:none;user-select:none;display:block;position:relative;overflow:hidden;box-shadow:0 18px 42px #0000005c}.map-canvas.is-painting{cursor:crosshair}.map-terrain-layer{z-index:0;pointer-events:none;position:absolute;inset:0}.map-terrain-cell{pointer-events:none;position:absolute}.map-coordinate-layer{z-index:3;pointer-events:none;position:absolute;inset:0}.map-coordinate-label{color:var(--qh-text-strong);background:#24180f99;border-radius:2px;padding:1px 4px;font-size:10px;font-weight:700;line-height:1.4;position:absolute}.map-coordinate-label-col{transform:translate(-50%)}.map-coordinate-label-row{transform:translateY(-50%)}.map-canvas.is-grid-visible:after{z-index:1;pointer-events:none;content:"";background-image:linear-gradient(90deg,#d9b45a29 1px,#0000 1px),linear-gradient(#d9b45a29 1px,#0000 1px);background-size:var(--map-tile-size) var(--map-tile-size);position:absolute;inset:0}.map-hex-grid-overlay{z-index:1;pointer-events:none;position:absolute;inset:0}.map-hex-grid-overlay polygon{fill:none;stroke:#24180f38;stroke-width:1px}.map-canvas:hover{cursor:crosshair}.map-object{z-index:2;cursor:grab;transform-origin:50%;background-color:#0000;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border:1px solid #0000;padding:0;display:block;position:absolute}.map-object:hover,.map-object.is-selected{outline-offset:-2px;outline:2px solid #d9b45ac7}.map-object:active{cursor:grabbing}.map-object.is-locked{cursor:default}.map-object.is-obstacle{outline-offset:-2px;outline:2px dashed #d0453abf}.map-object.is-obstacle:hover,.map-object.is-obstacle.is-selected{outline:2px dashed #d0453af2}.map-obstacle-badge{color:var(--qh-danger);text-transform:uppercase;background:#d0453a24;border-radius:2px;margin-left:6px;padding:1px 6px;font-size:10px;font-style:normal;font-weight:700}.map-object.is-door{outline-offset:-2px;outline:2px solid #966428d9}.map-object.is-door:hover,.map-object.is-door.is-selected{outline:2px solid #966428}.map-door-badge{color:var(--qh-warn);text-transform:uppercase;background:#96642829;border-radius:2px;margin-left:6px;padding:1px 6px;font-size:10px;font-style:normal;font-weight:700}.map-object.is-label{border:1px dashed var(--qh-line-strong);background:var(--qh-panel);cursor:text;border-radius:2px;justify-content:center;align-items:center;display:flex}.map-object-label-text{color:var(--admin-text-strong);text-align:center;text-overflow:ellipsis;white-space:nowrap;padding:4px 8px;font-size:13px;font-weight:600;overflow:hidden}.map-label-badge{color:var(--admin-text-strong);text-transform:uppercase;background:#d9b45a1a;border-radius:2px;margin-left:6px;padding:1px 6px;font-size:10px;font-style:normal;font-weight:700}.map-object.is-multi-selected{outline-offset:-4px;outline:2px solid #3b82c8d9}.map-object.is-locked:after{z-index:4;color:var(--qh-text-strong);content:"lock";pointer-events:none;background:#24180fbd;border-radius:2px;padding:2px 5px;font-size:10px;font-weight:700;line-height:1;position:absolute;top:6px;right:6px}.map-object-resize{z-index:3;border:2px solid var(--qh-panel);background:var(--admin-accent);cursor:nwse-resize;border-radius:2px;width:12px;height:12px;position:absolute;bottom:-5px;right:-5px;box-shadow:0 2px 8px #000000b8}.map-layer-panel{border-top:1px solid var(--admin-line);background:var(--qh-panel);gap:12px;padding:14px 18px;display:grid}.map-layer-list{gap:8px;max-height:180px;display:grid;overflow:auto}.map-layer-list>p{color:var(--admin-text);margin:0}.map-layer-list>div{border:1px solid var(--admin-line);background:var(--qh-panel);color:var(--admin-text-strong);border-radius:2px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:9px 11px;display:grid}.map-layer-list>div.is-selected{background:var(--admin-accent-soft);border-color:#d9b45a99}.map-layer-list>div.is-multi-selected{background:#3b82c81a;border-color:#3b82c8b3}.map-layer-list>div>button:first-child{min-width:0;color:var(--admin-text-strong);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:0;display:grid}.map-layer-list span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.map-layer-list small{color:var(--admin-text)}.map-layer-row-actions{gap:6px;display:inline-flex}.map-layer-row-actions button{border:1px solid var(--admin-line-strong);background:var(--qh-panel);min-width:30px;height:30px;color:var(--admin-text-strong);font:inherit;cursor:pointer;border-radius:2px;padding:0 8px;font-weight:700}.map-layer-kind-toggle{white-space:nowrap;padding:0 10px;font-size:11px}.texture-library-status{color:var(--admin-text);margin:0;padding:14px 18px 0;font-size:14px}.texture-library-upload{min-width:min(320px,100%)}.texture-library-admin-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;padding:18px;display:grid}.texture-library-card{border:1px solid var(--admin-line);background:var(--qh-panel);border-radius:2px;gap:10px;padding:12px;display:grid}.texture-library-card img{aspect-ratio:1;object-fit:cover;border:1px solid var(--admin-line);background:var(--qh-panel-2);border-radius:2px;width:100%}.texture-library-card div{gap:3px;min-width:0;display:grid}.texture-library-card strong,.texture-library-card small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.texture-library-card strong{color:var(--admin-text-strong)}.texture-library-card small,.texture-library-empty{color:var(--admin-text)}.texture-library-empty{margin:0}.map-builder-footer{border-top:1px solid var(--admin-line);justify-content:space-between;gap:12px;padding:14px 18px;display:flex}@media (width<=1080px){.admin-topbar{padding:0 16px;position:static}.admin-nav{flex-wrap:nowrap;flex:100%;order:3;margin:0 -16px;padding:0 4px;overflow-x:auto}.admin-nav a{flex:none}.admin-content{padding:24px 18px 32px}.admin-page-grid,.admin-dashboard-grid,.admin-dashboard-stats,.admin-dashboard-main,.admin-record-card,.admin-record-main{grid-template-columns:1fr}.admin-record-grid div{border-left:0;border-top:1px solid var(--admin-line);padding-top:8px;padding-left:0}.admin-record-aside{justify-items:start}.admin-record-actions,.admin-form-actions{justify-content:flex-start}.admin-relation-header,.admin-relation-row,.admin-media-grid,.map-builder-layout,.map-object-controls,.map-builder-control-grid,.map-builder-actions{grid-template-columns:1fr}.map-builder-sidebar{position:static}.map-builder-toolbar,.map-builder-footer{flex-direction:column;align-items:stretch}.map-builder-tool-buttons{justify-content:flex-start}}.admin-checkbox-grid{border:1px solid #0000001f;border-radius:2px;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:6px 12px;margin:0 0 12px;padding:10px 12px;display:grid}.admin-checkbox-grid legend{padding:0 4px;font-weight:600}.admin-checkbox-grid label{align-items:center;gap:6px;font-size:.9rem;display:flex}.admin-checkbox-grid p{grid-column:1/-1;margin:0}.map-wall-layer{z-index:1}.map-wall-layer rect,.map-wall-layer polygon{fill:#d0453a61;stroke:#962121b3;stroke-width:1px}.map-wall-swatch{background:#d0453a99}.map-door-swatch{background:#966428e6}.map-object.is-bare.is-door{background-color:#9664288c}.map-object.is-bare.is-obstacle{background-color:#d0453a61}.admin-ai-import{border:1px dashed var(--admin-line-strong);background:var(--admin-accent-soft);border-radius:2px;gap:8px;padding:12px;display:grid}.admin-ai-import p{margin:0}.admin-ai-notes{font-size:13px}.admin-ai-notes strong{color:var(--admin-text-strong)}.admin-ai-notes ul{margin:4px 0 0;padding-left:18px}.admin-ai-pages{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.admin-ai-links{border:1px solid var(--admin-line-strong);border-radius:2px;gap:10px;padding:12px;display:grid}.admin-ai-link-row{grid-template-columns:minmax(0,1fr) minmax(0,180px) auto;align-items:center;gap:8px;font-size:13px;display:grid}.admin-ai-link-row em{background:var(--admin-accent-soft);color:var(--admin-text-strong);text-transform:uppercase;border-radius:2px;margin-right:4px;padding:1px 6px;font-size:10px;font-style:normal;font-weight:700}.admin-ai-link-row>strong{color:var(--qh-ok);text-align:right;grid-column:2/-1}.admin-ai-link-row small.is-error{color:var(--qh-danger)}.admin-ai-link-row select{border:1px solid var(--admin-line-strong);border-radius:2px;min-width:0;padding:6px 8px}.admin-import-report{gap:12px;display:grid}.admin-import-report h3{color:var(--admin-text-strong);margin:0 0 6px;font-size:14px}.admin-import-report ul{gap:4px;margin:0;padding:0;list-style:none;display:grid}.admin-import-report li{flex-wrap:wrap;align-items:baseline;gap:4px 10px;font-size:14px;display:flex}.admin-import-report em{color:var(--admin-text);font-style:normal}.admin-import-report li.is-incomplete em,.admin-import-report li.is-skipped em{color:var(--admin-accent);font-weight:600}.admin-import-report small{color:var(--admin-text);flex-basis:100%}.admin-collection-header{flex-wrap:wrap;align-items:flex-end;gap:16px;margin-bottom:8px;display:flex}.admin-collection-header>div{flex:260px;min-width:0}.admin-collection-header h1{color:var(--admin-accent);letter-spacing:.06em;margin:0;font-size:34px}.admin-collection-header .admin-page-badge{display:none}.admin-collection-count{color:var(--qh-muted);font-style:italic}.admin-collection-search{flex-direction:column;gap:4px;display:flex}.admin-collection-search span{color:var(--qh-muted);font-family:var(--qh-display);letter-spacing:.14em;text-transform:uppercase;font-size:11px}.admin-collection-search input{border:1px solid var(--admin-line);background:var(--qh-panel);width:220px;max-width:100%;min-height:44px;color:var(--admin-text-strong);font:inherit;border-radius:0;padding:0 12px}.admin-collection-search input:focus-visible{outline:2px solid var(--admin-accent);outline-offset:1px}.admin-collection-header .admin-primary-button{min-height:46px;font-family:var(--qh-display);letter-spacing:.08em;text-transform:uppercase;border-radius:0;padding:0 20px;font-weight:700}.admin-collection-description{max-width:72ch;color:var(--qh-muted);margin:0 0 20px}.admin-collection-grid{border-top:1px solid var(--admin-accent);grid-template-columns:minmax(0,1fr) minmax(340px,400px);gap:0}.admin-collection-grid .admin-panel-list{min-width:0;padding:0 28px 28px 0}.admin-rows{grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:0 40px;margin:0;padding:0;list-style:none;display:grid}.admin-record-card.admin-row{border:0;border-bottom:1px solid var(--admin-line);box-shadow:none;background:0 0;border-radius:0;align-items:center;gap:8px;padding:0;display:flex}.admin-row-button{min-width:0;min-height:56px;color:var(--admin-text-strong);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:14px;padding:8px 10px;display:flex}.admin-row-button.is-static{cursor:default}button.admin-row-button:hover,.admin-row.is-editing .admin-row-button{background:var(--qh-panel-2)}.admin-row.is-editing .admin-row-title{color:var(--admin-accent)}.admin-row-button:focus-visible{outline:2px solid var(--admin-accent);outline-offset:-2px}.admin-row-badge{border:1px solid var(--admin-accent);width:30px;height:30px;color:var(--admin-accent);font-family:var(--qh-display);flex:none;justify-content:center;align-items:center;margin:0 4px;font-weight:700;display:flex;transform:rotate(45deg)}.admin-row-badge>span{transform:rotate(-45deg)}.admin-row-main{flex-direction:column;flex:1;min-width:0;display:flex}.admin-row-title{text-overflow:ellipsis;white-space:nowrap;font-size:19px;font-weight:600;overflow:hidden}.admin-row-details{text-overflow:ellipsis;white-space:nowrap;color:var(--qh-muted);font-size:14px;display:block;overflow:hidden}.admin-row-details>span+span:before{content:"·";margin:0 6px}.admin-row-details em{opacity:.75;font-style:normal}.admin-row-meta{color:var(--qh-muted);flex:none;font-size:13px}.admin-row-flag{color:var(--qh-warn);flex:none;font-style:italic}.admin-collection-grid .admin-panel-form{border:0;border-left:1px solid var(--admin-line);background:var(--qh-panel);max-height:calc(100svh - 60px);box-shadow:none;position:sticky;top:60px;overflow-y:auto}.admin-form-heading{text-align:center;border-bottom:0;flex-direction:column;align-items:center;gap:4px;display:flex}.admin-form-heading h2{color:var(--admin-accent);letter-spacing:.06em;font-size:26px}.admin-form-flag{color:var(--qh-warn);font-style:italic}.admin-form-heading p:not(.admin-form-flag){color:var(--qh-muted);font-size:14px}.admin-collection-grid .admin-form-actions .admin-primary-button{font-family:var(--qh-display);letter-spacing:.08em;text-transform:uppercase;flex:1}.admin-collection-grid .admin-form-actions .admin-danger-button{border-color:var(--qh-danger-strong);font-family:var(--qh-display);letter-spacing:.08em;text-transform:uppercase}@media (width<=1080px){.admin-collection-grid{grid-template-columns:1fr}.admin-collection-grid .admin-panel-list{padding:0 0 24px}.admin-collection-grid .admin-panel-form{border-left:0;border-top:1px solid var(--admin-accent);max-height:none;position:static}.admin-collection-search,.admin-collection-search input{flex:1;width:100%}}.print-sheet{color:#1b1b1b;background:#fff;max-width:800px;margin:0 auto;padding:24px 20px 48px;font-family:Georgia,serif}.print-actions{justify-content:space-between;margin-bottom:16px;display:flex}.print-actions button{cursor:pointer;padding:6px 14px;font-size:1rem}.print-sheet h1{margin:0 0 6px}.print-sheet h2{text-transform:uppercase;border-bottom:1px solid #000;margin:20px 0 6px;padding-bottom:2px;font-size:1.05rem}.print-numbers{flex-wrap:wrap;gap:4px 20px;margin:0;display:flex}.print-hint{color:#555;margin:4px 0;font-size:.85rem}.print-row{flex-wrap:wrap;align-items:center;gap:8px;margin:6px 0;display:flex}.print-label{width:6em}.print-box{border:2px solid #000;border-radius:3px;flex:none;width:22px;height:22px;display:inline-block}.print-box.is-checked{background:linear-gradient(45deg,#0000 45%,#000 45% 55%,#0000 55%),linear-gradient(-45deg,#0000 45%,#000 45% 55%,#0000 55%)}.print-spells{gap:8px;margin:0;padding:0;list-style:none;display:grid}.print-spells li{break-inside:avoid;align-items:flex-start;gap:10px;display:flex}.print-spells small{color:#555;display:block}.print-spells p{margin:2px 0 0;font-size:.85rem}.print-error{padding:24px}@media print{.print-actions{display:none}.print-sheet{padding:0}}.map-import-backdrop{z-index:200;background:#24180f8c;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.map-import-dialog{border:1px solid var(--admin-line-strong);background:var(--admin-panel-strong);width:min(1280px,100%);max-height:100%;color:var(--admin-text);border-radius:2px;flex-direction:column;display:flex;box-shadow:0 24px 60px #000}.map-import-header,.map-import-footer{justify-content:space-between;align-items:center;gap:16px;padding:14px 20px;display:flex}.map-import-header{border-bottom:1px solid var(--admin-line)}.map-import-header h2{color:var(--admin-text-strong);margin:0;font-size:20px}.map-import-header p,.map-import-footer p{margin:2px 0 0}.map-import-footer{border-top:1px solid var(--admin-line)}.map-import-footer-actions{flex-shrink:0;gap:10px;display:flex}.map-import-body{grid-template-columns:280px minmax(0,1fr);gap:18px;min-height:0;padding:18px 20px;display:grid;overflow:hidden}.map-import-controls{align-content:start;gap:12px;display:grid;overflow-y:auto}.map-import-controls .map-builder-hint{margin:0}.map-import-row{grid-template-columns:repeat(2,minmax(0,1fr));align-items:end;gap:10px;display:grid}.map-import-summary{color:var(--admin-text-strong);margin:0;font-weight:700}.map-import-summary.is-error{color:var(--qh-danger)}.map-import-stage-scroll{border:1px solid var(--admin-line);background:#d9b45a14;border-radius:2px;min-height:320px;max-height:calc(100svh - 240px);overflow:auto}.map-import-empty{text-align:center;margin:0;padding:120px 20px}.map-import-stage{touch-action:none;-webkit-user-select:none;user-select:none;width:100%;margin:0 auto;line-height:0;position:relative}.map-import-stage.is-cropping,.map-import-stage.is-measuring{cursor:crosshair}.map-import-stage.is-shifting{cursor:move}.map-import-stage img{pointer-events:none;width:100%;height:auto;display:block}.map-import-stage svg{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.map-import-mask{fill:#140c0699}.map-import-quad{fill:none;stroke:var(--qh-accent);stroke-width:2px;vector-effect:non-scaling-stroke}.map-import-corner{border:2px solid var(--qh-text-strong);background:var(--qh-accent);width:26px;height:26px;color:var(--qh-on-accent);cursor:grab;border-radius:50%;justify-content:center;align-items:center;font-size:12px;font-weight:700;line-height:1;display:flex;position:absolute;transform:translate(-50%,-50%)}.map-import-grid-line{fill:none;stroke:#e2203cd9}.map-import-measure{stroke:#1d6fe0;stroke-linecap:round}@media (width<=900px){.map-import-body{grid-template-columns:minmax(0,1fr);overflow-y:auto}}.map-claude-kit{gap:.5rem;display:grid}.map-claude-zones{gap:.75rem;margin:0;padding:0;list-style:none;display:grid}.map-claude-zones li{gap:.35rem;display:grid}.map-claude-zones textarea{width:100%;font-family:monospace;font-size:.8rem}.map-claude-zones small.is-error{color:var(--admin-danger,#e0675a)}.hero-picker{gap:20px;display:grid}.hero-cards{grid-template-columns:repeat(auto-fill,minmax(min(100%,200px),1fr));gap:8px;margin:0;padding:0;list-style:none;display:grid}.hero-cards li{display:flex}.hero-cards li.is-open{grid-column:1/-1}.hero-card{border:1px solid var(--qh-line);background:var(--qh-panel-2);width:100%;color:var(--qh-text);font:inherit;text-align:left;cursor:pointer;border-radius:2px;align-content:start;gap:10px;padding:10px 14px;display:grid}.hero-card:hover:not(:disabled){border-color:var(--qh-line-strong)}.hero-card.is-picked{border-color:var(--qh-accent);box-shadow:inset 0 0 0 1px var(--qh-accent);background:var(--qh-accent-soft)}.hero-card.is-taken{cursor:not-allowed;opacity:.55}.hero-card-head{gap:2px;display:grid}.hero-card-head strong{color:var(--qh-text-strong);font-family:var(--qh-display);letter-spacing:.04em;font-size:1.15rem}.hero-card.is-picked .hero-card-head strong{color:var(--qh-accent)}.hero-card-head em,.hero-card-section small,.hero-card-stats small{color:var(--qh-muted);font-size:.85rem}.hero-card-details{border-top:1px solid var(--qh-line);gap:10px;padding-top:10px;display:grid}.hero-card-text{font-size:.95rem;line-height:1.4}.hero-card-stats{flex-wrap:wrap;gap:6px;display:flex}.hero-card-stats span{border:1px solid var(--qh-line);min-width:52px;color:var(--qh-text-strong);text-align:center;border-radius:2px;padding:4px 8px;font-weight:700;display:grid}.hero-card-stats small{font-weight:400}.hero-card-section{gap:2px;font-size:.95rem;display:grid}.hero-card-section small{font-family:var(--qh-display);letter-spacing:.08em;text-transform:uppercase;font-size:.7rem}.hero-picker-form{border:1px solid var(--qh-line);background:var(--qh-panel);border-radius:2px;gap:12px;padding:16px;display:grid}.hero-picker-form label{gap:6px;display:grid}.hero-picker-form label span{color:var(--qh-text-strong);font-weight:700}.hero-picker-form input,.hero-picker-form select{border:1px solid var(--qh-line);background:var(--qh-bg);color:var(--qh-text-strong);font:inherit;border-radius:2px;padding:10px 12px}.hero-picker-form button{background:var(--qh-accent);color:var(--qh-on-accent);font-family:var(--qh-display);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;border:0;border-radius:2px;padding:12px 16px;font-weight:700}.hero-picker-form button:disabled{opacity:.5;cursor:not-allowed}.hero-picker-error{color:var(--qh-danger)}.hero-picker-empty{color:var(--qh-muted);font-style:italic}.board-zoom-wrapper{flex:none;margin:auto;position:relative}.board-canvas{transform-origin:0 0;-webkit-user-select:none;user-select:none;touch-action:none;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border:1px solid #24180f4d;position:relative;overflow:hidden;box-shadow:0 12px 32px #00000040}.board-canvas.is-grid-visible:after{z-index:1;pointer-events:none;content:"";background-image:linear-gradient(90deg,#24180f29 1px,#0000 1px),linear-gradient(#24180f29 1px,#0000 1px);background-size:var(--board-tile-size) var(--board-tile-size);position:absolute;inset:0}.board-layer{z-index:0;pointer-events:none;position:absolute;inset:0}.board-hex-grid{z-index:1}.board-hex-grid polygon{fill:none;stroke:#24180f38;stroke-width:1px}.board-object{pointer-events:none;background-color:#0000;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border:0;padding:0;position:absolute}.board-object.is-clickable{pointer-events:auto;cursor:pointer}.board-object.is-clickable:hover,.board-object.is-selected{outline-offset:1px;outline:2px solid #c85d3e}.board-object.is-door.is-clickable{outline:2px dashed #c85d3eb3}.board-object.is-door.is-open{opacity:.3!important}.board-object.is-label{background:#fffaf0eb;border-radius:6px;justify-content:center;align-items:center;display:flex}.board-object-label{color:#24180f;text-overflow:ellipsis;white-space:nowrap;padding:4px 8px;font-size:13px;font-weight:600;overflow:hidden}.board-shade{z-index:880;pointer-events:none}.board-shade .is-dim{color:#14183047}.board-shade .is-dark{color:#0a0a149e}.board-fog{z-index:900}.board-fog.is-player{color:#15110e}.board-fog.is-mj{color:#15110e80}.board-token{z-index:1000;color:#fff;pointer-events:none;background-position:50%;background-size:cover;border:3px solid;border-radius:50%;place-items:center;padding:0;font-weight:800;transition:left .25s,top .25s;display:grid;position:absolute;box-shadow:0 2px 6px #00000059}.board-token.is-clickable{pointer-events:auto;cursor:grab}.board-token.is-player{background-color:#3e9a86;border-color:#2f7d6d}.board-token.is-monster{background-color:#c85d3e;border-color:#9e2f1f}.board-token.is-npc{background-color:#d49b35;border-color:#a5751c}.board-token.is-hidden{opacity:.5;border-style:dashed}.board-token.is-selected{outline-offset:2px;outline:3px solid #fff;box-shadow:0 0 0 6px #c85d3e99}.board-reach{z-index:950;color:#4a906259}.board-reach rect,.board-reach polygon{stroke:#2e6e4699;stroke-width:1px}.board-token.is-active-turn{box-shadow:0 0 0 3px #e0b43a,0 0 12px 4px #e0b43ab3}.board-token.is-dead{filter:grayscale()brightness(.7);opacity:.75}.board-token.is-target{pointer-events:auto;cursor:crosshair;box-shadow:0 0 0 3px #d23c2a,0 0 12px 4px #d23c2a99}.board-token-hp{pointer-events:none;background:#0000008c;border-radius:3px;height:5px;position:absolute;bottom:-9px;left:8%;right:8%;overflow:hidden}.board-token-hp>span{height:100%;display:block}.board-token-hp .is-ok{background:#4caf50}.board-token-hp .is-hurt{background:#e0b43a}.board-token-hp .is-low{background:#d23c2a}.board-token-search{pointer-events:none;filter:drop-shadow(0 0 2px #fff);font-size:12px;line-height:1;position:absolute;top:-4px;left:-4px}.board-token-health{pointer-events:none;border:2px solid #fff;border-radius:50%;width:11px;height:11px;position:absolute;bottom:-3px;right:-3px}.board-token-health.is-blesse{background:#e0b43a}.board-token-health.is-en_sang{background:#d23c2a}.board-token-conditions{white-space:nowrap;pointer-events:none;background:#141414bf;border-radius:8px;gap:1px;padding:0 3px;font-size:11px;line-height:16px;display:flex;position:absolute;top:-10px;left:50%;transform:translate(-50%)}.board-token-dead{pointer-events:none;place-items:center;font-size:60%;display:grid;position:absolute;inset:0}.board-area{z-index:960;color:#d65c2852;pointer-events:none}.board-area rect,.board-area polygon{stroke:#b84014b3;stroke-width:1px}.board-ruler{z-index:2000;pointer-events:none}.board-ruler line{stroke:#1d4f91;stroke-width:4px;stroke-dasharray:10 6}.board-ruler circle{fill:#1d4f91}.board-ruler text{fill:#fff;paint-order:stroke;stroke:#1d4f91;stroke-width:5px;font-weight:700}.board-zones{z-index:940;color:#8c3cb44d}.board-zones rect,.board-zones polygon{stroke:#6e28968c;stroke-width:1px}.board-zones .is-light{color:#ffd65a1f}.board-zones .is-light rect,.board-zones .is-light polygon{stroke:#e0a81480}.board-zones .is-darkness{color:#080610c7}.board-zones .is-darkness rect,.board-zones .is-darkness polygon{stroke:#080610e6}.board-zones .is-fog{color:#d6dee6d9}.board-zones .is-fog rect,.board-zones .is-fog polygon{stroke:#a0acb8e6}.board-zones .is-wall{color:#605850eb}.board-zones .is-wall rect,.board-zones .is-wall polygon{stroke:#28221cf2;stroke-width:2px}.board-lights{z-index:935}.board-lights circle{fill:#ffd65a24;stroke:#e0a8148c;stroke-width:1.5px;stroke-dasharray:6 5}.board-lights circle.is-dim{fill:#ffd65a0f;stroke:#e0a8144d}.board-lights text{fill:#b8860b}.board-object.is-door.is-bare{background-color:#966428b3;border:2px solid #5c3a14f2;border-radius:3px}.dice-toggle{border:1px solid var(--session-line,var(--qh-line));border-radius:2px;display:inline-flex;overflow:hidden}.dice-toggle button{color:inherit;cursor:pointer;background:0 0;border:0;padding:3px 8px;font-size:.8rem}.dice-toggle button.is-active{background:var(--qh-accent);color:var(--qh-on-accent)}.dice-form{gap:6px;display:grid}.dice-quick{grid-template-columns:repeat(7,1fr);gap:4px;display:grid}.dice-quick button{border:1px solid var(--qh-line-strong);background:var(--qh-panel);color:var(--qh-text-strong);cursor:pointer;border-radius:2px;padding:4px 0;font-size:.8rem;font-weight:600}.dice-quick button:hover{border-color:var(--qh-accent)}.dice-formula{gap:4px;display:flex}.dice-formula input{min-width:0;font-family:var(--mono,monospace);flex:1}.dice-formula input.is-invalid{border-color:var(--qh-danger)}.dice-clear{border:1px solid var(--qh-line-strong);cursor:pointer;background:0 0;border-radius:2px;padding:0 8px}.dice-physical{flex-wrap:wrap;gap:6px;display:flex}.dice-physical label{justify-items:center;gap:2px;font-size:.75rem;display:grid}.dice-physical input{text-align:center;width:3.6em}.dice-log{gap:6px;max-height:320px;margin:0;padding:0;list-style:none;display:grid;overflow-y:auto}.dice-log li{border:1px solid var(--qh-line);border-radius:2px;padding:6px 8px}.dice-log li.is-latest{background:#d9b45a1f;border-color:#d9b45acc;animation:.4s ease-out dice-pop}@keyframes dice-pop{0%{opacity:.4;transform:scale(.96)}}.dice-log-head{flex-wrap:wrap;align-items:center;gap:6px;font-size:.85rem;display:flex}.dice-log-head time{opacity:.6;margin-left:auto;font-size:.75rem}.dice-log-label{font-style:italic}.dice-log-body{align-items:center;gap:8px;margin-top:4px;display:flex}.dice-log-formula{font-family:var(--mono,monospace);opacity:.7;font-size:.75rem}.dice-log-dice{flex-wrap:wrap;flex:1;gap:3px;display:flex}.dice-chip{border:1px solid var(--qh-line-strong);background:var(--qh-panel-2);border-radius:2px;align-items:baseline;gap:1px;padding:1px 5px;font-size:.85rem;font-weight:600;display:inline-flex}.dice-chip small{opacity:.6;font-size:.6rem;font-weight:400}.dice-chip.is-max{border-color:var(--qh-ok);color:var(--qh-ok);background:#7fc78c24}.dice-chip.is-min{border-color:var(--qh-danger);color:var(--qh-danger);background:#d0453a1a}.dice-chip.is-modifier{background:0 0;border-style:dashed}.dice-log-total{min-width:2ch;color:var(--qh-text-strong);font-size:1.4rem;font-weight:700;font-family:var(--heading,serif);text-align:right}.dice-toggle.is-wide{grid-template-columns:repeat(3,1fr);display:grid}.dice-field{gap:2px;font-size:.8rem;display:grid}.dice-stats{flex-wrap:wrap;gap:4px;display:flex}.dice-stats button{border:1px solid var(--qh-line-strong);background:var(--qh-panel);color:var(--qh-text-strong);cursor:pointer;border-radius:2px;padding:4px 8px;font-size:.8rem}.dice-stats button.is-active{border-color:var(--qh-accent);background:var(--qh-accent);color:var(--qh-on-accent)}.dice-summary{flex-wrap:wrap;align-items:baseline;gap:6px;margin:0;display:flex}.dice-link{color:var(--qh-accent);cursor:pointer;background:0 0;border:0;margin-left:auto;padding:0;font-size:.8rem;text-decoration:underline}.dice-row{gap:4px;display:flex}.dice-row input:first-child{flex:1;min-width:0}.dice-dc{width:4.5em}.dice-dc.is-invalid{border-color:var(--qh-danger)}.dice-chip.is-dropped{opacity:.4;text-decoration:line-through}.dice-log li.is-secret{opacity:.8;border-style:dashed}.dice-log li.is-crit-success{border-color:var(--qh-ok);box-shadow:inset 3px 0 0 var(--qh-ok)}.dice-log li.is-crit-failure{border-color:var(--qh-danger);box-shadow:inset 3px 0 0 var(--qh-danger)}.dice-log-outcome{justify-content:flex-end;gap:8px;margin-top:2px;font-size:.8rem;display:flex}.dice-log-outcome .is-success{color:var(--qh-ok);font-weight:600}.dice-log-outcome .is-failure{color:var(--qh-danger);font-weight:600}.roll-request.is-waiting{border-color:var(--qh-accent);background:#d9b45a14}.roll-request.is-closed{opacity:.65}.roll-request-targets{gap:4px;margin:6px 0 0;padding:0;list-style:none;display:grid}.dice-log .roll-request-targets li{border:0;border-top:1px dashed var(--qh-line);border-radius:0;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px;padding:3px 0;display:flex}.dice-log .roll-request-targets li.is-winner{background:#7fc78c14}.roll-request-name small{opacity:.7}.roll-request-name small:first-child{text-transform:uppercase;font-size:.65rem;display:block}.roll-request-result{flex-wrap:wrap;align-items:center;gap:3px;display:flex}.roll-request-result em{font-size:.75rem;font-style:normal;font-weight:600}.roll-request-result .is-success{color:var(--qh-ok)}.roll-request-result .is-failure{color:var(--qh-danger)}.roll-request-total{font-family:var(--heading,serif);font-size:1.1rem}.roll-request-answer{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.roll-request-answer input{width:3.4em}.roll-request-answer .session-button{padding:3px 10px}.roll-request-note{margin:4px 0 0;font-size:.75rem}.roll-request-targets-picker{border:1px solid var(--qh-line);border-radius:2px;gap:2px;margin:0;padding:6px 8px;display:grid}.roll-request-targets-picker legend{font-size:.75rem}.dice-row.roll-request-side{grid-template-columns:1fr 1fr;gap:4px;display:grid}.roll-request-side span{text-transform:uppercase;opacity:.7;grid-column:1/-1;font-size:.75rem;font-weight:600}.roll-request-side select,.roll-request-form select,.roll-request-form input{min-width:0;max-width:100%}.roll-request-form .session-card-heading{flex-wrap:wrap}.dice-proficient{color:var(--qh-warn);margin-left:2px}.dice-stats button.is-active .dice-proficient{color:var(--qh-on-accent)}.dice-log li.is-xp{background:var(--qh-panel);border-color:#d9b45a99}.dice-log li.is-spell{background:var(--qh-panel);border-color:#7b52c480}.document-overlay{z-index:5000;background:#140e0ad1;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.document-viewer{border:1px solid var(--session-line,var(--qh-line-strong));background:var(--qh-panel);width:min(94vw,760px);max-width:min(94vw,1100px);max-height:92vh;color:var(--qh-text-strong);border-radius:2px;gap:12px;padding:16px;display:grid;overflow:auto}.document-viewer header{justify-content:space-between;align-items:center;gap:12px;display:flex}.document-viewer h2{margin:0;font-size:1.3rem}.document-actions{flex-wrap:wrap;gap:6px;display:flex}.document-content{justify-items:center;gap:10px;display:grid}.document-content img{object-fit:contain;border-radius:2px;max-width:100%;max-height:68vh}.document-letter{background:var(--qh-panel);width:min(100%,640px);min-height:160px;color:var(--qh-text-strong);white-space:pre-wrap;border:1px solid #785a3259;border-radius:2px;padding:28px 32px;font-family:Georgia,Times New Roman,serif;font-size:1.3rem;line-height:1.6}.document-caption{text-align:center;margin:0;font-style:italic}.document-form{gap:6px;display:grid}.document-form textarea,.document-form input,.document-form select{border:1px solid var(--session-line,var(--qh-line));width:100%;font:inherit;border-radius:2px;padding:7px 8px}.document-list{gap:6px;margin:0;padding:0;list-style:none;display:grid}.document-list.is-manager li{border:1px solid var(--session-line,var(--qh-line));border-radius:2px;align-items:center;gap:8px;padding:6px;display:flex}.document-list li.is-shown{border-color:var(--qh-accent);background:#d9b45a14}.document-info{flex:1;gap:2px;min-width:0;display:grid}.document-thumb{object-fit:cover;border-radius:2px;width:44px;height:44px}.document-link{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:4px 0;font-weight:600;text-decoration:underline}.journal-list{gap:4px;max-height:360px;margin:0;padding:0;list-style:none;display:grid;overflow-y:auto}.journal-list li{border-left:3px solid #0000;border-radius:2px;gap:8px;padding:5px 6px;display:flex}.journal-list li.is-damage,.journal-list li.is-death,.journal-list li.is-down{border-left-color:var(--qh-danger)}.journal-list li.is-heal{border-left-color:var(--qh-ok)}.journal-list li.is-narration{border-left-color:var(--qh-warn);background:#c8a0461a;font-family:Georgia,serif}.journal-list li.is-note,.journal-list li.is-private{background:#d9b45a0d;border-left-style:dashed;border-left-color:#6b5b8a}.journal-icon{text-align:center;flex:none;width:1.4em}.journal-body{gap:1px;min-width:0;display:grid}.journal-text{overflow-wrap:anywhere;white-space:pre-wrap}.journal-body small{color:var(--qh-muted)}.journal-composer{gap:6px;display:grid}.journal-composer textarea,.journal-edit textarea{border:1px solid var(--session-line,var(--qh-line));width:100%;font:inherit;border-radius:2px;padding:7px 8px}.journal-composer-actions{justify-content:space-between;align-items:center;gap:8px;display:flex}.journal-edit{gap:4px;display:grid}.loot-list,.loot-gold{gap:6px;margin:0;padding:0;list-style:none;display:grid}.loot-list li,.loot-gold li{border:1px solid var(--session-line,var(--qh-line));border-radius:2px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:6px;display:flex}.loot-list li span,.loot-gold li span{gap:1px;display:grid}.loot-list li.is-revealed{border-color:var(--qh-ok);background:#7fc78c12}.loot-actions{flex-wrap:wrap;gap:4px;display:flex}.loot-gold input{border:1px solid var(--session-line,var(--qh-line));width:90px;font:inherit;border-radius:2px;padding:5px 6px}.loot-form{gap:6px;display:grid}.loot-form input,.loot-form select,.loot-actions select{border:1px solid var(--session-line,var(--qh-line));font:inherit;border-radius:2px;padding:6px 7px}.loot-source{gap:4px;display:grid}.character-gold{justify-content:space-between;align-items:center;gap:8px;font-weight:600;display:flex}.character-give{flex-wrap:wrap;align-items:center;gap:4px;margin-top:4px;display:flex}.character-give input{width:64px}.character-give select,.character-give input{border:1px solid var(--session-line,var(--qh-line));font:inherit;border-radius:2px;padding:4px 6px}.loot-search{flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px;display:flex}.attack-panel,.death-save{gap:10px;display:grid}.attack-weapons{gap:6px;display:grid}.attack-weapons button{border:1px solid var(--session-line);min-width:0;color:inherit;text-align:left;cursor:pointer;background:0 0;border-radius:2px;flex-direction:column;align-items:flex-start;gap:2px;padding:6px 10px;display:flex}.attack-weapons button.is-active{border-color:var(--qh-accent);background:#d9b45a1f}.attack-weapons small{overflow-wrap:break-word;opacity:.75;max-width:100%}.attack-hint{color:var(--qh-warn);margin:0;font-size:.85rem}.death-save{border-color:var(--qh-danger)}.vitals{gap:6px;display:grid}.vitals-line{justify-content:space-between;gap:8px;display:flex}.vitals-bar{background:#00000026;border-radius:2px;height:8px;overflow:hidden}.vitals-bar>span{height:100%;transition:width .3s;display:block}.vitals-bar .is-ok{background:var(--qh-ok)}.vitals-bar .is-hurt{background:var(--qh-accent)}.vitals-bar .is-low{background:var(--qh-danger)}.vitals-bar{display:flex}.vitals-bar .is-temp{background:#5b8fd6}.vitals-temp{color:#3a6db3;font-weight:600}.vitals-conditions{flex-wrap:wrap;gap:4px;margin:0;padding:0;list-style:none;display:flex}.vitals-conditions li{background:#d9b45a26;border-radius:2px;padding:1px 8px;font-size:.8rem}.vitals-saves{margin:0;font-size:.9rem}.vitals-saves .is-success{color:var(--qh-ok);letter-spacing:2px}.vitals-saves .is-failure{color:var(--qh-danger);letter-spacing:2px}.hp-controls{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.hp-controls input{width:90px;min-width:0}.condition-editor{gap:8px;display:grid}.condition-chips{flex-wrap:wrap;gap:4px;display:flex}.condition-chips button{border:1px solid var(--session-line);color:inherit;cursor:pointer;background:0 0;border-radius:2px;padding:2px 8px;font-size:.8rem}.condition-chips button.is-active{border-color:var(--qh-warn);background:#d9b45a33;font-weight:700}.dice-field.is-inline input{width:80px}.turn-actions{flex-wrap:wrap;gap:4px;margin:6px 0;display:flex}.turn-action{border:1px solid var(--qh-line-strong);background:var(--qh-panel);color:var(--qh-text-strong);cursor:pointer;border-radius:2px;padding:4px 8px;font-size:.8rem}.turn-action.is-spent{color:var(--qh-muted);background:#d9b45a1f;text-decoration:line-through}.turn-action:disabled{cursor:default;opacity:.55}.turn-actions .session-error{flex-basis:100%}.xp-bar{gap:3px;font-size:.8rem;display:grid}.xp-bar-track{background:#d9b45a26;border-radius:2px;height:6px;overflow:hidden}.xp-bar-fill{background:var(--qh-warn);height:100%}.xp-heroes{gap:8px;margin:0 0 10px;padding:0;list-style:none;display:grid}.xp-heroes li{grid-template-columns:6.5em minmax(0,1fr);align-items:center;gap:8px;display:grid}.xp-form .dice-row input{flex:1;min-width:0}.xp-form .dice-row input[type=number]{flex:0 0 5em}.slot-rows{gap:6px;margin:8px 0;display:grid}.slot-row{align-items:center;gap:8px;display:flex}.slot-level{flex:0 0 3.6em;font-size:.85rem;font-weight:600}.slot-pips{flex-wrap:wrap;gap:6px;display:flex}.slot-pip{cursor:pointer;border:2px solid #5a3a8c;border-radius:50%;width:26px;height:26px;padding:0}.slot-pip.is-available{background:#7b52c4}.slot-pip.is-spent{background:0 0}.slot-pip:disabled{cursor:default}.grimoire-numbers{flex-wrap:wrap;gap:4px 14px;margin:0 0 6px;font-size:.9rem;display:flex}.grimoire-prepared,.grimoire-hitdice,.grimoire-known{margin:6px 0;font-size:.85rem}.grimoire-level h3{text-transform:uppercase;opacity:.7;margin:10px 0 4px;font-size:.85rem}.grimoire-spells{gap:6px;margin:0;padding:0;list-style:none;display:grid}.grimoire-spells li{opacity:.6;gap:2px;display:grid}.grimoire-spells li.is-ready{opacity:1}.grimoire-spell-head{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.grimoire-spell-name{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0;font-weight:600}.grimoire-description{white-space:pre-wrap;margin:2px 0 0;font-size:.85rem}.grimoire-hero{border-top:1px solid var(--qh-line);gap:4px;padding:8px 0;display:grid}.grimoire-hero header{flex-wrap:wrap;align-items:baseline;gap:2px 10px;display:flex}.grimoire-manage{gap:4px;padding:6px 0;display:grid}.rest-dice{gap:4px;margin:0 0 8px;padding:0;list-style:none;display:grid}.rest-dice li{grid-template-columns:1fr auto 4.5em;align-items:center;gap:8px;display:grid}.rest-actions{gap:6px;margin-bottom:6px;display:flex}.grimoire-result{margin:4px 0 0;font-size:.85rem}.cast-button{margin-left:auto;padding:2px 10px;font-size:.8rem}.grimoire-actions{flex-wrap:wrap;gap:6px;display:flex}.grimoire-concentration{background:var(--qh-panel);border-radius:2px;margin:4px 0 8px;padding:4px 8px;font-size:.85rem}.grimoire-concentration .dice-link{margin-left:8px}.cast-panel{background:var(--qh-panel);border:1px solid #7b52c473;border-radius:2px;flex-direction:column;gap:8px;margin:4px 0 8px;padding:8px 10px;display:flex}.cast-head{justify-content:space-between;display:flex}.cast-formula{margin:0;font-size:.85rem}.cast-targets{border:1px solid var(--qh-line-strong);border-radius:2px;gap:4px;margin:0;padding:6px 8px;display:grid}.cast-save-die{width:4.5em;margin-left:auto}.session-page{--session-bg:var(--qh-bg);--session-panel:var(--qh-panel);--session-line:var(--qh-line);--session-text:var(--qh-text);--session-text-strong:var(--qh-text-strong);--session-accent:var(--qh-accent);--session-accent-soft:var(--qh-accent-soft);--session-table:var(--qh-bg-deep);box-sizing:border-box;background:var(--session-bg);min-height:100svh;color:var(--session-text);font-size:14px}.session-page *,.session-page :before,.session-page :after{box-sizing:border-box}.session-page h1,.session-page h2,.session-page h3{color:var(--session-text-strong);margin:0}.session-page h1{font-size:1.25rem}.session-page h2{font-size:.95rem}.session-page h3{letter-spacing:.06em;text-transform:uppercase;margin-top:4px;font-size:.8rem}.session-page p{margin:0}.session-loading{place-items:center;display:grid}.session-console,.session-play{height:100svh;display:grid;overflow:hidden}.session-console{grid-template:"header header header""error error error""maps board details"minmax(0,1fr)/260px minmax(0,1fr) 320px}.session-header{border-bottom:1px solid var(--session-line);background:var(--session-panel);flex-wrap:wrap;grid-area:header;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;display:flex}.session-header-title,.session-header-actions{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.session-back{color:var(--session-text);font-weight:600;text-decoration:none}.session-back:hover{color:var(--session-accent)}.session-code{border:1px dashed var(--session-line);border-radius:2px;padding:4px 10px}.session-code strong{color:var(--session-text-strong);letter-spacing:.12em;font-family:ui-monospace,monospace;font-size:1rem}.session-status{background:var(--session-accent-soft);color:var(--session-accent);border-radius:2px;padding:3px 10px;font-size:12px;font-weight:700}.session-status.is-in_progress{color:var(--qh-ok);background:#7fc78c29}.session-status.is-finished{color:var(--session-text);background:#d9b45a14}.session-live{align-items:center;gap:6px;font-size:12px;font-weight:700;display:inline-flex}.session-live:before{content:"";background:currentColor;border-radius:50%;width:8px;height:8px}.session-live.is-live{color:var(--qh-ok)}.session-live.is-connecting{color:var(--qh-warn)}.session-live.is-offline{color:var(--qh-danger)}.session-error{background:var(--qh-danger-soft);color:var(--qh-danger);margin:0;padding:8px 16px;font-weight:600}.session-console>.session-error{grid-area:error}.session-error.is-inline{border-radius:2px;padding:4px 10px}.session-sidebar{background:var(--session-panel);flex-direction:column;gap:12px;padding:14px;display:flex;overflow:hidden auto}.session-maps{border-right:1px solid var(--session-line);grid-area:maps}.session-details{border-left:1px solid var(--session-line);grid-area:details}.session-board-column{background:var(--session-table);flex-direction:column;grid-area:board;min-width:0;min-height:0;display:flex}.session-board-area{flex:1;min-height:0;padding:16px;display:flex;overflow:auto}.session-empty{color:var(--qh-muted);flex:1;place-items:center;display:grid}.session-toolbar{border-bottom:1px solid var(--qh-line);color:var(--qh-text);flex-wrap:wrap;align-items:center;gap:8px 16px;padding:8px 12px;display:flex}.session-toolbar-group{align-items:center;gap:4px;display:flex}.session-toolbar-group>span{padding:0 4px;font-size:12px}.session-tool{border:1px solid var(--qh-line);background:var(--qh-panel-2);color:var(--qh-text-strong);font:inherit;cursor:pointer;border-radius:2px;padding:6px 10px;font-weight:600}.session-tool:hover:not(:disabled){background:var(--qh-accent-soft)}.session-tool.is-active{border-color:var(--session-accent);background:var(--session-accent);color:var(--qh-on-accent)}.session-tool:disabled{opacity:.4;cursor:not-allowed}.session-toolbar .session-toggle{color:var(--qh-text-strong)}.session-board-column{position:relative}.session-hint{z-index:5;pointer-events:none;color:#f7d9b8;white-space:nowrap;background:#24180fd9;border-radius:2px;padding:6px 12px;position:absolute;top:60px;left:50%;transform:translate(-50%)}.session-button{border:1px solid var(--session-line);background:var(--qh-panel-2);color:var(--session-text-strong);font:inherit;cursor:pointer;border-radius:2px;justify-content:center;align-items:center;padding:8px 12px;font-weight:600;text-decoration:none;display:inline-flex}.session-button:hover:not(:disabled){border-color:var(--session-accent)}.session-button:disabled{opacity:.5;cursor:not-allowed}.session-button.is-primary,.play-menu-toggle,.session-tool.is-active{font-family:var(--qh-display);letter-spacing:.06em}.session-button.is-primary{border-color:var(--session-accent);background:var(--session-accent);color:var(--qh-on-accent)}.session-button.is-danger{color:var(--qh-danger);border-color:#d0453a66}.session-toggle{cursor:pointer;align-items:center;gap:6px;font-weight:600;display:inline-flex}.session-field{gap:4px;font-weight:600;display:grid}.session-field select,.session-inline-form input{border:1px solid var(--session-line);background:var(--qh-panel-2);width:100%;color:var(--session-text-strong);font:inherit;border-radius:2px;padding:7px 8px}.session-inline-form{gap:6px;display:flex}.session-muted{color:var(--qh-muted);font-size:13px}.session-pill{color:var(--session-text-strong);vertical-align:middle;background:#d9b45a14;border-radius:2px;margin-left:6px;padding:1px 8px;font-size:11px;font-style:normal;font-weight:700;display:inline-block}.session-pill.is-live,.session-pill.is-player{color:var(--qh-ok);background:#7fc78c2e}.session-pill.is-monster{color:var(--qh-danger);background:#d9b45a29}.session-pill.is-npc{color:var(--qh-warn);background:#d9b45a33}.session-list{gap:4px;margin:0;padding:0;list-style:none;display:grid}.session-list-item{width:100%;color:var(--session-text-strong);font:inherit;text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:2px;gap:2px;padding:8px 10px;font-weight:600;display:grid}.session-list-item small{color:var(--session-text);font-weight:400}button.session-list-item:hover{background:#d9b45a0d}.session-list-item.is-selected{border-color:var(--session-accent);background:var(--session-accent-soft)}.session-list-item.is-static{cursor:default}.session-card{border:1px solid var(--session-line);background:var(--qh-panel-2);border-radius:2px;gap:8px;padding:12px;display:grid}.session-card-heading{justify-content:space-between;align-items:center;gap:8px;display:flex}.session-card-actions{flex-wrap:wrap;gap:6px;display:flex}.session-card-close{border:1px solid var(--session-line);width:24px;height:24px;color:var(--session-text);cursor:pointer;background:0 0;border-radius:50%;flex-shrink:0;padding:0;font-size:15px;line-height:1}.session-card-close:hover{border-color:var(--session-accent);color:var(--session-accent)}.play-selection{position:relative}.play-selection>.session-card-close{position:absolute;top:10px;right:10px}.play-selection .session-card-heading{padding-right:30px}.session-chip-list{flex-wrap:wrap;gap:4px;display:flex}.session-chip{border:1px solid var(--session-line);background:var(--qh-panel-2);color:var(--session-text-strong);font:inherit;cursor:pointer;border-radius:2px;padding:4px 10px;font-size:13px;font-weight:600}.session-chip.is-player{border-left:4px solid var(--qh-ok)}.session-chip.is-monster{border-left:4px solid var(--qh-accent)}.session-chip.is-active{border-color:var(--session-accent);background:var(--session-accent-soft)}.session-chip:disabled{opacity:.45;cursor:not-allowed}.session-stats{grid-template-columns:repeat(auto-fill,minmax(70px,1fr));gap:4px;margin:0;display:grid}.session-stats div{text-align:center;background:#d9b45a0d;border-radius:2px;padding:4px 6px}.session-stats dt{text-transform:uppercase;font-size:11px;font-weight:700}.session-stats dd{color:var(--session-text-strong);margin:0;font-size:1rem;font-weight:700}.session-portrait{object-fit:cover;border-radius:2px;width:100%;max-height:220px}.session-lobby{place-items:center;padding:24px 16px;display:grid}.session-lobby-card{border:1px solid var(--session-line);background:var(--session-panel);border-radius:2px;gap:12px;width:100%;max-width:420px;padding:32px;display:grid}.session-lobby-card>.session-pill{justify-self:start;margin:0}@media (width<=900px){.session-console,.session-play{grid-template:none/minmax(0,1fr);height:auto;overflow:visible}.session-console>*,.session-play>*{grid-area:auto}.session-board-column{min-height:60svh}.session-maps,.session-details{border:0}}.session-turn.is-mine{color:var(--qh-ok);font-weight:600}.session-initiative{flex-direction:column;gap:4px;margin:8px 0 0;padding:0;list-style:none;display:flex}.session-initiative li{border-radius:2px;justify-content:space-between;align-items:center;gap:8px;padding:4px 8px;display:flex}.session-initiative li.is-current{background:#d9b45a40;font-weight:600}.session-initiative-actions{gap:4px;display:flex}.session-initiative .session-initiative-input{width:3.5em;padding:2px 4px}.session-initiative .session-tool{border:1px solid var(--qh-line-strong);min-width:28px;color:inherit;background:0 0;padding:2px 6px}.session-initiative .session-tool:disabled{opacity:.3}.session-initiative-header{text-transform:uppercase;opacity:.6;justify-content:space-between;margin-top:8px;padding:0 8px;font-size:.75rem;font-weight:600;display:flex}.session-initiative-header span:last-child{cursor:help;width:calc(3.5em + 96px)}.character-bonus{color:var(--qh-ok);margin-left:4px;font-size:.7rem;font-style:normal}.character-proficiencies{margin:0 0 4px;font-size:.85rem}.character-inventory{gap:4px;margin:0;padding:0;list-style:none;display:grid}.character-inventory li{border:1px solid var(--session-line);border-radius:2px;justify-content:space-between;align-items:center;gap:8px;padding:4px 6px;display:flex}.character-inventory li.is-equipped{background:#7fc78c12;border-color:#7fc78c80}.character-inventory small{opacity:.7;display:block}.character-inventory .session-button{padding:2px 8px;font-size:.8rem}.session-play{grid-template-columns:minmax(0,1fr) auto}.session-play .session-header{background:linear-gradient(var(--qh-panel), var(--qh-panel));border-bottom:2px solid #d9b45a59;flex-wrap:wrap;gap:8px 16px;padding:8px 16px}.session-play .session-header-title{white-space:nowrap;flex-wrap:nowrap;min-width:0}.session-play .session-header h1{font-family:var(--heading);text-overflow:ellipsis;font-size:1.25rem;overflow:hidden}.session-play .session-header .session-tool{border-color:var(--session-line);background:var(--qh-panel-2);color:var(--session-text-strong)}.session-play .session-header .session-tool:hover:not(:disabled){border-color:var(--session-accent);background:var(--qh-panel-2)}.session-play .session-header .session-tool.is-active{border-color:var(--session-accent);background:var(--session-accent);color:var(--qh-on-accent)}.play-heroes{flex-wrap:wrap;flex:1;justify-content:flex-end;gap:8px;min-width:0;display:flex}.play-hero{border:1px solid var(--qh-accent);background:var(--qh-panel);min-width:160px;color:var(--qh-text-strong);border-radius:0;flex:0 200px;gap:3px;padding:6px 12px;font-size:12px;display:grid}.play-hero-head{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.play-hero-head strong{font-family:var(--heading);color:var(--qh-accent);font-size:.95rem}.play-hero-head small{color:var(--qh-muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.play-hero .vitals{gap:3px}.play-hero .vitals-bar{background:var(--qh-line);height:6px}.play-hero .vitals-temp{color:var(--qh-info)}.play-hero .vitals-saves{display:none}.play-hero .vitals-conditions{gap:3px}.play-hero .vitals-conditions li{background:var(--qh-accent-soft);color:var(--qh-text-strong);padding:0 6px;font-size:11px}.play-alerts{z-index:4;pointer-events:none;flex-direction:column;gap:8px;width:min(340px,100% - 24px);max-height:calc(100% - 90px);display:flex;position:absolute;top:12px;right:12px;overflow-y:auto}.play-alerts>*{pointer-events:auto;min-width:0}.play-alerts:empty{display:none}.session-play .session-card{border-color:var(--qh-line);background:var(--session-panel);border-radius:2px;box-shadow:0 1px 2px #0000002e}.session-play .play-alerts .session-card{border-color:#00000059}.session-play .session-card h2{font-family:var(--heading);font-size:1.02rem}.session-play .session-combat{border-color:#d9b45a99}.session-play .roll-requests{background:var(--qh-panel);border-color:#d9b45acc}.play-menu{z-index:5;flex-direction:column;align-items:flex-end;gap:8px;display:flex;position:absolute;bottom:16px;right:16px}.play-menu-toggle,.play-menu-items button{border:1px solid var(--qh-line);font:inherit;cursor:pointer;border-radius:2px;align-items:center;gap:8px;font-weight:700;display:inline-flex}.play-menu-toggle{background:var(--session-accent);color:var(--qh-on-accent);padding:12px 20px;font-size:15px}.play-menu-toggle:hover{filter:brightness(1.08)}.play-menu-items{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.play-menu-items button{background:var(--session-panel);color:var(--session-text-strong);padding:8px 16px}.play-menu-items button:hover{border-color:var(--session-accent)}.play-menu-items button.is-active{border-color:var(--session-accent);background:var(--session-accent);color:var(--qh-on-accent)}.play-drawer{background:var(--session-bg);gap:10px;width:380px;padding:0 12px 12px}.play-drawer[hidden]{display:none}.play-drawer-head{z-index:2;border-bottom:1px solid var(--session-line);background:var(--session-bg);justify-content:space-between;align-items:center;margin:0 -12px;padding:12px;display:flex;position:sticky;top:0}.play-drawer-head h2{font-family:var(--heading);font-size:1.15rem}.play-drawer-close{border:1px solid var(--session-line);background:var(--qh-panel-2);width:32px;height:32px;color:var(--session-text-strong);cursor:pointer;border-radius:50%;font-size:18px;line-height:1}.play-tab-panel{gap:10px;display:grid}.play-tab-panel[hidden]{display:none}.play-tip{padding:0 2px}.session-play .character-sheet>.vitals{display:none}.session-play .session-stats{grid-template-columns:repeat(3,minmax(0,1fr))}.session-play .session-stats dt{letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.session-play .hp-controls{flex-wrap:wrap;gap:6px;display:flex}.session-play .hp-controls input{width:64px}.session-play .hp-controls .session-button{padding:6px 10px}.session-play .session-sidebar input:not([type=checkbox]):not([type=radio]),.session-play .session-sidebar select,.session-play .session-sidebar textarea,.session-play .play-alerts input:not([type=checkbox]):not([type=radio]),.session-play .play-alerts select{border:1px solid var(--session-line);background:var(--qh-panel-2);min-width:0;color:var(--session-text-strong);font:inherit;border-radius:2px;padding:6px 8px}@media (width<=900px){.session-play{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr);height:100svh;overflow:hidden}.session-play .session-board-column{min-height:0}.session-play .session-header{flex-wrap:wrap;gap:6px 12px;padding:6px 10px}.session-play .session-header-title{flex:1}.session-play .session-header-title .session-status,.session-play .session-header-title .session-pill{display:none}.play-heroes{flex-basis:100%;order:3;justify-content:stretch}.play-hero{flex:1;width:auto}.play-drawer{z-index:20;width:auto;position:fixed;inset:0 0 64px;overflow-y:auto}.play-menu{z-index:21;flex-direction:row-reverse;align-items:center;position:fixed;bottom:8px;left:8px;right:8px}.play-menu-items{flex-direction:row;flex:1;gap:4px;overflow-x:auto}.play-menu-items button{border-radius:2px;flex-direction:column;flex:1;gap:0;padding:4px 6px;font-size:11px}.play-menu-toggle{padding:10px 14px}.play-alerts{max-height:calc(100% - 80px);top:8px;right:8px}}.session-selection{flex-direction:column;gap:12px;display:flex}.session-selection:empty{display:none}.session-tabs{z-index:2;border-bottom:1px solid var(--session-line);background:var(--session-panel);gap:4px;margin:0 -14px;padding:6px 14px;display:flex;position:sticky;top:-14px}.session-tab{color:var(--session-text);font:inherit;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:2px;flex:1;padding:6px 4px;font-size:13px;font-weight:600;position:relative}.session-tab:hover{background:#d9b45a0d}.session-tab.is-active{border-color:var(--session-accent);background:var(--session-accent-soft);color:var(--session-text-strong)}.session-tab-dot{background:var(--session-accent);vertical-align:middle;border-radius:50%;width:7px;height:7px;margin-left:4px;display:inline-block}.mini-status{color:var(--session-text);flex-wrap:wrap;align-items:center;gap:2px 8px;font-size:12px;font-weight:400;display:flex}.mini-status-bar{background:#d9b45a1f;border-radius:2px;flex:56px;min-width:56px;height:6px;overflow:hidden}.mini-status-bar>span{height:100%;display:block}.mini-status-bar .is-ok{background:var(--qh-ok)}.mini-status-bar .is-hurt{background:var(--qh-warn)}.mini-status-bar .is-low{background:var(--qh-danger)}.mini-status.is-down .mini-status-text,.mini-status.is-dead .mini-status-text{color:var(--qh-danger);font-weight:600}.mini-status.is-dead{opacity:.6}.mini-status-conditions{gap:2px;display:inline-flex}.session-initiative li>span:first-child{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.session-tabpanel{flex-direction:column;gap:12px;display:flex}.session-tabpanel[hidden]{display:none}.session-stats-fold>summary{color:var(--session-text);cursor:pointer;font-size:13px;font-weight:600}.session-stats-fold[open]>summary{margin-bottom:6px}.session-tab{white-space:nowrap}.session-tab-dot{margin:0;position:absolute;top:5px;right:5px}.session-play{grid-template:"header header header""strip strip strip""board side details"minmax(0,1fr)/minmax(0,1fr) auto auto}.session-play .session-header{border-bottom:1px solid var(--qh-accent);background:var(--qh-bg)}.session-play .session-header h1{color:var(--qh-accent);letter-spacing:.1em}.session-play .session-board-column{background:var(--qh-bg-deep)}.play-order{gap:8px;margin:0;padding:0;list-style:none;display:flex}.play-order.is-strip{border-bottom:1px solid var(--qh-line);background:var(--qh-panel);scrollbar-width:none;grid-area:strip;padding:8px 16px;overflow-x:auto}.play-order.is-strip .play-order-item{border:1px solid var(--qh-line);color:var(--qh-muted);font-family:var(--qh-display);letter-spacing:.06em;flex:none;align-items:center;gap:4px;padding:4px 12px;font-size:13px;display:flex}.play-order.is-strip .play-order-item strong{font-weight:500}.play-order.is-strip .play-order-item.is-current{border-color:var(--qh-accent);color:var(--qh-accent)}.play-order.is-list{flex-direction:column}.play-order.is-list .play-order-item{border:1px solid var(--qh-line);align-items:center;gap:14px;padding:10px 14px;display:flex}.play-order.is-list .play-order-item.is-current{border-color:var(--qh-accent);background:var(--qh-bg)}.play-order-mark{width:34px;height:34px;color:var(--qh-on-accent);font-family:var(--qh-display);border-radius:50%;flex:none;justify-content:center;align-items:center;font-weight:700;display:flex}.play-order-mark.is-hero{background:var(--qh-accent)}.play-order-mark.is-foe{background:var(--qh-danger-strong)}.play-order-main{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.play-order.is-list .play-order-main>strong{color:var(--qh-text-strong);font-size:1.1rem}.play-order-main small{color:var(--qh-muted)}.play-order-init{color:var(--qh-muted);font-variant-numeric:tabular-nums}.play-turnbar{z-index:4;border:1px solid var(--qh-line);background:var(--qh-panel);flex-wrap:wrap;align-items:center;gap:6px 16px;max-width:calc(100% - 200px);padding:10px 16px;display:flex;position:absolute;bottom:16px;left:16px}.play-turnbar.is-mine{border-color:var(--qh-accent)}.play-turnbar-round{color:var(--qh-muted);font-family:var(--qh-display);letter-spacing:.14em;text-transform:uppercase;font-size:12px}.play-turnbar-who small{color:var(--qh-muted);font-family:var(--qh-display);letter-spacing:.12em;text-transform:uppercase;font-size:12px}.play-turnbar-who strong{color:var(--qh-accent);font-family:var(--qh-display);letter-spacing:.06em;font-size:1.2rem}.play-turnbar-moves{color:var(--qh-muted);font-style:italic}.session-button.is-primary.play-end-turn{border-color:var(--qh-danger-strong);background:var(--qh-danger-fill);min-height:44px;color:var(--qh-on-danger);text-transform:uppercase}.session-button.is-primary.play-end-turn:hover:not(:disabled){border-color:var(--qh-danger)}.play-shared-side{border-left:1px solid var(--qh-line);background:var(--qh-panel);flex-direction:column;grid-area:side;gap:24px;width:380px;padding:24px;display:flex;overflow-y:auto}.play-shared-side h2{color:var(--qh-muted);font-family:var(--qh-display);letter-spacing:.14em;text-transform:uppercase;margin-bottom:12px;font-size:13px;font-weight:500}.play-shared-journal{flex-direction:column;gap:10px;margin:0;padding:0;font-size:1.05rem;list-style:none;display:flex}.play-shared-journal li+li{color:var(--qh-muted)}.session-play.is-shared .play-turnbar{padding:14px 22px;bottom:24px;left:24px}.session-play.is-shared .play-turnbar-who strong{font-size:1.9rem}.session-play .play-drawer{grid-area:details}@media (width<=900px){.session-play{grid-template:"header""strip""board"minmax(0,1fr)/minmax(0,1fr)}.play-shared-side{display:none}.session-play.is-player .session-header h1{color:var(--qh-muted);font-size:.95rem}.play-turnbar,.session-play.is-shared .play-turnbar{max-width:none;padding:8px 12px;bottom:72px;left:8px;right:8px}.play-turnbar-who strong{font-size:1.05rem}.play-end-turn{margin-left:auto}.play-alerts{max-height:calc(100% - 170px)}}
