:root{--bg:#080b14;--text:#e1e4e8;--card-bg:linear-gradient(145deg,#111827,#0f1420);--card-border:#1e2844;--stat-bg:linear-gradient(145deg,#111827,#0d111c);--detail-bg:#0d111c;--input-bg:#0d111c;--muted:#6b7280;--header-bg:linear-gradient(135deg,#0d111c 0%,#131827 100%);--header-border:#1e2844;--chart-bg:#111827;--filter-bg:#1a1f2e;--filter-border:#2d3555;--progress-bg:#1a1f2e;--modal-bg:#111827;--modal-overlay:rgba(0,0,0,.7);--btn-sec-bg:#1a1f2e;--btn-sec-border:#2d3555;--btn-sec-text:#c9d1d9}
[data-theme="light"]{--bg:#f8f9fa;--text:#1a1a2e;--card-bg:#ffffff;--card-border:#e2e8f0;--stat-bg:#ffffff;--detail-bg:#f1f3f5;--input-bg:#ffffff;--muted:#6b7280;--header-bg:linear-gradient(135deg,#ffffff,#f0f4ff);--header-border:#e2e8f0;--chart-bg:#ffffff;--filter-bg:#f1f3f5;--filter-border:#d1d5db;--progress-bg:#e2e8f0;--modal-bg:#ffffff;--modal-overlay:rgba(0,0,0,.3);--btn-sec-bg:#f1f3f5;--btn-sec-border:#d1d5db;--btn-sec-text:#374151}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;transition:background .3s,color .3s}
.header{background:var(--header-bg);border-bottom:1px solid var(--header-border);padding:24px 36px;display:flex;justify-content:space-between;align-items:center;position:sticky;top:0;z-index:50;backdrop-filter:blur(12px)}
.header-left h1{font-size:26px;font-weight:700;letter-spacing:-0.5px}
.header-left h1 span{color:#2a5a9b}
[data-theme="light"] .header-left h1 span{color:#0a1e3d}
.header-left .sub{font-size:13px;color:var(--muted);margin-top:4px;letter-spacing:0.3px}
.header-right{display:flex;gap:12px;align-items:center}
.header-right .date{font-size:13px;color:var(--muted)}
.btn{background:#2563eb;color:#fff;border:none;padding:10px 22px;border-radius:10px;cursor:pointer;font-size:14px;font-weight:500;transition:all .2s;display:flex;align-items:center;gap:8px}
.btn:hover{background:#3b82f6;transform:translateY(-1px);box-shadow:0 4px 20px rgba(37,99,235,.3)}
.btn-secondary{background:var(--btn-sec-bg);color:var(--btn-sec-text);border:1px solid var(--btn-sec-border)}
.btn-secondary:hover{background:var(--filter-bg);border-color:#4b8dff}
.btn-danger{background:#dc2626}
.btn-danger:hover{background:#ef4444}
.btn-sm{padding:6px 14px;font-size:12px;border-radius:8px}
.container{max-width:1400px;margin:0 auto;padding:28px 36px}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:14px;margin-bottom:28px}
.stat-card{background:var(--stat-bg);border:1px solid var(--card-border);border-radius:14px;padding:20px 22px;transition:.3s}
.stat-card:hover{border-color:#4b8dff44;transform:translateY(-2px)}
.stat-card .num{font-size:28px;font-weight:700;letter-spacing:-0.5px}
.stat-card .label{font-size:12px;color:var(--muted);margin-top:4px;text-transform:uppercase;letter-spacing:0.8px}
.stat-card .sub-num{font-size:14px;color:#9ca3af;margin-top:2px}
.stat-blue .num{color:#4b8dff}
.stat-green .num{color:#34d399}
.stat-orange .num{color:#f59e0b}
.stat-red .num{color:#ef4444}
.stat-hold .num{color:#e879f9}
.stat-purple .num{color:#a78bfa}
.stat-cyan .num{color:#22d3ee}
.charts-row{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-bottom:28px}
.chart-card{background:var(--chart-bg);border:1px solid var(--card-border);border-radius:16px;padding:24px}
.chart-card h3{font-size:14px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:16px}
.chart-wrap{position:relative;height:280px;display:flex;justify-content:center}
.filters{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap}
.search-box{display:flex;align-items:center;gap:8px;position:relative}
.search-box input{background:var(--input-bg,#0d111c);border:1px solid var(--filter-border);color:var(--text);padding:8px 14px;border-radius:20px;font-size:13px;width:240px;transition:all .2s}
.search-box input:focus{outline:none;border-color:#4b8dff;box-shadow:0 0 0 3px rgba(75,141,255,.15)}
.search-box input::placeholder{color:var(--muted)}
.filter-btn{background:var(--filter-bg);border:1px solid var(--filter-border);color:var(--muted);padding:8px 18px;border-radius:20px;cursor:pointer;font-size:13px;transition:all .2s}
.filter-btn:hover{border-color:#4b8dff;color:var(--text)}
.filter-btn.active{background:#2563eb22;border-color:#4b8dff;color:#4b8dff;font-weight:500}
.factory-grid{position:relative}
.factory-card{background:var(--card-bg);border:1px solid var(--card-border);border-radius:16px;padding:22px;transition:all .3s;position:relative;overflow:hidden}
.factory-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;border-radius:16px 16px 0 0}
.factory-card.status-completed::before{background:linear-gradient(90deg,#34d399,#059669)}
.factory-card.status-partial::before{background:linear-gradient(90deg,#f59e0b,#d97706)}
.factory-card.status-not_started::before{background:linear-gradient(90deg,#6b7280,#4b5563)}
.factory-card:hover{border-color:#4b8dff66;transform:translateY(-3px);box-shadow:0 8px 30px rgba(0,0,0,.4)}
.factory-card.hidden{display:none}
.factory-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}
.factory-name{font-size:17px;font-weight:600;display:flex;align-items:center;gap:8px}
.factory-name .loc{font-size:12px;color:var(--muted);font-weight:400}
.badge{font-size:11px;padding:4px 12px;border-radius:20px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;transition:all .2s}
.badge[onclick]:hover{transform:scale(1.05);filter:brightness(1.2)}
.badge-completed{background:#065f4622;color:#34d399;border:1px solid #34d39933}
.badge-partial{background:#92400e22;color:#f59e0b;border:1px solid #f59e0b33}
.badge-not_started{background:#37415122;color:#9ca3af;border:1px solid #4b556333}
.badge-on_hold{background:#86198f22;color:#e879f9;border:1px solid #e879f933}
.factory-details{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:14px 0}
.detail-item{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;background:var(--detail-bg);border-radius:8px;font-size:13px}
.detail-item .lbl{color:var(--muted)}
.detail-item .val{font-weight:500}
.val[onclick]:hover,.edit-num[onclick]:hover{opacity:0.8;text-decoration:underline}
.edit-num{cursor:pointer;color:var(--text);font-weight:600;padding:0 2px;border-bottom:2px dotted var(--muted);transition:all .2s}
.edit-num:hover{color:#4b8dff;border-bottom-color:#4b8dff;background:var(--filter-bg);border-radius:3px}
.edit-total{color:var(--muted);font-weight:400;font-size:0.9em}
.val.online{color:#34d399}
.val.offline{color:#ef4444}
.val.connected{color:#34d399}
.val.disconnected{color:#ef4444}
.factory-progress{margin:10px 0}
.progress-label{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);margin-bottom:4px}
.progress-track{height:6px;background:var(--progress-bg);border-radius:4px;overflow:hidden}
.progress-fill{height:100%;border-radius:4px;background:linear-gradient(90deg,#4b8dff,#34d399);transition:width .8s ease;width:0%}
.factory-notes{font-size:13px;color:var(--muted);margin-top:10px;padding-top:10px;border-top:1px solid var(--card-border);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.factory-actions{display:flex;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--card-border)}
.viewer-notice{text-align:center;padding:6px;font-size:12px;color:var(--muted);background:var(--detail-bg);border-bottom:1px solid var(--card-border)}
.modal-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:var(--modal-overlay);z-index:100;justify-content:center;align-items:center;backdrop-filter:blur(4px)}
.modal-overlay.active{display:flex}
.modal{background:var(--modal-bg);border:1px solid var(--card-border);border-radius:20px;padding:32px;width:95%;max-width:500px}
.modal h2{font-size:22px;font-weight:700;margin-bottom:24px}
.form-group{display:flex;flex-direction:column}
.form-group.full{grid-column:1/-1}
.form-group label{font-size:12px;color:var(--muted);margin-bottom:6px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px}
.form-group input,.form-group select,.form-group textarea{background:var(--input-bg);border:1px solid var(--filter-border);border-radius:10px;padding:10px 14px;color:var(--text);font-size:14px;transition:border .2s}
.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:#4b8dff;box-shadow:0 0 0 3px #4b8dff22}
.form-group textarea{resize:vertical;min-height:60px}
.form-check{display:flex;align-items:center;gap:10px;padding:8px 0}
.form-check input[type=checkbox]{accent-color:#4b8dff;width:18px;height:18px}
.form-check label{font-size:13px;color:var(--muted);cursor:pointer}
.modal-actions{display:flex;gap:12px;margin-top:24px;justify-content:flex-end}
.error-msg{color:#ef4444;font-size:13px;margin-top:8px;display:none}
@keyframes fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
.factory-card{animation:fadeIn .4s ease forwards}
@media(max-width:900px){.charts-row{grid-template-columns:1fr}.container{padding:16px}.header{padding:16px 20px}}

/* Charts Rings */
.chart-rings{display:flex;align-items:center;justify-content:center;gap:24px}
.ring-box{display:flex;flex-direction:column;align-items:center;gap:4px}
.ring-box-big canvas{max-width:100%}
.ring-breakdown{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;margin-top:-4px}
.bd-item{font-size:12px;color:var(--muted);background:var(--filter-bg);border:1px solid var(--filter-border);padding:3px 10px;border-radius:14px;white-space:nowrap}
.bd-cam{color:#4b8dff;border-color:#4b8dff44}
.bd-box{color:#22d3ee;border-color:#22d3ee44}
.bd-nvr{color:#a78bfa;border-color:#a78bfa44}
.ring-label{font-size:13px;font-weight:600;color:var(--muted);letter-spacing:0.5px;text-transform:uppercase}
.ring-divider{width:1px;height:120px;background:var(--card-border);opacity:0.3;flex-shrink:0}

/* Command Center styles */
.factory-card.type-command_center{border-color:#b8860b44;background:linear-gradient(145deg,#1a1200,#0f1420)}
[data-theme="light"] .factory-card.type-command_center{background:linear-gradient(145deg,#fffbf0,#ffffff)}
.factory-card.type-command_center::before{background:linear-gradient(90deg,#ffd700,#b8860b)}
.ncc-badge{display:inline-block;background:linear-gradient(135deg,#ffd700,#b8860b);color:#1a1200;font-size:10px;font-weight:700;padding:2px 8px;border-radius:4px;letter-spacing:0.5px;text-transform:uppercase}
.ncc-tasks{display:flex;flex-direction:column;gap:6px;margin:14px 0}
.ncc-task{display:flex;flex-direction:column;gap:6px;padding:6px 10px;background:var(--detail-bg);border-radius:8px;font-size:13px;transition:all .2s}
.ncc-task:hover{background:var(--filter-bg)}
.ncc-task.done{opacity:0.65}
.ncc-task.done .ncc-task-row span:nth-child(2){text-decoration:line-through;color:var(--muted)}
.ncc-task-row{display:flex;align-items:center;gap:8px;width:100%}
.ncc-upload-btn{margin-left:auto;background:none;border:1px dashed var(--border);border-radius:6px;cursor:pointer;font-size:13px;padding:2px 8px;opacity:0.6;transition:all .2s;flex-shrink:0}
.ncc-upload-btn:hover{opacity:1;border-color:#4b8dff;background:var(--filter-bg)}
.ncc-photos{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
.ncc-photo{position:relative;width:72px;height:72px;border-radius:6px;overflow:hidden;cursor:zoom-in;border:1px solid var(--border);flex-shrink:0}
.ncc-photo img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .2s}
.ncc-photo:hover img{transform:scale(1.08)}
.ncc-photo-del{position:absolute;top:2px;right:2px;width:18px;height:18px;line-height:16px;text-align:center;background:rgba(0,0,0,0.75);color:#fff;border:none;border-radius:4px;font-size:12px;cursor:pointer;padding:0;opacity:0;transition:opacity .15s}
.ncc-photo:hover .ncc-photo-del{opacity:1}
.ncc-check{font-size:14px;flex-shrink:0}
.progress-fill.ncc-fill{background:linear-gradient(90deg,#ffd700,#b8860b)}
.stat-gold .num{color:#ffd700}