:root{
  color-scheme:dark;
  --bg:#0d0b0f;--surface:#17131a;--surface-2:#211b25;--surface-3:#2b2330;
  --line:#44384b;--line-soft:#302735;--text:#f2edf2;--muted:#b9adb9;
  --accent:#c23b44;--accent-2:#d6ab67;--good:#66c18c;--warn:#dfad5e;--danger:#e26969;
  --shadow:0 18px 50px rgba(0,0,0,.35);--radius:16px;--header-h:64px;
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}
*{box-sizing:border-box}html{min-height:100%;background:var(--bg);scroll-behavior:smooth}body{margin:0;min-height:100vh;background:radial-gradient(circle at 50% -10%,#2a1b2d 0,transparent 34rem),var(--bg);color:var(--text)}button,input,select,textarea{font:inherit}button,a{touch-action:manipulation}.hidden{display:none!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;left:1rem;top:-5rem;z-index:1000;background:#fff;color:#111;padding:.75rem 1rem;border-radius:8px}.skip-link:focus{top:1rem}.muted{color:var(--muted)}.eyebrow{margin:0 0 .25rem;text-transform:uppercase;letter-spacing:.14em;font-size:.68rem;color:var(--accent-2);font-weight:800}.text-link{color:#f0c77f}.notice{padding:.8rem 1rem;border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.04)}
.boot-view{position:fixed;inset:0;z-index:900;display:grid;place-content:center;text-align:center;background:radial-gradient(circle at center,#2f1e34,#0d0b0f 62%);padding:2rem}.boot-logo{width:92px;height:92px;margin:auto;filter:drop-shadow(0 12px 24px rgba(0,0,0,.5))}.boot-view h1{margin:.8rem 0 .15rem;font-family:Georgia,serif;font-size:2.4rem}.boot-view p{color:var(--muted)}
.auth-view,.picker-view{min-height:100vh}.auth-view{display:grid;place-items:center;padding:clamp(1rem,4vw,3rem)}.auth-card{width:min(100%,520px);padding:clamp(1.25rem,4vw,2.25rem);border:1px solid var(--line);border-radius:22px;background:rgba(23,19,26,.96);box-shadow:var(--shadow)}.auth-brand{display:flex;gap:1rem;align-items:center}.auth-logo{width:70px;height:70px}.auth-brand h1{margin:0;font-family:Georgia,serif;font-size:clamp(1.55rem,4vw,2.1rem)}.auth-tabs{display:grid;grid-template-columns:1fr 1fr;margin:1.5rem 0 1rem;border:1px solid var(--line);border-radius:12px;padding:4px}.auth-tab{border:0;background:transparent;color:var(--muted);padding:.7rem;border-radius:9px;font-weight:800}.auth-tab.active{background:var(--surface-3);color:var(--text)}.auth-form{display:grid;gap:.85rem}.auth-form label{display:grid;gap:.35rem;color:var(--muted);font-size:.78rem;text-transform:uppercase;letter-spacing:.08em}.auth-form input,.auth-form select,.auth-form textarea,.sheet-app input,.sheet-app select,.sheet-app textarea{width:100%;min-height:44px;border:1px solid var(--line);border-radius:10px;background:#0f0c11;color:var(--text);padding:.7rem .8rem;outline:none}.auth-form input:focus,.sheet-app input:focus,.sheet-app select:focus,.sheet-app textarea:focus{border-color:var(--accent-2);box-shadow:0 0 0 3px rgba(214,171,103,.16)}
.primary-button,.quiet-button,.icon-text-button,.danger-button,.secondary-button{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;min-height:42px;border-radius:10px;padding:.65rem .9rem;font-weight:800;text-decoration:none;cursor:pointer}.primary-button{border:1px solid #e36a70;background:linear-gradient(#c94a53,#9f2c35);color:#fff}.quiet-button,.icon-text-button,.secondary-button{border:1px solid var(--line);background:var(--surface-2);color:var(--text)}.danger-button{border:1px solid #8e3c44;background:#3e1f23;color:#ffd8d8}.text-button{border:0;background:transparent;color:var(--accent-2);padding:.25rem;font-weight:800;cursor:pointer}.icon-button,.edit-icon{width:42px;height:42px;border:1px solid var(--line);border-radius:11px;background:var(--surface-2);color:var(--text);display:grid;place-items:center;cursor:pointer}.edit-icon{width:34px;height:34px;border-radius:9px}.icon-button:hover,.quiet-button:hover,.summary-stat:hover,.shield-stat:hover{border-color:var(--accent-2)}
.picker-header,.app-header{position:sticky;top:0;z-index:100;min-height:var(--header-h);display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.65rem clamp(.8rem,3vw,2rem);background:rgba(13,11,15,.92);border-bottom:1px solid var(--line-soft);backdrop-filter:blur(16px)}.brand-lockup,.app-brand,.header-actions{display:flex;align-items:center;gap:.75rem}.brand-logo{width:40px;height:40px}.brand-lockup h1{margin:0;font-size:1.25rem}.picker-main{width:min(1200px,100%);margin:auto;padding:clamp(1rem,4vw,2.2rem)}.picker-toolbar{display:flex;gap:.75rem;justify-content:space-between;margin-bottom:1rem}.search-field{flex:1}.search-field input{width:100%;min-height:44px;border:1px solid var(--line);border-radius:12px;background:var(--surface);color:var(--text);padding:.7rem 1rem}.character-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1rem}.character-choice{display:grid;grid-template-columns:auto 1fr;gap:.9rem;text-align:left;border:1px solid var(--line);border-radius:var(--radius);background:linear-gradient(145deg,var(--surface-2),var(--surface));color:var(--text);padding:1rem;cursor:pointer}.character-choice:hover{transform:translateY(-2px);border-color:var(--accent-2)}.choice-avatar{width:54px;height:54px;border:1px solid var(--line);border-radius:50%;display:grid;place-items:center;background:#100c12;font-weight:900;color:var(--accent-2)}.character-choice h2{margin:0 0 .2rem;font-size:1.05rem}.character-choice p{margin:.15rem 0;color:var(--muted);font-size:.86rem}.choice-stats{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:.4rem}.mini-pill,.pill{display:inline-flex;align-items:center;gap:.25rem;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.035);padding:.25rem .55rem;font-size:.72rem;color:var(--muted)}.pill.good{border-color:#356a4c;color:#8ce0ad}.pill.warn{border-color:#765426;color:#efc178}.pill.danger{border-color:#793a42;color:#ff9298}
.app-header{height:var(--header-h)}.brand-button{display:flex;align-items:center;gap:.7rem;border:0;background:transparent;color:var(--text);text-align:left;cursor:pointer}.brand-button span{display:grid}.brand-button small{color:var(--accent-2);text-transform:uppercase;font-size:.62rem;letter-spacing:.12em}.brand-button strong{max-width:28vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.desktop-utility-nav{display:flex;gap:.15rem}.desktop-utility-nav a{color:var(--muted);text-decoration:none;padding:.55rem .7rem;border-radius:8px;font-size:.84rem}.desktop-utility-nav a:hover{background:var(--surface-2);color:var(--text)}.save-state{display:flex;align-items:center;gap:.4rem;color:var(--muted);font-size:.76rem}.save-dot{width:8px;height:8px;border-radius:50%;background:var(--good)}.save-state.dirty .save-dot{background:var(--warn)}.save-state.saving .save-dot{background:var(--accent-2);animation:pulse 1s infinite}.save-state.error .save-dot{background:var(--danger)}@keyframes pulse{50%{opacity:.35}}.offline-banner{position:sticky;top:var(--header-h);z-index:95;padding:.45rem 1rem;text-align:center;background:#5a3c16;color:#ffe2aa;font-size:.8rem}.combat-session-banner{display:flex;width:100%;align-items:center;justify-content:center;gap:.55rem;padding:.55rem 1rem;border:0;border-bottom:1px solid rgba(216,187,114,.3);border-radius:0;background:linear-gradient(90deg,rgba(67,43,51,.96),rgba(32,25,40,.96));color:var(--text);font-weight:800;cursor:pointer}.combat-session-banner:hover,.combat-session-banner:focus-visible{background:linear-gradient(90deg,rgba(82,50,58,.98),rgba(43,31,53,.98));outline:2px solid rgba(216,187,114,.45);outline-offset:-2px}.combat-session-banner .session-turn{color:#f0d38d}.combat-session-banner .session-pressure{font-size:.72rem;border:1px solid rgba(216,187,114,.35);border-radius:999px;padding:.12rem .45rem}.combat-session-banner.hidden{display:none}

.character-banner{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:1rem;align-items:center;padding:1rem clamp(.8rem,3vw,2rem);border-bottom:1px solid var(--line-soft);background:linear-gradient(110deg,rgba(194,59,68,.14),rgba(214,171,103,.05) 55%,transparent)}.portrait-shell{width:76px;height:76px;border-radius:50%;border:2px solid var(--accent-2);display:grid;place-items:center;background:linear-gradient(145deg,#3b273e,#100c12);font-family:Georgia,serif;font-size:1.5rem;font-weight:900}.character-identity h1{margin:0;font-family:Georgia,serif;font-size:clamp(1.65rem,3vw,2.5rem);line-height:1}.identity-title-row{display:flex;align-items:center;gap:.55rem}.character-subtitle{margin:.4rem 0 .55rem;color:var(--muted)}.pill-row{display:flex;gap:.4rem;flex-wrap:wrap}.banner-stats{display:grid;grid-template-columns:repeat(4,minmax(90px,1fr));gap:.45rem}.summary-stat{min-height:62px;border:1px solid var(--line);border-radius:12px;background:rgba(10,8,12,.55);color:var(--text);padding:.55rem;display:grid;place-items:center;cursor:pointer}.summary-stat span{font-size:.64rem;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);text-align:center}.summary-stat strong{font-size:1.2rem}
.sheet-tabs{position:sticky;top:var(--header-h);z-index:90;display:flex;gap:.25rem;padding:.55rem clamp(.8rem,3vw,2rem);overflow-x:auto;background:rgba(13,11,15,.95);border-bottom:1px solid var(--line-soft);scrollbar-width:none}.sheet-tabs::-webkit-scrollbar{display:none}.sheet-tabs button{border:0;background:transparent;color:var(--muted);padding:.6rem .8rem;border-radius:9px;font-weight:800;white-space:nowrap;cursor:pointer}.sheet-tabs button.active{background:var(--surface-3);color:var(--text)}
.sheet-layout{display:grid;grid-template-columns:minmax(210px,250px) minmax(420px,1fr) minmax(250px,310px);gap:1rem;align-items:start;width:min(1600px,100%);margin:auto;padding:1rem clamp(.7rem,2vw,1.4rem) 5rem}.left-rail,.right-rail{display:grid;gap:1rem;position:sticky;top:calc(var(--header-h) + 58px + 1rem);max-height:calc(100vh - var(--header-h) - 75px);overflow:auto;scrollbar-width:thin}.content-column{min-width:0}.rail-card,.content-card{border:1px solid var(--line);border-radius:var(--radius);background:linear-gradient(145deg,rgba(33,27,37,.96),rgba(20,16,23,.98));box-shadow:0 8px 24px rgba(0,0,0,.16);overflow:hidden}.rail-card{padding:.85rem}.content-card{padding:1rem;margin-bottom:1rem}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.65rem}.section-heading h2,.content-card h2{margin:0;font-size:.98rem}.content-card h2{font-size:1.15rem}.section-heading p{margin:0}.ability-cards{display:grid;grid-template-columns:repeat(2,1fr);gap:.45rem}.ability-card{border:1px solid var(--line-soft);border-radius:12px;background:#100d12;color:var(--text);padding:.55rem;text-align:center;cursor:pointer}.ability-card .ability-name{font-size:.62rem;color:var(--muted);letter-spacing:.08em}.ability-card .ability-mod{display:block;font-size:1.25rem;font-weight:900}.ability-card .ability-score{font-size:.7rem;color:var(--muted)}.ability-card:hover{border-color:var(--accent-2)}.compact-list,.skill-list{display:grid;gap:.18rem}.compact-row,.skill-row{display:grid;grid-template-columns:20px 42px 1fr auto;align-items:center;gap:.25rem;min-height:32px;padding:.2rem .25rem;border-radius:7px}.compact-row:hover,.skill-row:hover{background:rgba(255,255,255,.035)}.prof-dot{width:9px;height:9px;border:1px solid var(--muted);border-radius:50%;justify-self:center}.prof-dot.proficient{background:var(--accent-2);border-color:var(--accent-2)}.prof-dot.expertise{background:var(--accent);border:3px double var(--accent-2)}.roll-link{border:0;background:transparent;color:var(--text);font-weight:800;text-align:right;cursor:pointer}.skill-row small{color:var(--muted)}
.combat-topline{display:grid;grid-template-columns:repeat(3,1fr);gap:.4rem}.shield-stat{min-height:68px;border:1px solid var(--line-soft);border-radius:12px;background:#100d12;color:var(--text);padding:.45rem;display:grid;place-items:center;cursor:pointer}.shield-stat span{font-size:.58rem;text-transform:uppercase;color:var(--muted);text-align:center}.shield-stat strong{font-size:1.3rem}.hp-panel{margin-top:.65rem;border-top:1px solid var(--line-soft);padding-top:.65rem}.hp-title,.hp-substats{display:flex;justify-content:space-between;gap:.5rem;color:var(--muted);font-size:.72rem}.hp-values{display:flex;align-items:baseline;justify-content:center;gap:.35rem;margin:.35rem 0}.hp-values strong{font-size:2rem}.hp-bar{height:9px;border-radius:999px;background:#09070a;overflow:hidden}.hp-bar span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent),#ef767d);transition:width .25s}.hp-substats{margin-top:.5rem}.death-saves{margin-top:.75rem;padding:.65rem;border:1px solid #6b343b;border-radius:11px;background:#281419}.resource-meter{margin:.45rem 0 .8rem}.meter-label{display:flex;justify-content:space-between;gap:.5rem;font-size:.75rem;color:var(--muted)}.meter-track{height:8px;border-radius:999px;background:#0b080c;overflow:hidden;margin:.3rem 0}.meter-track span{display:block;height:100%;background:linear-gradient(90deg,var(--accent-2),#f2d5a1)}.meter-track.risk span{background:linear-gradient(90deg,#7c2831,var(--danger))}.resource-buttons{display:grid;grid-template-columns:repeat(3,1fr);gap:.35rem}.resource-buttons button{min-height:34px;border:1px solid var(--line);border-radius:8px;background:var(--surface-3);color:var(--text);cursor:pointer}.status-chip-list{display:flex;flex-wrap:wrap;gap:.35rem}.status-chip{border:1px solid var(--line);border-radius:999px;background:#100d12;color:var(--text);padding:.35rem .55rem;font-size:.72rem;cursor:pointer}.status-chip.warn{border-color:#745225;color:#edbd70}.status-chip.danger{border-color:#743139;color:#ff949a}.key-value-list{display:grid;gap:.4rem}.key-value-row{display:flex;justify-content:space-between;gap:1rem;font-size:.78rem}.key-value-row span:first-child{color:var(--muted)}
.tab-content{min-height:400px}.mobile-core-stats{display:none}.content-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.6rem;margin-bottom:1rem}.content-toolbar h2{margin:0}.toolbar-controls{display:flex;gap:.45rem;flex-wrap:wrap}.toolbar-controls input,.toolbar-controls select{min-height:38px}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:.75rem}.action-card,.spell-card,.inventory-card,.feature-card{border:1px solid var(--line);border-radius:14px;background:rgba(18,14,20,.72);padding:.85rem;display:flex;flex-direction:column;gap:.55rem;min-width:0}.card-header{display:flex;justify-content:space-between;gap:.6rem;align-items:flex-start}.card-header h3{margin:0;font-size:1rem}.card-meta{font-size:.72rem;color:var(--muted)}.card-description{margin:0;color:var(--muted);font-size:.82rem;line-height:1.45}.card-actions{display:flex;gap:.4rem;flex-wrap:wrap;margin-top:auto}.card-actions button,.card-actions a{min-height:36px;border:1px solid var(--line);border-radius:9px;background:var(--surface-3);color:var(--text);padding:.45rem .65rem;text-decoration:none;font-weight:750;cursor:pointer}.card-actions .primary{background:#5b252b;border-color:#9b3b44}.section-stack{display:grid;gap:1rem}.action-section h2{font-size:1rem;margin:0 0 .55rem}.empty-state{border:1px dashed var(--line);border-radius:14px;padding:1.2rem;text-align:center;color:var(--muted)}.attack-line{display:grid;grid-template-columns:1fr auto auto;gap:.5rem;align-items:center}.attack-bonus,.damage-value{font-weight:900}.slot-row{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap}.slot-level{width:72px;color:var(--muted);font-size:.76rem}.slot-pips{display:flex;gap:.3rem;flex-wrap:wrap}.slot-pip{width:28px;height:28px;border:1px solid var(--line);border-radius:50%;background:#0c090d;color:transparent;cursor:pointer}.slot-pip.available{background:var(--accent-2);border-color:#f1d29a}.slot-pip:focus-visible{outline:2px solid #fff}.inventory-list{display:grid;gap:.65rem}.inventory-card{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center}.inventory-card .card-actions{grid-column:1/-1}.quantity-control{display:flex;align-items:center;gap:.3rem}.quantity-control button{width:34px;height:34px;border:1px solid var(--line);border-radius:8px;background:var(--surface-3);color:var(--text)}.quantity-control strong{min-width:32px;text-align:center}.feature-level{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:#351e24;color:#ffc1c5;font-weight:900}.feature-row{display:grid;grid-template-columns:auto 1fr;gap:.75rem;align-items:start}.feature-row h3{margin:.1rem 0}.details-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.7rem}.details-block{border:1px solid var(--line-soft);border-radius:12px;padding:.75rem}.details-block h3{margin:0 0 .5rem;font-size:.9rem}.notes-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}.notes-grid label{display:grid;gap:.35rem;color:var(--muted);font-size:.75rem}.notes-grid textarea{min-height:150px;resize:vertical}.notes-grid .wide{grid-column:1/-1}.ledger{white-space:pre-wrap;max-height:300px;overflow:auto;background:#0d0a0e;border:1px solid var(--line-soft);border-radius:10px;padding:.7rem;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace}.manage-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:.75rem}.manage-card{border:1px solid var(--line);border-radius:14px;padding:.85rem;background:rgba(18,14,20,.65)}.manage-card h3{margin:0 0 .5rem}.manage-card p{color:var(--muted);font-size:.82rem}.manage-card .button-stack{display:grid;gap:.4rem}.manage-card button,.manage-card a{width:100%}
.mobile-bottom-nav{display:none}.dice-fab{position:fixed;right:1.2rem;bottom:1.2rem;z-index:85;width:58px;height:58px;padding:4px;border-radius:50%;border:2px solid var(--accent-2);background:radial-gradient(circle,#261b22 0,#0d0b0f 72%);color:#fff;font-weight:900;box-shadow:var(--shadow);cursor:pointer;overflow:hidden;display:grid;place-items:center}.dice-fab img{display:block;width:100%;height:100%;object-fit:contain;pointer-events:none;filter:drop-shadow(0 3px 5px rgba(0,0,0,.55))}.dice-fab:hover,.dice-fab:focus-visible{border-color:#f0d38d;box-shadow:0 0 0 4px rgba(216,187,114,.16),var(--shadow);outline:none}
.drawer-backdrop,.modal-backdrop{position:fixed;inset:0;z-index:300;background:rgba(0,0,0,.62);backdrop-filter:blur(3px)}.sheet-drawer{position:fixed;z-index:310;right:0;top:0;bottom:0;width:min(480px,100%);background:var(--surface);border-left:1px solid var(--line);box-shadow:var(--shadow);display:flex;flex-direction:column}.drawer-handle{display:none}.drawer-header,.modal-header{display:flex;align-items:center;justify-content:space-between;gap:.7rem;padding:.9rem 1rem;border-bottom:1px solid var(--line)}.drawer-header h2,.modal-header h2{margin:0}.drawer-body{padding:1rem;overflow:auto}.drawer-body form,.form-grid{display:grid;gap:.75rem}.form-grid.two{grid-template-columns:1fr 1fr}.form-grid label,.drawer-body label{display:grid;gap:.3rem;color:var(--muted);font-size:.75rem}.form-section{border-top:1px solid var(--line-soft);padding-top:.75rem;margin-top:.25rem}.modal{position:fixed;z-index:410;left:50%;top:50%;transform:translate(-50%,-50%);width:min(560px,calc(100% - 2rem));max-height:calc(100vh - 2rem);background:var(--surface);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);display:flex;flex-direction:column}.modal-body{padding:1rem;overflow:auto}.modal-actions{display:flex;justify-content:flex-end;gap:.5rem;padding:.8rem 1rem;border-top:1px solid var(--line)}.toast-region{position:fixed;z-index:500;right:1rem;bottom:5rem;display:grid;gap:.5rem;width:min(360px,calc(100% - 2rem))}.toast{border:1px solid var(--line);border-radius:12px;background:#211a24;padding:.75rem 1rem;box-shadow:var(--shadow)}.toast.good{border-color:#34694b}.toast.warn{border-color:#765426}.toast.danger{border-color:#7b343c}
@media(max-width:1180px){.sheet-layout{grid-template-columns:210px minmax(390px,1fr) 260px}.banner-stats{grid-template-columns:repeat(2,1fr)}.summary-stat{min-height:52px}}
@media(max-width:900px){:root{--header-h:58px}.desktop-utility-nav,.sheet-tabs,.left-rail,.right-rail{display:none}.app-header{padding:.45rem .65rem}.brand-button strong{max-width:48vw}.save-state span:last-child{display:none}.character-banner{grid-template-columns:auto 1fr;padding:.75rem}.portrait-shell{width:56px;height:56px;font-size:1.05rem}.character-identity h1{font-size:1.45rem}.character-subtitle{font-size:.82rem;margin:.25rem 0}.identityPills{display:none}.banner-stats{grid-column:1/-1;grid-template-columns:repeat(4,1fr);width:100%;gap:.3rem}.summary-stat{min-height:48px;padding:.35rem}.summary-stat span{font-size:.54rem}.summary-stat strong{font-size:1rem}.sheet-layout{display:block;padding:.65rem .65rem calc(84px + env(safe-area-inset-bottom))}.mobile-core-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:.45rem;margin-bottom:.65rem}.mobile-stat-card{border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:.65rem;text-align:center}.mobile-stat-card span{display:block;color:var(--muted);font-size:.58rem;text-transform:uppercase}.mobile-stat-card strong{font-size:1.25rem}.mobile-stat-card.hp{grid-column:span 2}.mobile-bottom-nav{position:fixed;z-index:200;left:0;right:0;bottom:0;display:grid;grid-template-columns:repeat(5,1fr);padding:.35rem .3rem calc(.35rem + env(safe-area-inset-bottom));background:rgba(13,11,15,.97);border-top:1px solid var(--line);backdrop-filter:blur(16px)}.mobile-bottom-nav button{border:0;background:transparent;color:var(--muted);display:grid;place-items:center;gap:.15rem;padding:.25rem;min-height:50px}.mobile-bottom-nav button.active{color:#fff}.mobile-bottom-nav span{font-size:1.05rem}.mobile-bottom-nav small{font-size:.62rem}.dice-fab{right:.85rem;bottom:calc(73px + env(safe-area-inset-bottom));width:50px;height:50px}.card-grid{grid-template-columns:1fr}.content-card{padding:.85rem}.notes-grid{grid-template-columns:1fr}.notes-grid .wide{grid-column:auto}.picker-header{align-items:flex-start}.picker-header .header-actions{flex-wrap:wrap;justify-content:flex-end}.picker-toolbar{display:grid}.sheet-drawer{top:auto;left:0;right:0;bottom:0;width:100%;max-height:88vh;border:1px solid var(--line);border-bottom:0;border-radius:20px 20px 0 0}.drawer-handle{display:block;width:48px;height:5px;border-radius:999px;background:#5d505f;margin:.5rem auto 0}.drawer-header{padding:.5rem .9rem .75rem}.drawer-body{padding:.85rem .85rem calc(1rem + env(safe-area-inset-bottom))}.form-grid.two{grid-template-columns:1fr}.toast-region{right:.65rem;bottom:calc(80px + env(safe-area-inset-bottom));width:calc(100% - 1.3rem)}}
@media(max-width:540px){.character-banner{grid-template-columns:auto minmax(0,1fr)}.banner-stats{overflow-x:auto;grid-template-columns:repeat(4,minmax(84px,1fr))}.character-identity .pill-row{display:none}.auth-card{border-radius:16px}.ability-cards{grid-template-columns:repeat(3,1fr)}.mobile-core-stats{grid-template-columns:repeat(3,1fr)}.mobile-stat-card.hp{grid-column:span 2}.content-toolbar{align-items:flex-start;flex-direction:column}.toolbar-controls{width:100%}.toolbar-controls input,.toolbar-controls select{flex:1}.inventory-card{grid-template-columns:1fr}.quantity-control{justify-content:flex-start}.inventory-card .card-actions{grid-column:auto}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
@media print{.app-header,.sheet-tabs,.mobile-bottom-nav,.dice-fab,.header-actions,.text-button,.edit-icon,.card-actions,.offline-banner{display:none!important}.character-banner{padding:.5rem;border:0}.sheet-layout{display:grid;grid-template-columns:180px 1fr 220px;padding:0;gap:.5rem}.left-rail,.right-rail{display:grid;position:static;max-height:none;overflow:visible}.rail-card,.content-card{box-shadow:none;break-inside:avoid}.tab-content>[data-print-hidden]{display:none}}

/* Unified 5e sheet component extensions. */
.turn-flags{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.55rem}.turn-flag{min-height:78px;border:1px solid var(--line);border-radius:12px;background:#120f15;color:var(--text);display:grid;place-items:center;gap:.1rem;padding:.5rem;cursor:pointer}.turn-flag>span{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--surface-3);color:var(--accent-2);font-weight:900}.turn-flag strong{font-size:.78rem}.turn-flag small{color:var(--muted);font-size:.65rem}.turn-flag.used{border-color:#82414a;background:#311a1f;opacity:.8}.turn-flag.used>span{background:#6b2d36;color:#fff}
.quick-roll-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:.45rem}.quick-roll-grid button{min-height:46px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);color:var(--text);display:flex;justify-content:space-between;align-items:center;gap:.5rem;padding:.55rem .7rem;text-align:left;cursor:pointer}.quick-roll-grid button:hover{border-color:var(--accent-2)}.quick-roll-grid span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:.76rem}.quick-roll-grid strong{font-size:1rem}
.spell-slot-panel{display:grid;gap:.7rem}.spell-facts{display:flex;gap:.45rem;flex-wrap:wrap}.spell-facts span{border:1px solid var(--line-soft);border-radius:999px;padding:.25rem .55rem;color:var(--muted);font-size:.72rem}.concentration-banner{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border:1px solid #79602f;border-radius:12px;background:rgba(148,104,37,.16);padding:.7rem .8rem}.concentration-banner strong{color:#f1cd8a}.concentration-banner button{border:1px solid #8c6230;border-radius:9px;background:#3a2917;color:#ffe5b0;padding:.45rem .65rem;font-weight:800}
.tracker-list{display:grid;gap:.5rem}.tracker-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.65rem;align-items:center;border:1px solid var(--line-soft);border-radius:11px;padding:.6rem;background:rgba(0,0,0,.13)}.tracker-row h4{margin:0;font-size:.86rem}.tracker-row p{margin:.15rem 0 0;color:var(--muted);font-size:.72rem}.tracker-row .quantity-control{justify-content:flex-end}
.plain-list{margin:.35rem 0 0;padding-left:1.15rem;color:var(--muted);line-height:1.55}.plain-list li+li{margin-top:.25rem}.full-stat-table,.skill-table{display:grid;border:1px solid var(--line-soft);border-radius:12px;overflow:hidden}.stat-table-head,.stat-table-row{display:grid;grid-template-columns:minmax(120px,1.3fr) repeat(3,minmax(70px,.65fr));gap:.5rem;align-items:center;padding:.55rem .65rem}.stat-table-head{background:var(--surface-3);font-size:.68rem;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:800}.stat-table-row{border-top:1px solid var(--line-soft);font-size:.82rem}.stat-table-row button{border:0;background:transparent;color:var(--text);font-weight:800;text-align:left;cursor:pointer}.stat-table-row strong{text-align:center}.skill-table .stat-table-head,.skill-table .stat-table-row{grid-template-columns:minmax(150px,1.5fr) 80px 80px 80px}
.pre-wrap{white-space:pre-wrap;overflow-wrap:anywhere}.event-feed{display:grid;gap:.35rem;margin-top:1rem;padding-top:.8rem;border-top:1px solid var(--line-soft)}.event-feed h3{margin:0 0 .25rem;font-size:.9rem}.event-feed>div{display:grid;grid-template-columns:minmax(100px,.7fr) minmax(0,1.5fr);gap:.55rem;border-radius:9px;background:rgba(0,0,0,.13);padding:.45rem .55rem}.event-feed strong{font-size:.72rem;text-transform:capitalize}.event-feed span{color:var(--muted);font-size:.74rem}
.detail-list{display:grid;grid-template-columns:minmax(120px,.7fr) minmax(0,1.4fr);gap:0;border:1px solid var(--line-soft);border-radius:12px;overflow:hidden;margin:.75rem 0}.detail-list dt,.detail-list dd{margin:0;padding:.55rem .65rem;border-top:1px solid var(--line-soft);overflow-wrap:anywhere}.detail-list dt:nth-of-type(1),.detail-list dd:nth-of-type(1){border-top:0}.detail-list dt{background:rgba(255,255,255,.035);color:var(--muted);font-size:.72rem;font-weight:800}.detail-list dd{font-size:.78rem}.drawer-detail{display:grid;gap:.65rem}.drawer-detail>p{color:var(--muted);line-height:1.55}.drawer-sticky-actions{position:sticky;bottom:-1rem;margin:1rem -1rem -1rem;padding:.75rem 1rem calc(.75rem + env(safe-area-inset-bottom));background:linear-gradient(transparent,rgba(23,19,26,.98) 25%);display:flex;gap:.5rem}.drawer-sticky-actions>*{flex:1}
.ability-edit-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.55rem}.ability-edit-grid label{border:1px solid var(--line-soft);border-radius:11px;padding:.5rem;text-align:center}.ability-edit-grid label span{font-size:.67rem;text-transform:uppercase;letter-spacing:.08em}.ability-edit-grid input{text-align:center;font-size:1.1rem;font-weight:900}.check-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem}.check-row{display:flex!important;grid-template-columns:none!important;align-items:center;gap:.55rem!important;border:1px solid var(--line-soft);border-radius:10px;padding:.55rem .65rem!important;color:var(--text)!important;text-transform:none!important;letter-spacing:0!important}.check-row input{width:19px!important;min-height:19px!important;margin:0}.button-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem}.button-stack{display:grid;gap:.45rem}.big-number{font-size:2rem;font-weight:900;text-align:center}.danger-text{color:var(--danger)}.dice-help{border:1px dashed var(--line);border-radius:11px;padding:.65rem;color:var(--muted);font-size:.76rem}.notice.danger{border-color:#7b343c;background:#35191e;color:#ffd8db}.drawer-body fieldset{border:1px solid var(--line-soft);border-radius:12px;padding:.75rem}.drawer-body legend{padding:0 .35rem;color:var(--accent-2);font-size:.75rem;font-weight:800}.combat-card,.resource-card,.status-card,.senses-card,.skills-rail,.ability-card-group,.turn-tracker-card,.weapon-action-card{contain:layout paint}
@media(max-width:900px){.turn-flags{grid-template-columns:repeat(4,1fr)}.turn-flag{min-height:68px}.quick-roll-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.full-stat-table,.skill-table{overflow-x:auto}.stat-table-head,.stat-table-row{min-width:520px}.drawer-sticky-actions{bottom:-.85rem}.button-grid{grid-template-columns:1fr}.event-feed>div{grid-template-columns:1fr}.detail-list{grid-template-columns:1fr}.detail-list dt,.detail-list dd{border-top:1px solid var(--line-soft)!important}.detail-list dt:first-child{border-top:0!important}.ability-edit-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:420px){.turn-flags{grid-template-columns:repeat(2,1fr)}.ability-edit-grid{grid-template-columns:repeat(2,1fr)}.check-grid{grid-template-columns:1fr}.quick-roll-grid{grid-template-columns:1fr 1fr}}
.skill-table{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:0}.skill-table button{min-height:42px;border:0;border-top:1px solid var(--line-soft);background:transparent;color:var(--text);display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.5rem .65rem;text-align:left;cursor:pointer}.skill-table button:hover{background:rgba(255,255,255,.035)}.skill-table button span{font-size:.78rem}.skill-table button small{color:var(--muted)}.skill-table button strong{font-size:.92rem}.roll-link{border:0!important;background:transparent!important;color:var(--accent-2)!important;text-align:center!important;cursor:pointer}

/* Standard 5e essentials: inspiration, currency, attunement, and weapon proficiency. */
.inspiration-pill{appearance:none;cursor:pointer;color:var(--muted);font-family:inherit}.inspiration-pill:hover,.inspiration-pill:focus-visible{border-color:var(--accent-2);color:var(--text);outline:none}.inspiration-pill.active{box-shadow:0 0 0 2px rgba(102,193,140,.12)}
.currency-card{background:linear-gradient(145deg,rgba(45,35,28,.97),rgba(24,19,23,.98))}.currency-grid{display:grid;grid-template-columns:repeat(5,minmax(72px,1fr));gap:.55rem}.coin-card{min-height:72px;border:1px solid var(--line);border-radius:12px;background:rgba(8,7,9,.4);display:grid;place-items:center;align-content:center;gap:.2rem;padding:.55rem}.coin-card span{font-size:.66rem;letter-spacing:.12em;color:var(--muted);font-weight:900}.coin-card strong{font-size:1.25rem}.coin-card.cp{border-color:#754b39}.coin-card.sp{border-color:#72727a}.coin-card.ep{border-color:#6c7981}.coin-card.gp{border-color:#8c6f32}.coin-card.pp{border-color:#526f72}.currency-edit-grid{display:grid;grid-template-columns:repeat(5,minmax(68px,1fr));gap:.55rem}.currency-edit-grid label{text-align:center}.currency-edit-grid input{text-align:center;font-weight:900;font-size:1.05rem}.warning-text{color:var(--warn);font-weight:800}
@media(max-width:700px){.currency-grid,.currency-edit-grid{grid-template-columns:repeat(5,minmax(54px,1fr));gap:.35rem}.coin-card{min-height:62px;padding:.4rem}.coin-card strong{font-size:1.05rem}.currency-edit-grid label{font-size:.65rem}}
@media(max-width:390px){.currency-grid{grid-template-columns:repeat(3,1fr)}.currency-edit-grid{grid-template-columns:repeat(3,1fr)}}


/* Unified sheet owns the only visible Dice launcher. The tray creates its legacy tab only on older pages. */
body[data-page="unified-sheet"] .sbDiceTab{display:none!important}

/* Phase 9A.4 Floating Dice Tray - visible right-side launcher */
.sbDiceTray {
  position: fixed;
  top: 50%;
  right: 16px;
  z-index: 2147483000;
  transform: translateY(-50%);
  pointer-events: none;
}

.sb-splash-lock .sbDiceTray {
  display: none;
}

.sbDiceTab {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-width: 82px;
  min-height: 44px;
  background: linear-gradient(180deg, rgba(40, 31, 55, .98), rgba(9, 9, 13, .98));
  color: var(--text);
  border: 1px solid rgba(216, 187, 114, .72);
  border-radius: 999px;
  padding: 10px 14px;
  letter-spacing: .10em;
  text-transform: uppercase;
  cursor: pointer;
  pointer-events: auto;
  box-shadow: 0 12px 34px rgba(0, 0, 0, .65), 0 0 0 2px rgba(216, 187, 114, .10);
}

.sbDiceTab::before {
  content: "🎲";
  letter-spacing: 0;
}

.sbDiceTab:hover {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(216, 187, 114, .18), 0 12px 34px rgba(0, 0, 0, .65);
}

.sbDicePanel {
  position: absolute;
  right: -16px;
  top: 50%;
  width: min(380px, calc(100vw - 54px));
  max-height: min(760px, calc(100vh - 34px));
  overflow: auto;
  transform: translate(calc(100% + 24px), -50%);
  transition: transform .28s ease, opacity .2s ease;
  pointer-events: auto;
  opacity: .98;
  background:
    radial-gradient(circle at 20% 0, rgba(184, 162, 255, .16), transparent 30%),
    linear-gradient(180deg, rgba(21, 19, 27, .98), rgba(9, 9, 13, .98));
  border: 1px solid rgba(216, 187, 114, .32);
  border-right: 0;
  border-radius: 24px 0 0 24px;
  box-shadow: 0 22px 70px rgba(0, 0, 0, .72);
  padding: 16px;
}

.sbDiceTray.open .sbDicePanel {
  transform: translate(0, -50%);
}

.sbDiceTray.open .sbDiceTab {
  display: none;
}

.sbDiceHead {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 10px;
}

.sbDiceHead h2 {
  margin: 0;
  font-size: 28px;
}

.sbDiceKicker,
.sbDiceHistoryTitle {
  color: var(--accent-2);
  font-size: 11px;
  letter-spacing: .18em;
  text-transform: uppercase;
}

.sbDiceClose {
  width: 34px;
  height: 34px;
  border-radius: 999px;
  border: 1px solid var(--line);
  background: rgba(0, 0, 0, .28);
  color: var(--text);
  cursor: pointer;
}

.sbDiceClose:hover {
  border-color: var(--accent);
}

.sbDiceStage {
  min-height: 175px;
  border: 1px solid rgba(184, 162, 255, .24);
  border-radius: 20px;
  background:
    radial-gradient(circle at 50% 10%, rgba(152, 231, 221, .10), transparent 45%),
    linear-gradient(180deg, rgba(0, 0, 0, .25), rgba(0, 0, 0, .45));
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 14px;
  perspective: 900px;
  overflow: hidden;
  position: relative;
}

.sbDiceStage::after {
  content: "";
  position: absolute;
  inset: auto 12% 12px;
  height: 22px;
  border-radius: 999px;
  background: radial-gradient(ellipse at center, rgba(0, 0, 0, .48), transparent 70%);
  opacity: .7;
}

.sbDiceStageHint {
  color: var(--muted);
  text-align: center;
  font-style: italic;
  z-index: 1;
}

.sbDiceRollScene {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 10px;
  z-index: 1;
}

.sbDie {
  width: 48px;
  height: 48px;
  display: grid;
  place-items: center;
  border: 1px solid rgba(248, 240, 228, .72);
  border-radius: 12px;
  background:
    radial-gradient(circle at 35% 25%, rgba(255, 255, 255, .92), rgba(216, 187, 114, .82) 26%, rgba(105, 84, 44, .92) 100%);
  color: #17111c;
  font-weight: 700;
  font-size: 20px;
  box-shadow:
    inset -9px -10px 18px rgba(0, 0, 0, .30),
    inset 7px 7px 16px rgba(255, 255, 255, .22),
    0 14px 28px rgba(0, 0, 0, .55);
  transform: rotateX(17deg) rotateY(-22deg) rotateZ(4deg);
  transform-style: preserve-3d;
}

.sbDie::before,
.sbDie::after {
  content: "";
  position: absolute;
  inset: 4px;
  border: 1px solid rgba(23, 17, 28, .2);
  border-radius: 9px;
  pointer-events: none;
}

.sbDie::after {
  inset: auto 8px 7px;
  height: 4px;
  border: 0;
  border-radius: 999px;
  background: rgba(23, 17, 28, .35);
}

.sbDie[data-sides="4"] { clip-path: polygon(50% 3%, 96% 92%, 4% 92%); border-radius: 6px; }
.sbDie[data-sides="8"] { clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%); border-radius: 8px; }
.sbDie[data-sides="10"],
.sbDie[data-sides="100"] { clip-path: polygon(50% 0, 92% 22%, 100% 70%, 50% 100%, 0 70%, 8% 22%); border-radius: 8px; }
.sbDie[data-sides="12"] { clip-path: polygon(50% 0, 91% 20%, 100% 62%, 72% 100%, 28% 100%, 0 62%, 9% 20%); border-radius: 10px; }
.sbDie[data-sides="20"] { clip-path: polygon(50% 0, 97% 30%, 82% 100%, 18% 100%, 3% 30%); border-radius: 9px; }

.sbDie.rolling {
  animation: sbDiceTumble .92s cubic-bezier(.17, .67, .22, 1.22) both;
}

@keyframes sbDiceTumble {
  0% {
    transform: translate3d(-32px, -54px, 80px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale(.82);
    filter: blur(.3px);
  }
  38% {
    transform: translate3d(26px, 12px, 30px) rotateX(260deg) rotateY(190deg) rotateZ(70deg) scale(1.08);
  }
  72% {
    transform: translate3d(-8px, -8px, 15px) rotateX(520deg) rotateY(390deg) rotateZ(145deg) scale(.96);
  }
  100% {
    transform: translate3d(0, 0, 0) rotateX(17deg) rotateY(-22deg) rotateZ(4deg) scale(1);
    filter: blur(0);
  }
}

.sbDiceStageTotal {
  z-index: 1;
  margin-top: 12px;
  color: var(--accent-2);
  letter-spacing: .12em;
  text-transform: uppercase;
  font-size: 12px;
}

.sbDiceForm {
  margin-top: 12px;
}

.sbDiceForm label {
  display: block;
  color: var(--muted);
  font-size: 11px;
  letter-spacing: .14em;
  text-transform: uppercase;
  margin-bottom: 6px;
}

.sbDiceInputRow {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 8px;
}

.sbDiceInputRow input,
.sbDiceInputRow button,
.sbDiceQuick button,
.sbDiceHistory button {
  border: 1px solid var(--line);
  background: rgba(0, 0, 0, .24);
  color: var(--text);
  border-radius: 999px;
  padding: 8px 11px;
}

.sbDiceInputRow button,
.sbDiceQuick button,
.sbDiceHistory button {
  cursor: pointer;
}

.sbDiceInputRow button:hover,
.sbDiceQuick button:hover,
.sbDiceHistory button:hover {
  border-color: var(--accent);
}

.sbDiceQuick {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 10px;
}

.sbDiceQuick button {
  font-size: 13px;
  padding: 6px 9px;
}

.sbDiceResult {
  margin-top: 12px;
  padding: 11px 12px;
  border-left: 3px solid var(--accent);
  border-radius: 10px;
  background: rgba(0, 0, 0, .18);
}

.sbDiceResult strong,
.sbDiceResult span {
  display: block;
}

.sbDiceResult span {
  color: var(--muted);
  font-size: 13px;
  margin-top: 4px;
  line-height: 1.35;
}

.sbDiceResult.error {
  border-left-color: var(--danger);
}

.sbDiceHistoryWrap {
  margin-top: 12px;
}

.sbDiceHistory {
  margin: 7px 0 0;
  padding-left: 19px;
  color: var(--muted);
}

.sbDiceHistory li {
  margin: 4px 0;
}

.sbDiceHistory button {
  width: 100%;
  text-align: left;
  border-radius: 12px;
  padding: 6px 8px;
  font-size: 13px;
}

@media (max-width: 760px) {
  .sbDiceTray {
    top: auto;
    right: 10px;
    bottom: 74px;
    transform: none;
  }

  .sbDiceTab {
    position: static;
    transform: none;
    min-width: 0;
    border: 1px solid rgba(216, 187, 114, .45);
    border-radius: 999px;
  }

  .sbDicePanel {
    position: fixed;
    left: 10px;
    right: 10px;
    bottom: 10px;
    width: auto;
    max-height: min(680px, calc(100vh - 30px));
    border: 1px solid rgba(216, 187, 114, .32);
    border-radius: 22px;
    transform: translateY(calc(100% + 22px));
  }

  .sbDiceTray.open .sbDicePanel {
    transform: translateY(0);
  }

  .sbDiceStage {
    min-height: 145px;
  }

  .sbDie {
    width: 42px;
    height: 42px;
    font-size: 18px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .sbDicePanel,
  .sbDie.rolling {
    animation: none;
    transition: none;
  }
}

/* Phase 9A.11 DiceBox real-canvas fix */
.sbDiceStage3d {
  height: 300px;
  min-height: 300px;
  padding: 0;
  isolation: isolate;
}

.sbDiceBoxCanvas {
  position: absolute;
  inset: 0;
  z-index: 1;
  width: 100%;
  height: 100%;
  min-height: 300px;
  overflow: hidden;
  border-radius: inherit;
}

.sbDiceBoxCanvas canvas,
.sbDiceBoxRealCanvas,
.dice-box-canvas {
  width: 100% !important;
  height: 100% !important;
  min-width: 100% !important;
  min-height: 100% !important;
  display: block !important;
  opacity: 1 !important;
  position: absolute !important;
  inset: 0 !important;
  z-index: 1 !important;
  pointer-events: none !important;
}

.sbDice3dOverlay {
  position: absolute;
  inset: 0;
  z-index: 2;
  display: grid;
  place-items: center;
  text-align: center;
  pointer-events: none;
  padding: 18px;
  background: radial-gradient(circle at center, rgba(8, 8, 12, .18), rgba(8, 8, 12, .42));
  transition: opacity .18s ease;
}

.sbDice3dOverlay strong,
.sbDice3dOverlay span {
  display: block;
}

.sbDice3dOverlay.hidden {
  opacity: 0;
  visibility: hidden;
}

@media (max-width: 760px) {
  .sbDiceStage3d,
  .sbDiceBoxCanvas {
    height: 250px;
    min-height: 250px;
  }
}



/* Unified sheet dice appearance controls. */
.sbDiceAppearance{display:grid;grid-template-columns:minmax(0,1fr) 52px;gap:.65rem;align-items:end;margin-top:.7rem}.sbDiceAppearance label{display:grid;gap:.3rem;color:var(--muted);font-size:.7rem;text-transform:uppercase;letter-spacing:.08em}.sbDiceAppearance select{width:100%;min-height:42px;border:1px solid var(--line);border-radius:10px;background:#0f0c11;color:var(--text);padding:.55rem .65rem}.sbDiceColour{width:52px!important;height:42px!important;min-height:42px!important;padding:3px!important;border-radius:10px!important;cursor:pointer}.sbDiceAppearanceHint{grid-column:1/-1;margin:0;color:var(--muted);font-size:.72rem;line-height:1.35}.sbDiceSwatch{width:10px;height:10px;border-radius:50%;display:inline-block;box-shadow:0 0 0 1px rgba(255,255,255,.35)}
@media(max-width:760px){.sbDicePanel{bottom:76px}.sbDiceTray{z-index:240}.sbDiceAppearance{grid-template-columns:minmax(0,1fr) 48px}}

/* B.2.M.9 canonical item source labels */
.field-source {
  display: inline-block;
  margin-left: 0.35rem;
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--muted, #b8afbd);
}
.field-source.override {
  color: var(--gold, #d8b45a);
}

/* B.2.M.12 executable Songbound state summaries */
.songbound-state-note {
  display: grid;
  gap: .25rem;
  margin: .55rem 0 .75rem;
  padding: .65rem .7rem;
  border: 1px solid var(--line-soft);
  border-radius: 10px;
  background: rgba(255,255,255,.025);
  font-size: .72rem;
  line-height: 1.4;
}
.songbound-state-note strong { color: var(--text); }
.songbound-state-note span { color: var(--muted); }
.songbound-state-note.state-1 { border-color: #72562f; background: rgba(184,132,47,.08); }
.songbound-state-note.state-2,
.songbound-state-note.state-3,
.songbound-state-note.state-4,
.songbound-state-note.state-5 { border-color: #743139; background: rgba(153,42,55,.1); }
.songbound-secondary-resources {
  display: grid;
  gap: .35rem;
  margin: .55rem 0 .75rem;
  padding-top: .55rem;
  border-top: 1px solid var(--line-soft);
}

/* B.2.M.13 final table-use polish and mobile Dice lifecycle. */
.sheet-menu-groups{display:grid;gap:1.15rem}.sheet-menu-groups section{display:grid;gap:.55rem}.sheet-menu-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.55rem}.sheet-menu-button{min-height:112px;border:1px solid var(--line);border-radius:13px;background:linear-gradient(145deg,var(--surface-2),var(--surface));color:var(--text);display:grid;align-content:center;justify-items:start;gap:.25rem;padding:.75rem;text-align:left;cursor:pointer}.sheet-menu-button:hover,.sheet-menu-button:focus-visible{border-color:var(--accent-2);outline:none}.sheet-menu-button>span{font-size:1.2rem;color:var(--accent-2)}.sheet-menu-button strong{font-size:.9rem}.sheet-menu-button small{color:var(--muted);font-size:.7rem;line-height:1.35}

.sbDicePanel{visibility:hidden;pointer-events:none}.sbDiceTray.open .sbDicePanel{visibility:visible;pointer-events:auto}.sbDiceBackdrop{display:none}.sbDiceCanvasHidden{display:none!important}.sbDiceStage.rolling{box-shadow:inset 0 0 0 1px rgba(216,187,114,.2)}

@media(max-width:900px){
  .mobile-bottom-nav{z-index:260;min-height:64px}
  .mobile-bottom-nav button{min-width:0;min-height:52px;border-radius:10px}
  .mobile-bottom-nav button:focus-visible{outline:2px solid var(--accent-2);outline-offset:-3px}
  .mobile-core-stats{grid-template-columns:repeat(3,minmax(0,1fr))}
  .mobile-stat-card{min-height:68px;cursor:pointer}
  .mobile-stat-card.hp{grid-column:span 2}
  .mobile-stat-card.status{grid-column:1/-1;min-height:54px;text-align:left;padding-inline:.85rem}
  .mobile-stat-card.status strong{font-size:.82rem;line-height:1.3}
  .sheet-menu-grid{grid-template-columns:1fr}
  .sheet-menu-button{min-height:78px;grid-template-columns:auto 1fr;column-gap:.7rem;align-items:center;align-content:center}
  .sheet-menu-button>span{grid-row:1/3;font-size:1.4rem}

  .sbDiceTray{top:0;right:0;bottom:0;left:0;z-index:240;transform:none;pointer-events:none}
  .sbDiceBackdrop{display:block;position:fixed;z-index:238;inset:0 0 calc(64px + env(safe-area-inset-bottom)) 0;background:rgba(0,0,0,.58);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s ease,visibility .18s ease;backdrop-filter:blur(2px)}
  .sbDiceTray.open .sbDiceBackdrop{opacity:1;visibility:visible;pointer-events:auto}
  .sbDicePanel{position:fixed;z-index:240;left:8px;right:8px;top:auto;bottom:calc(64px + env(safe-area-inset-bottom) + 8px);width:auto;max-height:calc(100dvh - var(--header-h) - 88px - env(safe-area-inset-bottom));overflow:auto;overscroll-behavior:contain;border:1px solid rgba(216,187,114,.38);border-radius:20px;transform:translateY(calc(100% + 96px));opacity:0;visibility:hidden;pointer-events:none;padding:14px 14px calc(14px + env(safe-area-inset-bottom));transition:transform .24s ease,opacity .18s ease,visibility .18s ease}
  .sbDiceTray.open .sbDicePanel{transform:translateY(0);opacity:1;visibility:visible;pointer-events:auto}
  .sbDiceClose{width:44px;height:44px;font-size:1.25rem;flex:0 0 auto}
  .sbDiceStage3d,.sbDiceBoxCanvas{height:210px;min-height:210px}
  .sbDiceForm input,.sbDiceForm button,.sbDiceContext select,.sbDiceAppearance select{min-height:44px}
  body.sb-dice-open{overflow:hidden;touch-action:none}
  body.sb-dice-open .sbDicePanel{touch-action:pan-y}
  body.sb-dice-open .dice-fab{opacity:0;visibility:hidden;pointer-events:none}
}

@media(max-width:420px){
  .sbDicePanel{left:4px;right:4px;padding-inline:11px}
  .sbDiceStage3d,.sbDiceBoxCanvas{height:185px;min-height:185px}
  .sbDiceContext{grid-template-columns:1fr}
}


/* B.2.M.13.1 mobile DiceBox containment. The physics world and WebGL canvas
   must use the same visible bounds as the mobile tray stage. */
.sbDiceStage3d,
.sbDiceBoxCanvas{
  contain:strict;
  overflow:hidden;
}
.sbDiceBoxCanvas{
  min-height:0;
  max-height:100%;
}
.sbDiceBoxCanvas canvas,
.sbDiceBoxRealCanvas,
.dice-box-canvas{
  max-width:100%!important;
  max-height:100%!important;
}

@media(max-width:900px){
  .sbDiceStage3d{
    width:100%;
    height:clamp(180px,50vw,210px);
    min-height:0;
    max-height:210px;
    overflow:hidden;
    clip-path:inset(0 round 18px);
  }
  .sbDiceBoxCanvas{
    inset:0;
    width:100%;
    height:100%;
    min-height:0;
    max-height:100%;
    overflow:hidden;
    clip-path:inset(0 round 18px);
  }
  .sbDiceBoxCanvas canvas,
  .sbDiceBoxRealCanvas,
  .dice-box-canvas{
    inset:0!important;
    width:100%!important;
    height:100%!important;
    min-width:0!important;
    min-height:0!important;
    max-width:100%!important;
    max-height:100%!important;
  }
}

@media(max-width:420px){
  .sbDiceStage3d{height:180px;max-height:180px}
}

@media(max-width:900px){.combat-session-banner{position:sticky;top:var(--header-h);z-index:190;justify-content:flex-start;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:.45rem .7rem;font-size:.78rem}.combat-session-banner .session-name{overflow:hidden;text-overflow:ellipsis}.combat-session-banner .session-pressure{margin-left:auto;flex:0 0 auto}}
@media print{.combat-session-banner{display:none!important}}

/* B.2.M.20 Character portraits */
.portrait-shell{position:relative;overflow:hidden;color:var(--text);cursor:pointer;padding:0}.portrait-shell:hover,.portrait-shell:focus-visible{box-shadow:0 0 0 3px rgba(214,171,103,.18)}.portrait-image{width:100%;height:100%;object-fit:cover;display:block}.portrait-image.hidden{display:none}.portrait-edit-mark{position:absolute;right:2px;bottom:2px;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:rgba(13,11,15,.9);border:1px solid var(--accent-2);font:700 12px/1 sans-serif}.portrait-shell:not(:hover):not(:focus-visible) .portrait-edit-mark{opacity:.72}.choice-avatar{overflow:hidden}.choice-avatar img{width:100%;height:100%;object-fit:cover;display:block}.portrait-preview{width:min(280px,70vw);aspect-ratio:1;border-radius:18px;object-fit:cover;border:1px solid var(--line);margin:0 auto 1rem;display:block}.portrait-dropzone{border:1px dashed var(--line);border-radius:14px;padding:1rem;text-align:center}.portrait-dropzone input{width:100%}
