@font-face{font-family:Special Elite VB;src:url(../fonts/SpecialElite.woff2)format("woff2");font-display:swap;ascent-override:84%;descent-override:18%;line-gap-override:0%}:root{--bg:#fff;--bg-panel:#fff;--bg-input:#f4f4f2;--border:#111;--text:#111;--text-dim:#555;--accent:#111;--accent-bright:#000;--red:#7a1f1f;--red-bright:#a92222;--green:#1f5e2a;--font-heading:"Black Ops One", "Arial Narrow", sans-serif;--font-body:"Special Elite VB", "Courier New", monospace}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--text);font-family:var(--font-body);margin:0;padding:0;font-size:14px}#app{max-width:620px;min-height:100vh;margin:0 auto;padding:.75rem}h1,h2,h3{font-family:var(--font-heading);letter-spacing:.03em;text-transform:uppercase;color:#000;margin:0 0 .5rem;font-weight:400}h1{border-bottom:3px solid #000;padding-bottom:.4rem;font-size:1.3rem}h2{font-size:.95rem}.tabs{gap:.25rem;margin-bottom:.75rem;display:flex}.tab-btn{color:var(--text-dim);cursor:pointer;font-family:var(--font-heading);text-transform:uppercase;letter-spacing:.04em;background:#fff;border:2px solid #000;flex:1;padding:.5rem .25rem;font-size:.7rem}.tab-btn.active{color:#fff;background:#000}.gm-slot-bar{gap:.25rem;margin-bottom:.5rem;display:flex}.gm-slot-btn{color:var(--text-dim);cursor:pointer;font-family:var(--font-heading);text-align:center;background:#fff;border:2px solid #000;flex:1;padding:.3rem .15rem}.gm-slot-btn.active{color:#fff;background:#000}.gm-slot-btn-num{font-size:.85rem}.gm-slot-btn-name{font-family:var(--font-body);text-transform:none;letter-spacing:0;white-space:nowrap;text-overflow:ellipsis;margin-top:.1rem;font-size:.55rem;overflow:hidden}.panel{background:#fff;border:2px solid #000;border-radius:0;margin-bottom:.75rem;padding:.75rem}.name-row{align-items:stretch;gap:.4rem;margin-bottom:.5rem;display:flex}.name-row input[type=text]{flex:1;margin-bottom:0}.attr-grid{grid-template-columns:repeat(7,1fr);gap:.3rem;margin-bottom:.5rem;display:grid}.attr-box{background:var(--bg-input);text-align:center;border:1px solid #000;border-radius:0;padding:.15rem .05rem}.attr-box.compact{flex:0 0 3.4rem;padding:.15rem .05rem}.attr-box.rollable input:disabled{pointer-events:none}.sav-mod-input{text-align:center;width:100%;margin-top:.1rem;padding:.05rem;font-size:.65rem;margin-bottom:0!important}.sav-override-row{color:var(--text-dim);cursor:pointer;justify-content:center;align-items:center;gap:.15rem;margin-top:.1rem;font-size:.55rem;display:flex}.sav-override-row input{width:auto;height:.65rem;margin:0}.attr-sub-note{color:var(--text-dim);margin-top:-.1rem;font-size:.55rem}.effects-box{border-top:1px dashed #000;margin-top:.35rem;padding-top:.35rem}.effects-box label{text-transform:none;font-family:var(--font-body);font-size:.72rem}.attr-box.rollable{cursor:pointer}.attr-box.rollable:hover{background:#e8e8e5}.attr-box .attr-label{font-family:var(--font-heading);color:var(--text-dim);text-transform:uppercase;letter-spacing:.04em;font-size:.55rem}.attr-box input{color:#000;width:100%;font-family:var(--font-body);text-align:center;background:0 0;border:none;font-size:.85rem}.attr-box input:focus{outline:none}.attr-box input:disabled{color:#000;-webkit-text-fill-color:#000;opacity:1}label{font-family:var(--font-heading);color:var(--text-dim);text-transform:uppercase;letter-spacing:.03em;margin-bottom:.15rem;font-size:.62rem;display:block}input[type=text],input[type=number],textarea,select{background:var(--bg-input);width:100%;color:var(--text);font-family:var(--font-body);border:1px solid #000;border-radius:0;margin-bottom:.5rem;padding:.35rem;font-size:.85rem}input[type=number]{-moz-appearance:textfield}input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input:disabled,textarea:disabled,select:disabled{color:#000;opacity:1;-webkit-text-fill-color:#000;background:#fff;border-color:#888}textarea{resize:vertical;min-height:3rem}.field-row{grid-template-columns:1fr 1fr;gap:.5rem;display:grid}.weapon-row{grid-template-columns:1fr 3.2rem 4.4rem 4.2rem 3.2rem 3.6rem 3.8rem;align-items:center;gap:.25rem;margin-bottom:.35rem;font-size:.75rem;display:grid}.weapon-row input,.weapon-row select{width:100%;min-width:0;margin-bottom:0;padding:.25rem;font-size:.75rem}.weapon-row select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5' viewBox='0 0 8 5'%3E%3Cpath d='M0 0h8L4 5z' fill='%23111'/%3E%3C/svg%3E");background-position:right .3rem center;background-repeat:no-repeat;background-size:.5rem;padding-right:.95rem}.weapon-row select:disabled{background-image:none;padding-right:.25rem}.weapon-row .actions-cell{gap:.15rem;min-width:0;display:flex}.weapon-row .actions-cell .btn{flex:1;min-width:0;padding-left:.2rem;padding-right:.2rem}.roster-member{border:1px solid #000;margin-bottom:.4rem}.roster-member-header{cursor:pointer;width:100%;font-family:var(--font-body);text-align:left;background:#fff;border:none;align-items:center;gap:.5rem;padding:.5rem;font-size:.85rem;display:flex}.roster-member-header:hover{background:var(--bg-input)}.roster-color-swatch{border:1px solid #000;flex-shrink:0;width:.8rem;height:.8rem}.roster-member-label{flex:1}.roster-chevron{font-size:.7rem}.roster-detail{border-top:1px solid #000;padding:.5rem .6rem;font-size:.8rem}.roster-attr-row{flex-wrap:wrap;gap:.3rem;margin:.3rem 0 .5rem;display:flex}.roster-attr-cell{text-align:center;border:1px solid #000;min-width:2.4rem;padding:.2rem .4rem}.roster-attr-cell-label{font-family:var(--font-heading);color:var(--text-dim);font-size:.55rem}.roster-field{margin-bottom:.35rem}.roster-field-label{font-family:var(--font-heading);color:var(--text-dim);text-transform:uppercase;margin-right:.4rem;font-size:.62rem}.roster-section-label{font-family:var(--font-heading);text-transform:uppercase;border-bottom:1px solid #000;margin:.5rem 0 .25rem;font-size:.68rem}.roster-line{margin-bottom:.25rem;line-height:1.35}.weapon-block{border-bottom:1px solid #000;margin-bottom:.4rem;padding-bottom:.4rem}.weapon-block:last-child{border-bottom:none}.traits-row{align-items:center;gap:.4rem;margin-top:.3rem;display:flex}.traits-row label{white-space:nowrap;margin-bottom:0}.traits-row input{flex:1;margin-bottom:0}.weapon-combat-row{align-items:center;gap:.4rem;margin-top:.3rem;display:flex}.weapon-combat-row .meta{flex:1}.weapon-combat-row input{width:3.2rem;margin-bottom:0}.modifiers-box{border:1px dashed #000;margin-top:.3rem;padding:.3rem}.modifier-check{text-transform:none;font-size:.75rem;font-family:var(--font-body);align-items:center;gap:.3rem;margin-bottom:.2rem;display:flex}.modifier-check input{width:auto;margin-bottom:0}.catalog-box{border-top:1px dashed #000;margin-top:.4rem;padding-top:.4rem}.catalog-results{border:1px solid #000;max-height:12rem;overflow-y:auto}.catalog-result-row{border-bottom:1px solid #ccc;justify-content:space-between;align-items:center;gap:.4rem;padding:.3rem .4rem;font-size:.78rem;display:flex}.catalog-result-row:last-child{border-bottom:none}.list-item{border:1px solid #000;margin-bottom:.4rem;padding:.4rem}.list-item-top{align-items:center;gap:.3rem;display:flex}.list-item-top input{margin-bottom:0}.list-item-name{flex:30%;min-width:5rem}.list-item-desc{flex:2 45%;min-width:6rem}.list-item-qty{flex:0 0 3rem;width:3rem}.direction-wheel-wrap{justify-content:center;margin:.25rem 0 .5rem;display:flex}.direction-wheel-svg{width:100%;max-width:260px}.direction-wheel-result{text-align:center;font-family:var(--font-heading);text-transform:uppercase;letter-spacing:.03em;margin-bottom:.5rem;font-size:1rem}.wargear-equip-row{text-transform:uppercase;letter-spacing:.02em;color:var(--text-dim);cursor:pointer;align-items:center;gap:.35rem;margin-top:.3rem;font-size:.78rem;display:flex}.wargear-equip-row input{width:auto;margin:0}.btn{color:#fff;cursor:pointer;font-family:var(--font-heading);text-transform:uppercase;letter-spacing:.03em;background:#000;border:2px solid #000;border-radius:0;padding:.4rem .7rem;font-size:.75rem}.btn:hover{background:#333}.btn.secondary{color:#000;background:#fff;border:2px solid #000}.btn.secondary:hover{background:#f0f0f0}.btn.danger{color:var(--red-bright);border:2px solid var(--red-bright);background:#fff}.btn.small{padding:.2rem .4rem;font-size:.65rem}.table-btn-grid{grid-template-columns:1fr 1fr;gap:.4rem;display:grid}.dice-btn-grid{grid-template-columns:repeat(4,1fr);gap:.4rem;margin-bottom:.6rem;display:grid}.dice-pool{background:var(--bg-input);border:2px solid #000;flex-wrap:wrap;gap:.35rem;min-height:2rem;margin-bottom:.6rem;padding:.4rem;display:flex}.dice-pool-chip{color:#fff;cursor:pointer;font-family:var(--font-heading);text-transform:uppercase;letter-spacing:.03em;background:#000;border:2px solid #000;border-radius:0;padding:.25rem .5rem;font-size:.7rem}.dice-pool-chip:hover{background:var(--red-bright);border-color:var(--red-bright)}.dice-action-row{gap:.4rem;display:flex}.dice-action-row .btn{flex:1}.token-pool{background:var(--bg-input);border:2px solid #000;flex-wrap:wrap;gap:.4rem;min-height:2.6rem;margin-bottom:.3rem;padding:.5rem;display:flex}.token-chip{cursor:pointer;background:#fff;border:2px solid #000;border-radius:0;justify-content:center;align-items:center;width:2.6rem;height:2.6rem;padding:2px;display:flex}.token-chip img{object-fit:contain;width:100%;height:100%}.token-chip:not(:disabled):hover{background:var(--bg-input)}.token-chip:disabled{cursor:default;opacity:.45}.log-entry{border-bottom:1px solid #000;padding:.4rem 0;font-size:.78rem}.log-entry:last-child{border-bottom:none}.log-entry .meta{color:var(--text-dim);font-size:.68rem}.log-outcome{font-family:var(--font-heading);text-transform:uppercase;border:1px solid #000;padding:.05rem .35rem;font-size:.62rem}.log-outcome.success{color:var(--green);border-color:var(--green);background:#fff}.log-outcome.fail{color:var(--red-bright);border-color:var(--red-bright);background:#fff}.log-outcome.crit-success{color:#fff;background:#000}.log-outcome.crit-fail{background:var(--red-bright);color:#fff;border-color:var(--red-bright)}.log-outcome.info{color:#000;background:#fff}.toast-overlay{z-index:50;opacity:0;pointer-events:none;transition:opacity .4s,transform .4s;position:fixed;top:1rem;left:50%;transform:translate(-50%)translateY(-10px)}.toast-overlay.visible{opacity:1;transform:translate(-50%)translateY(0)}.result-card{text-align:center;background:#fff;border:3px solid #000;width:88vw;max-width:300px;padding:.9rem 1.1rem;box-shadow:4px 4px #000}.result-card .result-player{font-family:var(--font-heading);text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim);margin-bottom:.2rem;font-size:.62rem}.result-card h2{margin-bottom:.3rem}.result-card .outcome-banner{font-family:var(--font-heading);text-transform:uppercase;letter-spacing:.04em;margin-bottom:.4rem;font-size:1.2rem}.result-card .outcome-banner.success{color:var(--green)}.result-card .outcome-banner.fail{color:var(--red-bright)}.result-card .outcome-banner.crit-success{color:#000}.result-card .outcome-banner.crit-fail{color:var(--red-bright)}.result-card .outcome-banner.info{color:#000}.result-card .dice-values{color:#000;margin-bottom:.3rem;font-size:1.05rem}.result-card .result-desc{color:var(--text-dim);font-size:.8rem}.empty-state{color:var(--text-dim);text-align:center;padding:1rem 0;font-size:.8rem}.role-badge{font-family:var(--font-heading);color:#000;text-transform:uppercase;vertical-align:middle;border:1px solid #000;margin-left:.5rem;padding:.1rem .4rem;font-size:.6rem;display:inline-block}
