.shell{background:var(--bg);height:100%;display:flex}.sidebar{background:var(--surface);border-right:1px solid var(--border);flex-direction:column;flex:none;width:176px;padding:10px 8px;display:flex}.brand{color:inherit;padding:0 4px;text-decoration:none;display:block}.brand-name{align-items:center;gap:4px;font-size:15px;font-weight:800;display:flex}.brand-accent{color:var(--primary)}.brand-tagline{color:var(--text-muted);letter-spacing:.04em;margin-top:2px;font-size:7px;font-weight:700;display:block}.sidebar-rule{border:none;border-top:1px solid var(--border-strong);margin:12px 4px}.sidebar-body{flex:1;font-size:11px;overflow:auto}.sidebar-title{color:var(--text-faint);margin:0 0 8px;font-size:11px;font-weight:600}.sidebar-footer{flex-direction:column;gap:10px;display:flex}.appearance{justify-content:space-between;align-items:center;padding:0 4px;font-size:12px;font-weight:600;display:flex}.theme-toggle{cursor:pointer;background:#fff8e1;border:1px solid #f2d27a;border-radius:6px;width:26px;height:26px}.download-btn{width:100%;height:34px}.download-row{gap:6px;display:flex}.download-row select{flex:none}.download-row .download-btn{flex:1;width:auto}.pill-tabs{flex-wrap:nowrap;gap:3px;margin-bottom:12px;display:flex}.pill-tabs button{background:var(--surface-muted);white-space:nowrap;cursor:pointer;border:none;border-radius:999px;padding:3px 4px;font-size:9px}.pill-tabs button.active{background:var(--primary);color:#fff}.pill-tabs button:disabled{opacity:.5;cursor:not-allowed}.main{flex-direction:column;flex:1;min-width:0;display:flex}.topbar{background:var(--surface);border-bottom:1px solid var(--border);flex:none;justify-content:space-between;align-items:center;height:50px;padding:0 16px;display:flex}.tabs{gap:28px;display:flex}.tab{color:var(--text);border-bottom:2px solid #0000;padding:10px 0 4px;font-size:16px;font-weight:600;text-decoration:none}.tab.active{border-bottom-color:var(--primary)}.tab.disabled{color:var(--text-faint);cursor:not-allowed}.user{align-items:center;gap:8px;display:flex}.avatar{background:var(--primary);color:#fff;border-radius:50%;place-items:center;width:28px;height:28px;font-size:11px;font-weight:700;display:grid}.user-name{font-size:12px;font-weight:700;display:block}.user-role{color:var(--text-muted);font-size:10px;display:block}.toolbar-row{padding:8px 10px 0}.toolbar{background:var(--surface);border:1px solid var(--border);border-radius:8px;align-items:stretch;gap:0;padding:4px 6px;display:flex}.tool-group{border-right:2px solid #6b7280;align-items:center;gap:8px;padding:0 10px;display:flex}.tool-group:first-child{padding-left:2px}.tool-group:nth-child(3){flex:1}.tool-group.nav-group{border-right:none;padding-right:2px}.tool{white-space:nowrap;background:var(--surface-muted);cursor:pointer;min-width:50px;height:46px;color:var(--text);border:none;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:2px;padding:0 5px;font-size:9px;display:flex}.tool:hover:not(:disabled){background:#e2e6ec}.tool.pressed{background:#c9cdd3}.tool:disabled{opacity:.35;cursor:not-allowed}.open-wrap{position:relative}.open-menu{z-index:30;background:var(--surface);border:1px solid var(--border-strong);border-radius:6px;min-width:230px;margin:0;padding:4px;list-style:none;position:absolute;top:calc(100% + 4px);left:0;box-shadow:0 8px 20px #00000026}.open-menu button{text-align:left;cursor:pointer;background:0 0;border:none;border-radius:4px;width:100%;padding:7px 10px}.open-menu button:hover:not(:disabled){background:var(--primary-soft)}.floor-box{flex-direction:column;gap:3px;width:150px;display:flex}.floor-box.disabled{opacity:.45}.floor-pick,.lock-chips{background:var(--surface-muted);border-radius:6px;padding:2px 6px;font-size:9px}.floor-pick{align-items:center;display:flex}.floor-pick select{background:0 0;border:none;flex:1;min-width:0;font-size:9px;font-weight:700}.lock-chips{gap:4px;padding:3px 6px;display:flex}.lock-chip{color:var(--danger);background:#fff;border:1px solid #f3a3a3;border-radius:3px;padding:0 4px;font-size:8px;font-weight:700}.lock-chip.off{opacity:.4}.content{flex:1;min-height:0;padding:8px 10px 10px;overflow:auto}.status-mark{vertical-align:middle;display:inline-flex}.notice{color:#fff;z-index:60;background:#1f2937;border-radius:8px;padding:10px 16px;font-size:13px;position:fixed;bottom:20px;left:50%;transform:translate(-50%);box-shadow:0 8px 20px #00000040}.panel{background:var(--surface);border:1px solid var(--border);border-radius:8px}.viewer{flex-direction:column;height:100%;min-height:520px;display:flex}.viewer-toolbar{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:8px;display:flex}.viewer-title{font-size:13px}.viewer-file{text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-size:11px;overflow:hidden}.viewer-panel{border-radius:var(--radius);background:var(--primary-soft);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;padding:8px 10px;display:flex}.viewer-canvas{border:1px solid var(--border);border-radius:var(--radius);-webkit-user-select:none;user-select:none;cursor:grab;background:#eef1f5;flex:1;min-height:440px;position:relative;overflow:hidden}.viewer-canvas.picking{cursor:crosshair}.viewer-canvas.panning{cursor:grabbing}.viewer-page{background:#fff;position:absolute;box-shadow:0 1px 6px #00000026}.viewer-overlay{pointer-events:none;position:absolute;inset:0}.cal-line{stroke:var(--primary);stroke-width:2px;stroke-dasharray:6 4}.cal-length{fill:var(--primary);paint-order:stroke;stroke:#fff;stroke-width:3px;font-size:12px;font-weight:700}.cal-point circle{fill:var(--primary);stroke:#fff;stroke-width:2px}.cal-point text{fill:var(--text);paint-order:stroke;stroke:#fff;stroke-width:3px;font-size:12px;font-weight:800}.viewer-hint{color:#555;background:#ffffffd9;border-radius:999px;padding:2px 8px;font-size:11px;position:absolute;bottom:8px;right:8px}.viewer-empty{place-items:center;display:grid;position:absolute;inset:0}.viewer-error{z-index:2;position:absolute;top:8px;left:8px;right:8px}.viewer-status{margin-top:8px;font-size:12px}.viewer-guidance{border-radius:var(--radius);background:var(--surface-muted);flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:6px;padding:6px 10px;font-size:12px;display:flex}.viewer-guidance.low-zoom{background:var(--warning-soft);color:var(--warning)}.snap-ring{fill:none;stroke:#f59e0b;stroke-width:2.5px}.viewer-actions{gap:10px;margin-left:10px;display:inline-flex}.marker-tag{fill:#1d4ed8;paint-order:stroke;stroke:#fff;stroke-width:3px;font-size:10px;font-weight:700}.marker-selection{fill:#2563eb14;stroke:var(--primary);stroke-width:1.5px;stroke-dasharray:4 3}.marker-fallback{fill:#fff;stroke:#1d4ed8;stroke-width:2px}.plan-cable polyline{fill:none;stroke:#dc2626;stroke-width:2px}.plan-cable.selected polyline{stroke-width:4px;stroke-dasharray:8 4}.cable-tag{fill:#dc2626;paint-order:stroke;stroke:#fff;stroke-width:3px;font-size:10px;font-weight:700}.cable-preview{fill:none;stroke:#dc2626;stroke-width:2px;stroke-dasharray:5 4}.marker-handle{fill:#fff;stroke:var(--primary);stroke-width:1.5px}.viewer-canvas.resizing{cursor:nwse-resize}.plan-cable.busbar polyline{stroke-width:6px;stroke-linecap:square}.plan-tooltip{z-index:5;pointer-events:none;color:#fff;background:#1f2937;border-radius:6px;max-width:280px;padding:6px 9px;font-size:11px;line-height:1.4;position:absolute;box-shadow:0 6px 16px #00000040}.plan-tooltip>div:first-child{font-weight:700}.plan-cable.link polyline{stroke:#6b7280;stroke-width:1.5px;stroke-dasharray:4 3}.plan-cable.link .cable-tag{display:none}.discipline-box{border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:6px;padding:10px;display:flex}.discipline-box.invalid{border-color:var(--danger)}.combo{position:relative}.combo-list{z-index:10;background:var(--surface);border:1px solid var(--border-strong);border-radius:6px;max-height:200px;margin:0;padding:4px;list-style:none;position:absolute;top:calc(100% + 2px);left:0;right:0;overflow:auto;box-shadow:0 8px 20px #0000001f}.combo-list li{cursor:pointer;border-radius:4px;padding:6px 8px}.combo-list li:hover{background:var(--primary-soft)}.combo-empty{cursor:default!important}.chips{flex-wrap:wrap;gap:4px;min-height:22px;display:flex}.chip{background:var(--surface-muted);border:1px solid var(--border);border-radius:999px;align-items:center;gap:4px;max-width:100%;padding:2px 4px 2px 8px;font-size:11px;display:inline-flex}.chip-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.chip button{cursor:pointer;color:var(--text-muted);background:0 0;border:none;padding:0 4px}.import-panel{padding:12px 14px}.save-banner{margin-bottom:8px}.import-form{grid-template-columns:minmax(0,440px) minmax(0,860px);gap:0;display:grid}.import-left{border-right:1.5px solid #374151;flex-direction:column;gap:10px;padding-right:22px;display:flex}.import-right{flex-direction:column;gap:10px;padding-left:18px;display:flex}.import-heading{text-align:center;margin:2px 0 6px;font-size:13px;font-weight:700}.form-row{grid-template-columns:1fr 170px;align-items:center;gap:10px;display:grid}.import-right .form-row{grid-template-columns:1fr 155px}.form-label{font-size:11px;font-weight:700}.form-control{flex-direction:column;gap:2px;display:flex}.pill-input{background:#ebebeb;border:none;border-radius:8px;width:100%;height:22px;padding:0 10px;font-size:11px}.pill-input.center{text-align:center}.pill-input.invalid{outline:1.5px solid var(--danger)}.pill-select{text-align:center;text-align-last:center}.pill-pair{gap:4px;display:flex}.pill-pair .unit{flex:none;width:64px}.checks-row{grid-template-columns:auto 1fr!important}.checks-inline{flex-wrap:wrap;gap:4px 14px;font-size:11px;display:flex}.check{align-items:center;gap:5px;display:inline-flex}.df-grid{grid-template-columns:170px minmax(0,1fr);gap:0;display:grid}.df-col h3,.disciplines h3{margin:4px 0 8px;font-size:11px;font-weight:700}.df-types{border-left:1.5px solid #374151;padding-left:10px}.df-types h3{text-align:right;padding-right:50px}.df-type-grid{grid-template-columns:1fr 1fr;gap:6px 10px;display:grid}.df-row{grid-template-columns:1fr 70px;align-items:center;gap:6px;margin-bottom:6px;font-size:11px;font-weight:700;display:grid}.df-type-grid .df-row{margin-bottom:0}.df-input{text-align:center}.disciplines{background:var(--surface-muted);border-radius:8px;flex-direction:column;gap:8px;max-width:420px;padding:8px 10px;display:flex}.floor-plans{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.plan-match th{text-align:left;padding:4px 12px 4px 0;font-weight:600}.plan-match td{padding:4px 0}.df-unused{opacity:.45}.pf-types{margin-top:12px}.library.greyed{opacity:.35}.library-chips{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.library-chips>p{grid-column:1/-1}.lib-chip{border:1px solid var(--border-strong);background:var(--surface);cursor:pointer;text-align:center;border-radius:4px;flex-direction:column;align-items:center;gap:3px;padding:4px 3px;font-size:9px;line-height:1.15;display:flex}.lib-icon{place-items:center;width:30px;height:30px;display:grid}.lib-icon img,.lib-icon svg{max-width:100%;max-height:100%}.lib-chip:disabled{opacity:.5;cursor:not-allowed}.floor-layout{grid-template-columns:minmax(0,1fr) 232px;gap:10px;height:calc(100vh - 150px);min-height:480px;display:grid}.floor-canvas{flex-direction:column;min-width:0;padding:10px;display:flex}.floor-canvas .viewer{flex:1;min-height:0}.canvas-empty{text-align:center;margin:auto}.right-panel{flex-direction:column;padding:8px;font-size:10px;display:flex}.capacity-head{justify-content:space-between;gap:6px;display:flex}.capacity-head strong{font-size:9px;line-height:1.3}.loaded-badge{color:#15803d;background:#dcfce7;border-radius:4px;flex-direction:column;align-items:center;height:fit-content;padding:2px 6px;font-size:10px;font-weight:700;display:flex}.loaded-badge small{font-size:8px;font-weight:500}.capacity-values{color:var(--text-muted);justify-content:space-between;gap:4px;margin-top:8px;font-size:9px;display:flex}.capacity-values strong{color:var(--text)}.capacity{border-bottom:1px solid var(--border);padding-bottom:10px}.right-body{flex:1;padding-top:8px}.cable-size{width:100%}.building-tab{background:#d9d9d9;border-radius:8px;grid-template-columns:minmax(0,1fr) 240px;height:calc(100vh - 150px);min-height:480px;display:grid;overflow:hidden}.building-canvas{padding:10px;overflow:auto}.network-check{align-items:flex-start;gap:12px;margin-bottom:6px;font-size:12px;display:flex}.network-check p{margin:4px 0}.scenario-switch{border:1px solid #9ca3af;border-radius:6px;flex:none;display:inline-flex;overflow:hidden}.scenario-switch button{cursor:pointer;background:#fff;border:0;padding:4px 10px;font-size:12px}.scenario-switch button.on{color:#fff;background:#374151}.network-issues{color:#92400e;max-height:96px;margin:0;padding-left:16px;overflow:auto}.issue-fix{color:#374151}.floor-line{stroke:#9ca3af;stroke-width:1px}.floor-label{text-anchor:middle;fill:#374151;font-size:9px}.floor-board{cursor:pointer}.floor-board rect{fill:#fff;stroke:#374151}.floor-board line{stroke:#374151}.riser{fill:#574b4b}.riser-link,.source-link{fill:none;stroke:#e11d1d;stroke-width:2px}.tx-box{fill:#fff;stroke:#374151}.tx-text{text-anchor:middle;font-size:11px;font-weight:700}.building-summary{color:#111;background:#a3a3a3;padding:10px 10px 14px;font-size:9px;overflow:auto}.building-summary h2{text-align:center;margin:4px 0 10px;font-size:13px}.building-summary h3{text-align:center;margin:6px 0;font-size:11px}.building-summary hr{border:none;border-top:1px solid #6b7280;margin:8px 0}.summary-count{margin:0;font-size:11px}.summary-status,.riser-design{border-collapse:collapse;width:100%}.summary-status th,.summary-status td,.riser-design th,.riser-design td{text-align:center;padding:2px 1px;font-weight:500}.summary-status th[scope=row],.riser-design th[scope=row]{text-align:left;font-weight:700}.input.riser-input{text-align:center;background:#e5e5e5;border:none;border-radius:2px;width:38px;height:16px;padding:0 2px;font-size:9px}.summary-btn{color:#fff;cursor:pointer;background:#4b4b4b;border:none;border-radius:2px;margin:10px auto;padding:4px 10px;font-size:9px;display:block}.summary-btn:disabled{cursor:not-allowed}.summary-btn.ready{background:#1d4ed8}.summary-cost{margin:4px 0 0;font-size:10px}.summary-hint{color:#7c2d12;margin:4px 0 0;font-size:9px;line-height:1.35}.summary-hint p{margin:0}.summary-hint ul{margin:2px 0 0;padding-left:14px}.tx-box.dead,.source-link.dead{stroke:#b45309;stroke-dasharray:4 3}.source-warning{fill:#b45309;text-anchor:middle;font-size:9px}.riser-label{text-anchor:middle;font-size:9px;font-weight:700}.riser-label.unfed{fill:#b45309}.summary-actions{justify-content:space-around;display:flex}.summary-actions .summary-btn{min-width:52px;margin:6px 0}.demand-btn{margin:10px auto 0;display:block}.df-dialog-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 16px;margin-top:10px;display:grid}.df-dialog-row{justify-content:space-between;align-items:center;gap:8px;font-size:12px;display:flex}.lib-chip.armed{background:var(--primary);border-color:var(--primary);color:#fff}.lib-chip[draggable=true]{cursor:grab}.property-card{background:var(--surface-muted);border-radius:8px;margin-top:12px;padding:10px;font-size:11px}.property-card h3{margin:0 0 10px;font-size:11px;font-weight:700}.property-card dl{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:8px 6px;margin:0 0 10px;display:grid}.property-card dt{font-weight:700}.property-card dd{flex-direction:column;gap:2px;margin:0;display:flex}.construction-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 16px;margin-top:10px;display:grid}.construction-row{flex-direction:column;gap:3px;font-size:12px;display:flex}.construction-subhead{margin:14px 0 0;font-size:12px;font-weight:700}.prop-row{display:contents}.prop-number{align-items:center;gap:4px;display:flex}.prop-multi{flex-wrap:wrap;gap:2px 8px;display:flex}.loads-table{border-collapse:collapse;width:100%;font-size:12px}.loads-table th{text-align:left;padding:4px;font-weight:700}.loads-table td{padding:3px 4px}.load-table{margin-top:12px;font-size:10px}.load-table h3{margin:0 0 6px;font-size:10px;font-weight:700}.load-table table{border-collapse:collapse;width:100%}.load-table th,.load-table td{text-align:right;border-bottom:1px solid var(--border);padding:2px 3px}.load-table th:first-child,.load-table td:first-child{text-align:left;text-overflow:ellipsis;white-space:nowrap;max-width:70px;overflow:hidden}.load-totals{margin:6px 0 2px}.cable-size-scope{opacity:.85;font-size:9px;font-weight:400;display:block}.result-status{margin:4px 0 6px;font-weight:700}.result-card.out-of-date{filter:grayscale();opacity:.65}.check-list{margin:6px 0;padding:0;list-style:none}.check-list li{padding:1px 0}.check-pass{color:var(--success)}.check-fail,.check-blocked{color:var(--danger)}.check-not-calculated,.check-not-required{color:var(--text-muted)}.check-warning{color:var(--warning)}.result-trace summary{cursor:pointer;font-weight:600}.result-trace ol{overflow-wrap:anywhere;max-height:220px;margin:4px 0;padding-left:18px;overflow:auto}.loaded-badge.over{color:#b91c1c;background:#fee2e2}.capacity-checks{color:var(--text-muted);margin:6px 0 0;padding:0;font-size:9px;list-style:none}.capacity-checks li.over{color:#b91c1c}.login{background:linear-gradient(135deg, #2563eb0a, transparent 40%), var(--bg);min-height:100%;padding:48px 24px}.login-hero{text-align:center;max-width:980px;margin:0 auto 40px}.login-kicker{color:var(--primary);font-size:11px;font-weight:700}.login-hero h1{margin:6px 0 14px;font-size:30px;font-weight:700}.login-hero p{color:var(--text-muted);max-width:640px;margin:0 auto}.login-cards{grid-template-columns:minmax(0,560px) minmax(0,400px);justify-content:center;align-items:start;gap:18px;display:grid}.login-workflow ol{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.login-workflow li{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-muted);align-items:center;gap:16px;padding:10px 14px;display:flex}.login-workflow li strong{display:block}.login-workflow li .muted{font-size:11px}.step-no{color:var(--primary);width:22px;font-size:14px;font-weight:800}.login-form h2{font-size:16px}.login-form>p{margin:4px 0 14px;font-size:11px}.login-form form{flex-direction:column;gap:12px;display:flex}.login-submit{width:100%;height:38px}.login-links{flex-wrap:wrap;align-items:center;gap:8px;font-size:12px;display:flex}.login-demo{margin:0;font-size:11px}.check-list{flex-direction:column;gap:6px;margin:0;padding:0;font-size:10px;list-style:none;display:flex}.check-list label{justify-content:space-between;align-items:center;gap:6px;display:flex}.drawing-area{justify-content:center;height:calc(100vh - 150px);min-height:480px;padding:24px;display:flex;position:relative;overflow:auto}.sample-note{color:var(--text-faint);font-size:10px;position:absolute;top:8px;right:10px}.sld-stack{flex-direction:column;align-items:center;gap:30px;display:flex}.sld-bus,.sld-line{stroke:#1f2937;stroke-width:1px;fill:none}.sld-bus{stroke-width:2px}.sld-breaker,.sld-panel{fill:#fff;stroke:#1f2937}.sld-text{fill:#1f2937;font-size:8px}.sld-small{fill:#4b5563;font-size:6px}.schedule-type{align-items:center;gap:6px;margin-top:8px;font-size:10px;display:flex}.schedule-type select{background:0 0;border:none;font-size:10px}.schedule-sheet{border-collapse:collapse;background:#fff;border:2px solid #1e3a8a;height:fit-content;font-size:7px}.schedule-sheet th,.schedule-sheet td{text-align:center;border:1px solid #6b7280;padding:3px 4px}.schedule-sheet .left{text-align:left}.schedule-sheet .logo{color:#134e6f;font-size:22px;font-weight:800}.schedule-sheet .strong{font-weight:700}.output-area{flex-direction:column;justify-content:flex-start;gap:12px}.sheet-stack{flex-direction:column;gap:28px;display:flex}.download-inputs{border:1px solid var(--border);background:var(--surface-muted);border-radius:6px;flex-wrap:wrap;align-items:center;gap:14px;padding:8px 10px;font-size:11px;display:flex}.download-inputs .missing,.schedule-sheet .missing{outline-offset:1px;outline:2px solid #f59e0b}.meter-input{text-align:center;width:32px;font-size:9px}.meter-type select,.meter-type input{font-size:9px}.schedule-sheet .logo img{max-width:120px;max-height:34px}.sheet-board{font-size:13px}.calc-sheet{margin-top:28px}.calc-sheet-title{margin:0 0 8px;font-size:12px}.calc-sheet-scroll{max-width:100%;overflow-x:auto}.calc-sheet table{border-collapse:collapse;white-space:nowrap;font-size:10px}.calc-sheet th,.calc-sheet td{border:1px solid var(--border);text-align:center;padding:3px 5px}.calc-sheet thead th{background:var(--surface-muted)}.calc-sheet td:nth-child(-n+4){text-align:left}.calc-unit{color:var(--text-faint);font-weight:400}.calc-Pass{color:var(--success)}.calc-Fail,.calc-Blocked{color:var(--danger)}.calc-Warning{color:var(--warning)}.gen-sheet thead th{white-space:normal;min-width:52px}.gen-sheet td:nth-child(-n+4){text-align:center}.gen-sheet td:nth-child(-n+2),.gen-sheet td:last-child{text-align:left}.gen-group td{color:#1f2937;background:#fff59d;font-weight:600}.gen-unedited td{background:var(--surface-muted)}.gen-total td{color:#1f2937;background:#fad7c0;font-weight:700}.gen-input{text-align:center;width:48px;font-size:10px}.gen-remark{text-align:left;width:110px}.gen-summary{margin-top:10px}.gen-summary th{text-align:left;background:0 0}.gen-short td,.gen-fls{color:var(--danger);font-weight:600}.project-cards{grid-template-columns:repeat(2,360px);gap:32px 40px;margin:50px 0 0 30px;padding:0;list-style:none;display:grid}.project-card{text-align:left;cursor:pointer;background:#dadada;border:none;border-radius:10px;justify-content:space-between;align-items:center;gap:12px;width:100%;min-height:66px;padding:10px 16px 10px 14px;display:flex}.project-card:hover{background:#cfd2d6}.project-card-text{color:#111;flex-direction:column;gap:6px;font-size:14px;font-weight:700;display:flex}.projects-empty{margin:50px 30px}:root{--bg:#f4f6fa;--surface:#fff;--surface-muted:#f1f4f8;--border:#e3e8ef;--border-strong:#cfd6e1;--text:#111827;--text-muted:#6b7280;--text-faint:#9aa3b2;--primary:#2563eb;--primary-hover:#1d4ed8;--primary-soft:#e8efff;--danger:#dc2626;--danger-soft:#fdecec;--warning:#b45309;--warning-soft:#fff4e0;--success:#15803d;--success-soft:#e7f6ec;--elec:#2563eb;--mech:#15803d;--phe:#c2410c;--radius:8px;--radius-lg:12px;--shadow:0 1px 2px #1018280d;--font:Inter, "Segoe UI", system-ui, -apple-system, sans-serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#0f141b;--surface:#171e27;--surface-muted:#1e2732;--border:#2a3441;--border-strong:#3a4656;--text:#e6ebf2;--text-muted:#9aa6b6;--text-faint:#6c7889;--primary:#4f8cff;--primary-hover:#6b9fff;--primary-soft:#1d2b45;--danger-soft:#3a1d1f;--warning-soft:#3a2c14;--success-soft:#16301f;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:13px;line-height:1.45}h1,h2,h3{margin:0}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--primary)}.btn{border:1px solid var(--border-strong);background:var(--surface);cursor:pointer;white-space:nowrap;border-radius:6px;justify-content:center;align-items:center;gap:6px;height:32px;padding:0 14px;font-weight:600;display:inline-flex}.btn:hover:not(:disabled){background:var(--surface-muted)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-danger-outline{color:var(--danger);border-color:#f3b4b4}.btn-sm{height:26px;padding:0 10px;font-size:12px}.btn-link{color:var(--primary);cursor:pointer;background:0 0;border:none;height:auto;padding:0;font-weight:600}.field{flex-direction:column;gap:4px;min-width:0;display:flex}.field-label{color:var(--text);flex-wrap:wrap;align-items:center;gap:6px;font-size:11px;font-weight:700;display:flex}.req{color:var(--danger)}.input,.select{border:1px solid var(--border);background:var(--surface-muted);border-radius:6px;width:100%;min-width:0;height:34px;padding:0 10px}.input:focus,.select:focus{outline:2px solid var(--primary-soft);border-color:var(--primary)}.input:disabled,.select:disabled{color:var(--text-muted);cursor:not-allowed}.input.invalid,.select.invalid{border-color:var(--danger)}.field-error{color:var(--danger);font-size:11px}.field-hint{color:var(--text-muted);font-size:11px}.input-group{gap:6px;display:flex}.tag{white-space:nowrap;background:var(--surface-muted);height:18px;color:var(--text-muted);border:1px solid var(--border);border-radius:999px;align-items:center;padding:0 6px;font-size:10px;font-weight:700;display:inline-flex}.tag-tbc{background:var(--warning-soft);color:var(--warning);border-color:#0000}.tag-default{background:var(--primary-soft);color:var(--primary);border-color:#0000}.tag-overridden{background:var(--danger-soft);color:var(--danger);border-color:#0000}.tag-ok{background:var(--success-soft);color:var(--success);border-color:#0000}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);min-width:0;padding:16px 18px}.card-title{letter-spacing:.02em;text-transform:uppercase;align-items:center;gap:8px;margin-bottom:12px;font-size:12px;font-weight:800;display:flex}.card-subtitle{text-transform:uppercase;color:var(--text-muted);margin:14px 0 8px;font-size:11px;font-weight:800}.grid{gap:12px 14px;display:grid}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.table{border-collapse:collapse;width:100%}.table th{text-align:left;color:var(--text-muted);border-bottom:1px solid var(--border);white-space:nowrap;padding:6px 8px;font-size:11px;font-weight:700}.table td{border-bottom:1px solid var(--border);vertical-align:middle;padding:5px 8px}.table .input{height:28px}.num{text-align:right;font-variant-numeric:tabular-nums}.modal-backdrop{z-index:50;background:#0f172a73;place-items:center;display:grid;position:fixed;inset:0}.modal{background:var(--surface);border-radius:var(--radius-lg);width:min(480px,100vw - 32px);padding:20px;box-shadow:0 20px 40px #0003}.modal h2{margin-bottom:8px;font-size:16px}.modal-actions{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.banner{border-radius:var(--radius);padding:8px 12px;font-size:12px}.banner-error{background:var(--danger-soft);color:var(--danger)}.banner-warning{background:var(--warning-soft);color:var(--warning)}.banner-info{background:var(--primary-soft);color:var(--primary)}.muted{color:var(--text-muted)}.spinner{border:2px solid #ffffff80;border-top-color:#fff;border-radius:50%;width:14px;height:14px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.row-link{cursor:pointer}.row-link:hover td{background:var(--surface-muted)}
