:root{color-scheme:light;--navy:#111b2b;--navy2:#20324b;--gold:#c79745;--ink:#202c3e;--muted:#5d6877;--paper:#f3f5f8;--line:#d9dfe7;--blue:#235da4;--red:#a62b36;--amber:#82530c;--green:#226b54;--white:#fff;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:16px}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink)}button,input,select,textarea{font:inherit}button,a,input,select,textarea{touch-action:manipulation}button{cursor:pointer;border:1px solid var(--line);background:white;border-radius:7px;padding:.6rem .85rem;color:var(--ink);font-weight:600;font-size:.875rem;min-height:40px}button:hover{background:#eaf0f8;border-color:#abbad0}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--blue);border-color:var(--blue);color:white}button.primary:hover{background:#164d8d}button.quiet{background:transparent;border-color:transparent}button.danger{color:var(--red)}button.small{padding:.35rem .6rem;min-height:34px}a{color:var(--blue);text-underline-offset:3px}input,select,textarea{border:1px solid #b9c3d1;border-radius:6px;padding:.65rem .7rem;background:white;color:var(--ink);width:100%;min-height:42px}input[type=checkbox]{width:18px;min-height:18px;accent-color:var(--blue)}input[type=number]{font-variant-numeric:tabular-nums}textarea{resize:vertical;min-height:76px}label{display:block;font-size:.875rem;font-weight:600;margin-bottom:.4rem}:focus-visible{outline:3px solid #4c9ded;outline-offset:2px}h1,h2,h3,p{margin-top:0}h1{font-size:2rem;letter-spacing:-.055rem}h2{font-size:1.25rem}h3{font-size:1rem}p{line-height:1.6}small,.smalltext{font-size:.8125rem}.muted{color:var(--muted)}.mono,.points{font-variant-numeric:tabular-nums}.eyebrow{font-size:.75rem;font-weight:750;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}.topbar{background:var(--navy);color:white;display:flex;align-items:center;gap:2rem;padding:.8rem 1.5rem;min-height:72px;border-bottom:3px solid var(--gold)}.brand{display:flex;align-items:center;gap:.75rem;color:white;border:none;padding:0;background:transparent!important;text-align:left}.brand-mark{border:1px solid var(--gold);color:#efd299;display:grid;place-items:center;width:42px;height:42px;font-weight:800;font-size:.875rem;letter-spacing:-1px;border-radius:5px}.brand b{display:block;letter-spacing:.08em;font-size:.9rem}.brand small{color:#abb9cd;display:block;margin-top:3px;font-size:.75rem}.topnav{display:flex;gap:.3rem}.topnav button{border:0;background:transparent;color:#c7d1df}.topnav button.active{background:#2b3c55;color:#fff}.topbar .connection{margin-left:auto;font-size:.8125rem;color:#d4ddeb;white-space:nowrap}.shell{max-width:1350px;margin:0 auto;padding:2rem}.page-head{display:flex;justify-content:space-between;align-items:start;gap:1.5rem;margin-bottom:1.5rem}.page-head h1{margin:.35rem 0 .6rem}.page-head p{color:var(--muted);max-width:660px;margin-bottom:0}.actions{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.badge{font-size:.75rem;display:inline-flex;align-items:center;line-height:1.25;padding:.25rem .5rem;border-radius:4px;background:#e6ebf2;color:#43546c;font-weight:650}.badge.gold{background:#fff0d1;color:#795211}.badge.red{background:#fbe9eb;color:var(--red)}.badge.green{background:#e7f3ed;color:var(--green)}.searchbar{display:flex;gap:.75rem;margin:1.5rem 0}.searchbar input{max-width:460px}.faction-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.faction-card{background:white;border:1px solid var(--line);border-radius:10px;padding:1.35rem;position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:stretch;text-align:left;min-height:166px;transition:transform .12s,box-shadow .12s}.faction-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--card-accent,var(--gold))}.faction-card:hover{transform:translateY(-2px);box-shadow:0 6px 20px #15213b12;background:#fff}.faction-card .code{color:var(--muted);font-weight:700;letter-spacing:.1em;font-size:.75rem;margin-bottom:.9rem}.faction-card h2{margin:0 0 .7rem;font-size:1.15rem}.faction-card .card-bottom{display:flex;justify-content:space-between;align-items:center;gap:.5rem;margin-top:auto;color:var(--muted);font-size:.8125rem}.notice{border:1px solid #ddd0b5;border-left:3px solid var(--gold);background:#fffbf1;border-radius:6px;padding:.8rem 1rem;font-size:.875rem;line-height:1.5}.notice p:last-child{margin:0}.notice.compact{padding:.6rem .8rem}.notice.info{background:#edf4fc;border-color:#cbdced;border-left-color:var(--blue)}.setup-grid{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:1.5rem}.panel{background:white;border:1px solid var(--line);border-radius:10px;padding:1.4rem}.field{margin:1rem 0}.fields{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.preset{display:flex;gap:.5rem;margin-top:.5rem}.preset button{flex:1}.rule-intro{white-space:pre-wrap;font-size:.875rem;line-height:1.6;color:#414c5e;max-height:480px;overflow:auto}.build-top{padding:1rem 1.5rem;background:white;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:1rem;align-items:center}.build-top h1{font-size:1.35rem;margin:0 0 .3rem}.build-top .muted{font-size:.875rem}.point-total{text-align:right;white-space:nowrap}.point-total strong{font-size:1.7rem;letter-spacing:-.04em}.point-total span{color:var(--muted);font-size:.875rem}.budget-track{height:4px;background:#dee6f0}.budget-track i{display:block;height:100%;background:var(--gold);max-width:100%}.build-workspace{display:grid;grid-template-columns:minmax(240px,.85fr) minmax(275px,1fr) minmax(350px,1.3fr);height:calc(100vh - 207px);min-height:480px}.column{overflow:auto;padding:1.1rem;border-right:1px solid var(--line)}.catalog-column{background:#f6f8fb}.roster-column{background:#edf1f6}.editor-column{background:white;border:0}.column-title{display:flex;justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:1rem}.column-title h2{font-size:1rem;margin:0}.filter-row{display:grid;grid-template-columns:1fr 120px;gap:.5rem;margin-bottom:1rem}.filter-row input,.filter-row select{font-size:.875rem;min-width:0}.section-label{font-size:.75rem;letter-spacing:.09em;text-transform:uppercase;font-weight:750;color:#566579;margin:1.35rem 0 .65rem}.unit-card{display:flex;align-items:center;gap:.6rem;padding:.85rem;background:white;border:1px solid var(--line);border-radius:7px;margin-bottom:.5rem}.unit-card .unit-name{font-size:.875rem;font-weight:650;line-height:1.4}.unit-card .unit-meta{font-size:.75rem;color:var(--muted);margin-top:.25rem}.unit-card .add{margin-left:auto;flex:none;background:#e9f0f8;border:0;color:var(--blue);font-size:1.1rem;min-width:36px;padding:.2rem}.roster-card{display:block;width:100%;text-align:left;margin-bottom:.6rem;padding:.9rem;font-weight:400;border-left:3px solid #a7b5c8}.roster-card.selected{border:1px solid var(--blue);border-left:3px solid var(--blue);background:#f7faff}.roster-card .row{display:flex;justify-content:space-between;gap:.5rem;align-items:start}.roster-card strong{font-size:.9rem}.roster-card .mini{font-size:.75rem;color:var(--muted);margin-top:.5rem;line-height:1.5}.empty{padding:2.5rem 1rem;text-align:center;color:var(--muted)}.empty .empty-symbol{font-size:2rem;color:#9ba9be;margin-bottom:1rem}.empty h2{color:var(--ink);font-size:1.1rem}.empty p{font-size:.9rem}.slot-bar{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:.85rem}.slot{font-size:.75rem;padding:.3rem .45rem;border:1px solid #ccd6e3;border-radius:4px;background:white}.slot.error{background:#fff2ef;color:#9b3430;border-color:#e7b9b1}.validation{margin:1rem 0;border:1px solid var(--line);border-radius:6px;background:white}.validation summary{padding:.75rem;font-weight:650;font-size:.875rem;cursor:pointer}.validation ul{margin:0;padding:.25rem 1rem .85rem 1.8rem;font-size:.8125rem;line-height:1.5}.validation li{margin:.4rem 0}.validation .review-item{color:var(--amber)}.editor-head{display:flex;align-items:start;justify-content:space-between;gap:1rem;margin-bottom:.6rem}.editor-head h2{font-size:1.3rem;margin:.35rem 0}.editor-head .points{font-weight:750;font-size:1.2rem;padding-top:.4rem}.editor-tabs{display:flex;border-bottom:1px solid var(--line);gap:.25rem;margin:1rem 0}.editor-tabs button{border:none;border-radius:0;background:white;color:var(--muted);padding:.7rem .6rem}.editor-tabs button.active{border-bottom:3px solid var(--blue);color:var(--blue)}.check-label{display:flex;gap:.6rem;align-items:start;line-height:1.5;cursor:pointer;font-weight:500}.check-label input{margin-top:3px;flex:none}.table-wrap{overflow-x:auto;margin:.8rem 0}table{border-collapse:collapse;width:100%;font-size:.8125rem}th{text-align:left;font-weight:650;background:#edf1f6;white-space:nowrap;color:#4c5c72}th,td{padding:.5rem;border-bottom:1px solid var(--line);vertical-align:top}td{line-height:1.45}td:first-child{font-weight:600}details.source{border-top:1px solid var(--line);margin:.7rem 0;padding:.65rem 0}details.source summary{font-size:.875rem;font-weight:650;cursor:pointer}.source-text{white-space:pre-wrap;font-size:.875rem;line-height:1.6;color:#465369;margin:.75rem 0;overflow-wrap:anywhere}.option-group{margin-top:1.1rem}.option-group h3{font-size:.8125rem;letter-spacing:.04em;background:#edf1f6;padding:.55rem;border-radius:4px;margin:0}.option-row{display:grid;grid-template-columns:1fr 62px;align-items:center;gap:.5rem;padding:.7rem .25rem;border-bottom:1px solid #e8edf3}.option-row label{margin:0;font-size:.875rem;font-weight:500}.option-row small{display:block;color:var(--muted);font-size:.75rem;margin-top:.2rem}.option-row input{padding:.45rem .35rem;text-align:center;font-size:.875rem}.option-row.disabled{opacity:.5}.selected-cost{color:var(--blue);font-weight:650}.manual-row{display:flex;justify-content:space-between;gap:.5rem;font-size:.875rem;align-items:center;margin:.5rem 0}.editor-bottom{border-top:1px solid var(--line);margin-top:1.2rem;padding-top:1rem;display:flex;justify-content:space-between}.mobile-tabs{display:none}.saved-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.saved-card{padding:1.3rem;background:white;border:1px solid var(--line);border-radius:9px}.saved-card h2{font-size:1.15rem;margin-bottom:.4rem}.saved-card .actions{margin-top:1rem}.library-row{display:flex;justify-content:space-between;gap:1rem;align-items:center;padding:1rem 0;border-bottom:1px solid var(--line)}.library-row h3{margin:0 0 .3rem}.library-row .muted{font-size:.8125rem}.footer-note{margin-top:2rem;color:var(--muted);font-size:.8125rem;line-height:1.6}.loading{padding:5rem;text-align:center}#toast{position:fixed;bottom:1.2rem;left:50%;transform:translateX(-50%);background:var(--navy);color:white;padding:.75rem 1.25rem;border-radius:8px;max-width:90vw;z-index:20;box-shadow:0 4px 20px #0003;display:none;font-size:.875rem}#toast.show{display:block}dialog{border:1px solid var(--line);border-radius:12px;padding:1.5rem;max-width:550px;width:calc(100% - 2rem);box-shadow:0 20px 80px #0004;color:var(--ink)}dialog::backdrop{background:#0a152980}dialog .actions{justify-content:flex-end;margin-top:1.2rem}.dialog-head{display:flex;align-items:start;justify-content:space-between;gap:1rem}.dialog-head h2{margin:.25rem 0 1rem}.print-roster{display:none}.print-card{break-inside:avoid;border:1px solid #bbb;margin:1rem 0;padding:1rem}.print-card h2{font-size:1rem}.print-card .source-text{font-size:10px}.print-rules{font-size:11px}.print-summary{font-size:12px}.print-card table{font-size:10px}.print-card th,.print-card td{padding:4px}.print-card .source-text{columns:2;column-gap:1.5rem}.print-card .source-text p{margin:0}.print-mode .print-roster{display:block;background:white;padding:1.5rem}.print-mode .topbar,.print-mode .shell,.print-mode .build-top,.print-mode .build-workspace,.print-mode .budget-track,.print-mode .mobile-tabs{display:none}.print-toolbar{display:flex;gap:.5rem;margin-bottom:1rem}.print-title{display:flex;justify-content:space-between;align-items:start;border-bottom:3px solid var(--navy);padding-bottom:1rem}
@media(min-width:1550px){.build-workspace{grid-template-columns:1fr 1fr 1.25fr}.column{padding:1.3rem 1.5rem}}
@media(max-width:1100px){.build-workspace{grid-template-columns:minmax(200px,.8fr) minmax(230px,1fr) minmax(300px,1.15fr)}.column{padding:.75rem}.topbar{gap:1rem}.filter-row{grid-template-columns:1fr}.build-top{padding:.8rem 1rem}.build-top .actions{gap:.25rem}.build-top button{padding:.5rem .6rem}.faction-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:820px){.topbar{padding:.65rem .85rem;flex-wrap:wrap;gap:.65rem;min-height:65px}.brand b{font-size:.8rem}.brand small{font-size:.7rem}.brand-mark{width:34px;height:34px}.topnav{margin-left:auto}.topnav button{font-size:.8125rem;padding:.4rem .5rem}.topbar .connection{display:none}.shell{padding:1.2rem}.page-head{flex-direction:column;gap:1rem}.page-head h1{font-size:1.7rem}.setup-grid{grid-template-columns:1fr}.build-top{flex-wrap:wrap;gap:.65rem}.build-top .actions{width:100%;order:3}.build-top h1{font-size:1.1rem}.point-total strong{font-size:1.35rem}.build-workspace{display:block;height:auto;min-height:calc(100vh - 240px)}.column{display:none;overflow:visible;min-height:calc(100vh - 260px);padding:1rem;border-right:0}.column.mobile-active{display:block}.mobile-tabs{display:flex;background:white;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:3}.mobile-tabs button{flex:1;border:0;border-radius:0;padding:.75rem}.mobile-tabs button.active{color:var(--blue);border-bottom:3px solid var(--blue)}.filter-row{grid-template-columns:1fr 120px}.saved-grid{grid-template-columns:1fr}.faction-card{padding:1rem;min-height:155px}.card-bottom{flex-wrap:wrap}.fields{gap:.65rem}.source-text{font-size:.875rem}.print-title{display:block}.library-row{align-items:start;flex-wrap:wrap}}
@media(max-width:440px){.brand small{display:none}.brand-mark{display:none}.topbar{gap:.2rem}.topnav button{padding:.4rem}.faction-grid{grid-template-columns:1fr}.faction-card{min-height:135px}.fields{grid-template-columns:1fr}.build-top .actions button{font-size:.8125rem}.page-head h1{font-size:1.5rem}}
@media print{@page{size:auto;margin:12mm}body{background:white;color:#111;font-size:11px}#app>*:not(.print-roster),dialog,#toast,.print-toolbar{display:none!important}.print-roster{display:block!important;padding:0!important}.print-card{box-shadow:none;border:1px solid #999;border-radius:0;padding:8px;margin:10px 0}.print-title{display:flex}.print-card a{color:black;text-decoration:none}.print-card table{width:100%}h1{font-size:20px}.print-summary{font-size:11px}.print-card h2{font-size:14px;margin-bottom:7px}.print-card .source-text{white-space:pre-wrap;columns:2;color:#111}th{background:#eee!important;print-color-adjust:exact}.badge{border:1px solid #bbb}.table-wrap{overflow:visible}footer{font-size:9px}}

[hidden]{display:none!important}
/* v0.2: profiles and active equipment stay in context. */
.roster-card{padding:.65rem;cursor:default}.roster-select{display:flex;justify-content:space-between;gap:.6rem;width:100%;text-align:left;padding:.3rem .15rem .65rem;border:0;background:transparent;font-size:.9rem}.roster-select:hover{background:transparent;color:var(--blue)}.roster-card .mini{margin:.55rem .2rem 0}.compact-stats table{font-size:.66rem;min-width:350px}.compact-stats td,.compact-stats th{padding:6px 3px;text-align:center}.compact-stats td:first-child,.compact-stats th:first-child{text-align:left;white-space:nowrap}.modified-stat{color:#c22b36!important;font-weight:750}.stat-key{font-size:.72rem;color:var(--muted);margin:.5rem 0 0}.roster-gear{line-height:1.6}.equipment-sections>h3{margin:1.2rem 0 .7rem}.equipment-section{margin:.6rem 0;border:1px solid var(--line);border-radius:7px;overflow:hidden}.equipment-section>summary{cursor:pointer;padding:.8rem;background:#eef2f7;font-weight:650;font-size:.85rem;line-height:1.5}.equipment-section>summary small{display:block;padding-left:1rem;color:var(--muted);font-weight:400}.equipment-section>.option-row{padding:.7rem .8rem;margin:0;gap:.75rem}.option-description{min-width:0;flex:1;font-size:.875rem;line-height:1.5}.option-description small,.keep-option small{display:block;font-size:.74rem;color:var(--muted);font-weight:400}.option-controls{display:flex;align-items:center;gap:.55rem;flex:none}.option-controls input[type=number]{width:64px;min-height:36px;padding:.3rem}.option-controls input[type=radio],.option-controls input[type=checkbox],.keep-option input{width:18px;height:18px;min-height:18px;margin:0;accent-color:var(--blue)}.keep-option{font-weight:400;font-size:.875rem}.keep-option input{flex:none}.equipment-section>p{padding:.7rem .8rem;margin:0}.rule-link{padding:0;border:0;min-height:0;border-radius:0;background:none;text-align:left;color:var(--blue);font-size:inherit;font-weight:500;text-decoration:underline dotted;text-underline-offset:3px;line-height:inherit}.rule-link:hover{background:none;color:#173e72}.gear-tags{display:flex;gap:.45rem 1rem;flex-wrap:wrap;margin:.6rem 0;font-size:.83rem}.active-wargear{margin:1.2rem 0}.active-wargear h3{font-size:.8rem;margin:1rem 0 .4rem}.active-wargear table{font-size:.76rem}.active-wargear th,.active-wargear td{padding:7px 5px}.reference-list{font-size:.85rem;line-height:1.6;margin:.6rem 0}.reference-list dt{font-weight:750;margin-top:.8rem}.reference-list dd{margin:0;white-space:pre-line}.ref-source{display:block;font-size:.7rem;color:var(--muted);margin-top:.25rem}.loadout-warnings{font-size:.78rem;color:var(--amber);padding-left:1rem;line-height:1.6}#rule-tooltip{position:fixed;z-index:100;width:min(350px,calc(100vw - 20px));max-height:50vh;overflow:auto;background:#17243a;color:white;border:1px solid #60728b;box-shadow:0 8px 24px #0003;padding:.85rem 1rem;border-radius:8px;font-size:.8rem;line-height:1.6;pointer-events:none}#rule-tooltip p{margin:.35rem 0;white-space:pre-line}#rule-tooltip small{color:#c5d1e2}.print-card .active-wargear{border:0;padding:0}.print-card .reference-list{font-size:11px}.print-card .active-wargear h3{font-size:12px}.print-card .source-text{columns:1}.print-card .rule-link{color:inherit}.print-rules h3{margin-top:1rem}.faction-reference{border-bottom:1px solid var(--line);padding:1rem 0}.print-card{break-inside:auto}.print-card table{break-inside:auto}tr{break-inside:avoid}.print-card h2,.print-card h3,dt{break-after:avoid}.print-roster .rule-link{text-decoration:none}
@media(min-width:1101px){.build-workspace{grid-template-columns:minmax(240px,.75fr) minmax(390px,1.15fr) minmax(440px,1.4fr)}}
@media(max-width:1100px) and (min-width:821px){.build-workspace{grid-template-columns:minmax(200px,.75fr) minmax(280px,1fr) minmax(340px,1.2fr)}}
@media print{#rule-tooltip,.stat-key{display:none!important}.print-card .reference-list{columns:2;column-gap:6mm}.print-card .reference-list dt,.print-card .reference-list dd{break-inside:avoid}.print-card .reference-list dd{margin-bottom:2mm}.print-card .active-wargear>summary{font-weight:700}.print-card .table-wrap{overflow:visible}.modified-stat{print-color-adjust:exact}.print-card .active-wargear table{font-size:10px}.print-card details>summary{list-style:none}.print-card .gear-tags{font-size:10px}.ref-source{font-size:8px}}

.weapon-profile-note{display:block;white-space:normal;max-width:30rem;color:var(--muted);font-weight:400;margin-top:.25rem;line-height:1.4}

.rules-access{display:flex;align-items:center;justify-content:space-between;gap:2rem;margin-bottom:1.25rem;border-left:4px solid var(--gold)}
.rules-access h2{margin:.35rem 0 .5rem}.rules-access p{margin-bottom:.65rem}.rules-access .actions{flex-wrap:wrap}
.rulebook-download{flex-shrink:0;max-width:28rem}.rulebook-download>small{display:block;color:var(--muted);margin-top:.5rem}.download-status{font-size:.8125rem;margin:.4rem 0 0;overflow-wrap:anywhere}.download-status:empty{display:none}
.button-link{display:inline-block;border-radius:7px;padding:.6rem .85rem;font-weight:600;font-size:.875rem;text-decoration:none}.button-link.primary{background:var(--blue);color:white}.button-link:hover{filter:brightness(.9)}
.pdf-actions{flex-wrap:wrap;flex-shrink:0}.offline-rulebooks{margin-bottom:1rem}.offline-rulebooks p{margin:.5rem 0 0}
@media(max-width:760px){.rules-access{align-items:stretch;flex-direction:column;gap:1rem}.rulebook-download{max-width:100%}.library-row{flex-wrap:wrap}.pdf-actions{gap:1rem}}
