:root{--brand: #3ba68a;--brand-hover: #32907780;--brand-strong: #2e8f76;--brand-dark: #2c7f68;--brand-soft: #e9f6f2;--brand-ring: rgba(59, 166, 138, .22);--bg: #f5f5f7;--surface: #ffffff;--surface-2: #fafafc;--surface-3: #f0f0f4;--card: #ffffff;--ink: #1d1d1f;--border: #ebebf0;--border-strong: #d9d9e0;--divider: #f0f0f4;--text: #1d1d1f;--text-2: #6e6e73;--muted: #6e6e73;--text-3: #9a9aa2;--ok: #1f9e72;--ok-soft: #e6f6f0;--info: #0a76d8;--info-soft: #e8f2fe;--wait: #a8760a;--wait-soft: #fdf4e3;--attn: #cf5f0d;--attn-soft: #fdefe4;--danger: #d33b31;--danger-soft: #fdecea;--neutral: #6e6e73;--neutral-soft: #f0f0f4;--red: #d33b31;--red-light: #fdecea;--amber: #a8760a;--amber-light: #fdf4e3;--r-xs: 7px;--r-sm: 10px;--r-md: 12px;--r-lg: 16px;--r-xl: 22px;--r-pill: 999px;--sh-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 1px rgba(0, 0, 0, .03);--sh-2: 0 2px 8px rgba(0, 0, 0, .05), 0 10px 28px rgba(0, 0, 0, .05);--sh-3: 0 12px 32px rgba(0, 0, 0, .12), 0 32px 68px rgba(0, 0, 0, .14);--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s5: 20px;--s6: 24px;--s7: 32px;--font: "Sarabun", -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", sans-serif;--fs-xs: 12px;--fs-sm: 13px;--fs-base: 14px;--fs-md: 16px;--fs-lg: 19px;--fs-xl: 24px;--fs-2xl: 30px;--lh: 1.58;--topbar-h: 60px;--ease-out: cubic-bezier(.32, .72, 0, 1);--ease-in-out: cubic-bezier(.65, 0, .35, 1);--dur-1: .16s;--dur-2: .26s;--glass: saturate(180%) blur(20px)}[data-theme=dark]{--brand: #4fd6b0;--brand-hover: #3fc39e;--brand-strong: #6ee3c2;--brand-dark: #7fe8c9;--brand-soft: #16352e;--brand-ring: rgba(79, 214, 176, .26);--bg: #0a0a0c;--surface: #1c1c1e;--surface-2: #242426;--surface-3: #2c2c2e;--card: #1c1c1e;--ink: #f5f5f7;--border: #2c2c2e;--border-strong: #3a3a3c;--divider: #2a2a2c;--text: #f5f5f7;--text-2: #a1a1a6;--muted: #a1a1a6;--text-3: #7c7c81;--ok: #40d09a;--ok-soft: #10312a;--info: #5ea8ff;--info-soft: #13263b;--wait: #dcaa35;--wait-soft: #322612;--attn: #f28c4c;--attn-soft: #351f12;--danger: #ff6961;--danger-soft: #371b1a;--neutral: #a1a1a6;--neutral-soft: #2c2c2e;--red: #ff6961;--red-light: #371b1a;--amber: #dcaa35;--amber-light: #322612;--sh-1: 0 1px 2px rgba(0, 0, 0, .4);--sh-2: 0 2px 8px rgba(0, 0, 0, .4), 0 10px 28px rgba(0, 0, 0, .36);--sh-3: 0 12px 32px rgba(0, 0, 0, .55), 0 32px 68px rgba(0, 0, 0, .5)}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font);font-size:var(--fs-base);line-height:var(--lh);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{margin:0;font-weight:600;line-height:1.4;letter-spacing:-.011em}p{margin:0}a{color:var(--brand-strong);text-decoration:none}a:hover{text-decoration:underline}.num,.metric-value,.rail-count,table td.num,table th.num,.kpi-num,.score-num,.inst-kpi-num{font-variant-numeric:tabular-nums}input,select,textarea,button{font-family:inherit;font-size:var(--fs-base)}input[type=text],input[type=search],input[type=email],input[type=password],input[type=number],input[type=date],input[type=time],select,textarea{height:36px;padding:0 11px;border:1px solid var(--border-strong);border-radius:var(--r-md);background:var(--surface);color:var(--text);outline:none;transition:border-color .15s,box-shadow .15s}textarea{height:auto;padding:9px 11px;line-height:var(--lh)}input:focus,select:focus,textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-ring)}input::placeholder,textarea::placeholder{color:var(--text-3)}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:30px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2398a2ad' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center;background-size:15px}[data-theme=dark] select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236d7883' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E")}button{cursor:pointer}button:disabled,input:disabled,select:disabled{opacity:.55;cursor:not-allowed}.ico{flex:none;display:inline-block;vertical-align:-.15em}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:999px;border:3px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background:var(--text-3);background-clip:content-box}.u-row{display:flex;align-items:center;gap:var(--s2)}.u-spread{display:flex;align-items:center;justify-content:space-between;gap:var(--s3)}.u-muted{color:var(--muted)}.u-hide{display:none!important}:root{--brand-light:#e2f5ef}[data-theme=dark]{--brand-light:#173832}[data-theme=dark] .thailand-map-wrap{background:#1b2420}[data-theme=dark] .prov-path.no-data{fill:#2b3630}[data-theme=dark] .html-label{background:#1b2420bf;color:#dfeee8}[data-theme=dark] .map-back-overlay,[data-theme=dark] .map-title-overlay{background:#1b2420eb;color:var(--text);border-color:var(--border)}[data-theme=dark] input,[data-theme=dark] select{background:#1b2420;color:var(--text);border-color:#3a4740}[data-theme=dark] table.detail-table th{background:#212b26}[data-theme=dark] table.detail-table tbody tr.row-highlight{background:#4a3d17}[data-theme=dark] .config-box{background:#2a2416;border-color:#5a4a1e;color:var(--text)}[data-theme=dark] .lb-row,[data-theme=dark] .district-row{background:#212b26}[data-theme=dark] .lb-row:hover,[data-theme=dark] .district-row:hover{background:#283630}[data-theme=dark] table.summary-table tr:hover td,[data-theme=dark] table.detail-table tbody tr:hover{background:#212b26}[data-theme=dark] table.detail-table tbody tr.row-highlight:hover{background:#4a3d17}[data-theme=dark] .btn-outline{background:#1b2420;border-color:#3a4740;color:var(--text)}[data-theme=dark] .btn-outline:hover{background:#283630}[data-theme=dark] .people-group-title .badge{background:#00000047}[data-theme=dark] .district-row.needs-attention{background:#2e1c1a}[data-theme=dark] header.topbar{background:linear-gradient(120deg,#0f2a22,#1a4c3d);box-shadow:0 2px 14px #00000059}*{box-sizing:border-box}body{font-family:Sarabun,sans-serif;margin:0;background:var(--bg);color:var(--text)}header.topbar{background:linear-gradient(120deg,var(--brand-dark),var(--brand));color:#fff;padding:20px 28px 0;box-shadow:0 2px 10px #00000014}header.topbar h1{margin:0;font-size:21px;font-weight:700}header.topbar p{margin:4px 0 14px;font-size:13px;opacity:.9}.header-top-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.header-brand{display:flex;align-items:center;gap:12px}.brand-logo{width:46px;height:46px;border-radius:10px;background:#fff;padding:4px;object-fit:contain;box-shadow:0 1px 4px #00000026;flex-shrink:0}.theme-toggle-btn{background:#ffffff26;border:none;color:#fff;width:38px;height:38px;border-radius:50%;cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-toggle-btn:hover{background:#ffffff47}.module-switcher{display:flex;gap:8px;margin:14px 0 2px}.module-btn{background:#ffffff24;color:#fff;border:none;border-radius:10px;padding:9px 18px;font-family:inherit;font-size:13.5px;font-weight:700;cursor:pointer;opacity:.8;display:flex;align-items:center;gap:6px;transition:background .18s ease,opacity .18s ease,color .18s ease}.module-btn.active{background:#fff;color:var(--brand-dark);opacity:1}.module-btn:hover{opacity:1}.tabbar{display:flex;gap:4px;padding-top:4px}.tab-btn{background:#ffffff1f;color:#fff;border:none;border-radius:10px 10px 0 0;padding:10px 18px;font-family:inherit;font-size:14px;font-weight:600;cursor:pointer;opacity:.75;display:flex;align-items:center;gap:6px;transition:background .18s ease,opacity .18s ease,color .18s ease}.tab-btn.active{background:var(--bg);color:var(--brand-dark);opacity:1}.tab-btn.disabled{cursor:not-allowed;opacity:.55}.soon-badge{background:#fff3cd;color:#8a6d00;font-size:10px;font-weight:700;padding:2px 6px;border-radius:8px}.global-search-wrap{position:relative;margin:10px 0 4px;max-width:420px}.global-search-input{width:100%;padding:10px 14px;border-radius:10px;border:none;font-family:inherit;font-size:13.5px;background:#ffffffeb;color:var(--text);box-sizing:border-box}.global-search-results{position:absolute;top:calc(100% + 6px);left:0;right:0;background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px #0000002e;max-height:360px;overflow-y:auto;z-index:500}.global-search-item{display:flex;flex-direction:column;gap:2px;padding:10px 14px;cursor:pointer;border-bottom:1px solid var(--border)}.global-search-item:last-child{border-bottom:none}.global-search-item:hover{background:var(--brand-light)}.global-search-item .gs-title{font-size:13.5px;font-weight:600;color:var(--text)}.global-search-item .gs-sub{font-size:11.5px;color:var(--muted)}.global-search-item .gs-tag{display:inline-block;font-size:10.5px;font-weight:700;padding:1px 8px;border-radius:10px;background:var(--brand-light);color:var(--brand-dark);width:fit-content;margin-bottom:2px}.global-search-empty{padding:14px;font-size:12.5px;color:var(--muted);text-align:center}.container{padding:22px 28px 60px;max-width:1800px;width:96%;margin:0 auto}.tab-content{display:none}@keyframes tabFadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.tab-content.active{display:block;animation:tabFadeIn .28s ease}.config-box{background:#fffdf3;border:1px solid #edd888;border-radius:10px;padding:16px 18px;margin-bottom:20px;font-size:14px}.config-box.hidden{display:none}.config-box strong{display:block;margin-bottom:8px}.config-row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}.config-row .field{flex:1;min-width:220px}.config-row label{font-size:12px;color:var(--muted)}.config-box input{width:100%;padding:9px 10px;margin-top:4px;border:1px solid #ccc;border-radius:8px;font-family:inherit}.config-box button{background:var(--brand);color:#fff;border:none;padding:10px 20px;border-radius:8px;cursor:pointer;font-weight:600;font-family:inherit}.config-box button:hover{background:var(--brand-dark)}.config-hint{margin-top:8px;color:var(--muted);font-size:12px}.auth-gate{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;box-sizing:border-box}.auth-card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:32px 28px;max-width:380px;width:100%;box-shadow:0 10px 40px #0000001f;box-sizing:border-box}.auth-card .auth-logo{height:40px;margin-bottom:14px}.auth-card h1{font-size:19px;margin:0 0 4px;color:var(--text)}.auth-card .auth-sub{font-size:13px;color:var(--muted);margin:0 0 20px;line-height:1.5}.auth-field{margin-bottom:14px}.auth-field label{display:block;font-size:12px;color:var(--muted);margin-bottom:4px}.auth-field input{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-family:inherit;font-size:14px;background:var(--bg);color:var(--text);box-sizing:border-box}.auth-error{color:var(--red);font-size:13px;margin:-6px 0 14px;display:none;line-height:1.4}.auth-error.show{display:block}.auth-submit-btn{width:100%;padding:11px;background:var(--brand);color:#fff;border:none;border-radius:8px;font-weight:600;font-size:14px;cursor:pointer;font-family:inherit}.auth-submit-btn:hover{background:var(--brand-dark)}.auth-submit-btn:disabled{opacity:.6;cursor:not-allowed}.auth-toggle-link{text-align:center;margin-top:16px;font-size:13px;color:var(--muted)}.auth-toggle-link a{color:var(--brand-dark);cursor:pointer;text-decoration:underline}.auth-pending-icon{font-size:40px;text-align:center;margin-bottom:12px}.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:22px}.kpi-card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:18px 20px;box-shadow:0 1px 3px #0000000a;position:relative;overflow:hidden;transition:transform .18s ease,box-shadow .18s ease}.kpi-card:hover{transform:translateY(-3px);box-shadow:0 10px 24px #0000001a}.kpi-card .kpi-label{font-size:13px;color:var(--muted);font-weight:500}.kpi-card .kpi-num{font-size:30px;font-weight:700;margin-top:4px}.kpi-card .kpi-sub{font-size:12px;color:var(--muted);margin-top:2px}.kpi-card.total .kpi-num{color:#2c3e37}.kpi-card.yes .kpi-num{color:var(--brand-dark)}.kpi-card.no .kpi-num{color:var(--red)}.kpi-card.pct .kpi-num{color:#8a6d00}.kpi-icon{position:absolute;right:16px;top:16px;font-size:26px;opacity:.55}.kpi-card.hero{grid-column:span 2;background:linear-gradient(135deg,var(--brand-dark),var(--brand));color:#fff;border-color:transparent}.kpi-card.hero .kpi-label{color:#ffffffd9}.kpi-card.hero .kpi-num{color:#fff;font-size:38px}.kpi-card.hero .kpi-sub{color:#ffffffd9}.kpi-card.hero .kpi-icon{opacity:.35;font-size:30px}.kpi-card.hero:hover{box-shadow:0 12px 28px #2c7f6859}.kpi-sparkline-wrap{margin-top:8px;height:28px}.kpi-sparkline{width:100%;height:28px;display:block}.section{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:20px 22px;margin-bottom:20px;box-shadow:0 1px 3px #0000000a}.section h2{margin:0 0 14px;font-size:16px;font-weight:700;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.section h2 .badge{font-size:11px;font-weight:600;background:var(--brand-light);color:var(--brand-dark);padding:2px 9px;border-radius:20px}.chart-wrap{height:360px}table.summary-table{width:100%;border-collapse:collapse;font-size:13.5px}table.summary-table th,table.summary-table td{padding:9px 10px;text-align:left;border-bottom:1px solid var(--border)}table.summary-table th{color:var(--muted);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.03em}table.summary-table th.num,table.summary-table td.num{text-align:center;font-variant-numeric:tabular-nums}table.summary-table tr:hover td{background:#fafcfa}.bar-cell{display:flex;align-items:center;gap:8px;min-width:160px}.bar-track{flex:1;height:8px;background:var(--red-light);border-radius:6px;overflow:hidden}.bar-fill{height:100%;background:var(--brand);border-radius:6px 0 0 6px}.pct-text{font-size:12px;color:var(--muted);min-width:40px;text-align:right}.filters{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px;align-items:flex-end}.filters div{display:flex;flex-direction:column;font-size:12px;color:var(--muted)}select,input[type=text]{padding:9px 10px;border:1px solid #ccc;border-radius:8px;min-width:160px;font-family:inherit;font-size:13.5px}.btn{padding:9px 18px;border:none;border-radius:8px;cursor:pointer;font-weight:600;font-family:inherit;font-size:13.5px;transition:background .18s ease,box-shadow .18s ease,transform .1s ease}.btn:active{transform:translateY(1px)}.btn-brand{background:var(--brand);color:#fff}.btn-brand:hover{background:var(--brand-dark);box-shadow:0 2px 10px #2c7f6840}.btn-outline{background:#fff;border:1px solid var(--border);color:var(--text)}.btn-outline:hover{background:var(--brand-light);border-color:var(--brand)}table.detail-table{width:100%;border-collapse:collapse;font-size:13px}table.detail-table th,table.detail-table td{padding:8px 10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}table.detail-table th{background:#f5f8f6;position:sticky;top:0;box-shadow:0 1px 0 var(--border)}table.detail-table tbody tr:hover{background:#f7faf7}table.detail-table tbody tr.row-highlight{background:#fff3cd}.tag{padding:2px 9px;border-radius:10px;font-size:12px;font-weight:700}.tag-Y{background:var(--brand-light);color:var(--brand-dark)}.tag-N{background:var(--red-light);color:var(--red)}.table-wrap{overflow:auto;max-height:60vh;border-radius:10px;border:1px solid var(--border)}#status{font-size:12.5px;color:var(--muted);margin-bottom:12px}.empty-state-cell{text-align:center;padding:34px 20px!important;color:var(--muted)}.empty-state-cell .empty-icon{display:block;font-size:30px;margin-bottom:8px;opacity:.7}.empty-state-cell .empty-text{font-size:13px;line-height:1.6}.toggle-detail{display:flex;justify-content:space-between;align-items:center;cursor:pointer}.chevron{transition:transform .2s}.scoreboard{display:flex;align-items:center;gap:18px;background:#0f2418;color:#fff;border-radius:14px;padding:20px 24px;margin-bottom:18px;box-shadow:0 4px 16px #00000026}.score-side{text-align:center;min-width:130px}.score-num{font-size:34px;font-weight:700;font-variant-numeric:tabular-nums}.score-label{font-size:12px;opacity:.75;margin-top:2px;text-transform:uppercase;letter-spacing:.04em}.score-side.yes .score-num{color:#4fd6b0}.score-side.no .score-num{color:#ff6b60}.score-mid{flex:1}.score-bar{position:relative;height:26px;border-radius:13px;overflow:hidden;background:#1c3327;display:flex}.score-bar-fill-y{background:linear-gradient(90deg,#2c7f68,#4fd6b0);height:100%;transition:width .8s ease}.score-bar-fill-n{background:linear-gradient(90deg,#ff6b60,#e0483e);height:100%;transition:width .8s ease}.score-pct-labels{display:flex;justify-content:space-between;margin-top:6px;font-size:12px;opacity:.85}.map-layout{display:grid;grid-template-columns:1fr 300px;gap:16px}@media(max-width:900px){.map-layout{grid-template-columns:1fr}}.map-search-row{display:flex;gap:8px;margin-bottom:12px}.map-search-row input{flex:1}#mapSearchStatus,#iotMapSearchStatus{font-size:12px;color:var(--muted);margin-top:4px;min-height:16px}.thailand-map-wrap{background:#eef4f0;border-radius:12px;padding:12px;display:flex;justify-content:center;position:relative;overflow:hidden}#thailandSvg,#iotSvg{width:100%;height:auto}.prov-path.no-data{stroke:#fff;stroke-width:.7;fill:#e2e6e4;cursor:default}.prov-path.has-data{cursor:pointer}.prov-path.has-data:hover{filter:brightness(1.08)}.prov-outline{fill:none;stroke:#fff;stroke-width:.7;pointer-events:none}.dist-path{cursor:pointer}.dist-path:hover{filter:brightness(1.08)}.dist-path-flat{stroke:#fff;stroke-width:.8;cursor:default}.dist-outline{fill:none;stroke:#fff;stroke-width:.8;pointer-events:none}.map-label{font-family:Sarabun,sans-serif;text-anchor:middle;pointer-events:none;paint-order:stroke;stroke:#eef4f0;stroke-width:2px;fill:#33403a;font-weight:500}#mapLabelsHtml,#iotMapLabelsHtml{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.html-label{position:absolute;transform:translate(-50%,-50%);font-family:Sarabun,sans-serif;font-size:10.5px;font-weight:500;color:#2c3a34;background:#eef4f0a6;padding:0 4px;border-radius:3px;white-space:nowrap;line-height:1.5}.map-back-overlay{position:absolute;top:14px;left:14px;z-index:5;background:#fffffff0;border:1px solid var(--border);border-radius:8px;padding:8px 14px;font-size:13px;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #00000026;display:none;font-family:inherit}.map-back-overlay.visible{display:inline-block}.map-title-overlay{position:absolute;top:14px;right:14px;z-index:5;background:#fffffff0;border:1px solid var(--border);border-radius:8px;padding:6px 12px;font-size:12.5px;font-weight:600;color:var(--text);max-width:60%;text-align:right}.map-loading{font-size:12.5px;color:var(--muted);text-align:center;padding:20px}.spinner-inline{display:inline-block;width:13px;height:13px;margin-right:7px;vertical-align:middle;border:2px solid rgba(0,0,0,.15);border-top-color:var(--brand);border-radius:50%;animation:spinInline .7s linear infinite}[data-theme=dark] .spinner-inline{border-color:#ffffff26;border-top-color:var(--brand)}@keyframes spinInline{to{transform:rotate(360deg)}}.map-caption{font-size:11.5px;color:var(--muted);text-align:center;margin-top:6px}.map-legend{display:flex;gap:20px;align-items:center;margin-top:10px;font-size:12.5px;color:var(--muted);flex-wrap:wrap;justify-content:center}.legend-dot{width:12px;height:12px;border-radius:50%;display:inline-block;margin-right:4px;vertical-align:middle}.map-side-panel{display:flex;flex-direction:column;min-height:0}.leaderboard{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0;overflow:auto}.lb-title{font-size:12px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:2px}.lb-row{display:flex;align-items:center;gap:10px;background:#fafcfa;border:1px solid var(--border);border-radius:10px;padding:8px 10px;cursor:pointer}.lb-row:hover{background:#f2f7f4}.lb-rank{width:24px;height:24px;border-radius:50%;background:var(--border);color:var(--text);font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lb-rank.gold{background:#f5c518;color:#3a2c00}.lb-rank.silver{background:#c9ccd1;color:#2b2b2b}.lb-rank.bronze{background:#d99150;color:#3a1e00}.lb-info{flex:1;min-width:0}.lb-name{font-size:13px;font-weight:600;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lb-count{font-size:11.5px;font-weight:500;color:var(--muted);margin-bottom:4px}.lb-bar-track{height:6px;background:var(--red-light);border-radius:4px;overflow:hidden}.lb-bar-fill{height:100%;background:var(--brand);border-radius:4px;transition:width .6s ease}.lb-pct{font-size:13px;font-weight:700;color:var(--brand-dark);min-width:38px;text-align:right}.province-detail,.people-panel{margin-top:18px;display:none}.detail-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;flex-wrap:wrap;gap:8px}.people-group{margin-bottom:18px}.people-group-title{font-size:14px;font-weight:700;padding:6px 12px;border-radius:8px;margin-bottom:8px;display:inline-flex;align-items:center;gap:6px}.people-group-title.group-yes{background:var(--brand-light);color:var(--brand-dark)}.people-group-title.group-no{background:var(--red-light);color:var(--red)}.people-group-title.group-blocked{background:var(--amber-light);color:var(--amber)}.people-group-title .badge{background:#fff9}.qa-presets{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}.qa-chip{background:var(--brand-light);color:var(--brand-dark);border:none;padding:7px 14px;border-radius:20px;font-size:12.5px;cursor:pointer;font-family:inherit}.qa-chip:hover{filter:brightness(.95)}.qa-log{display:flex;flex-direction:column;gap:10px;min-height:120px;max-height:420px;overflow-y:auto;margin-bottom:14px;padding:4px}.qa-msg{padding:10px 14px;border-radius:12px;font-size:14px;line-height:1.55;max-width:80%;white-space:pre-line}.qa-user{align-self:flex-end;background:var(--brand);color:#fff;border-bottom-right-radius:2px}.qa-bot{align-self:flex-start;background:var(--bg);border:1px solid var(--border);border-bottom-left-radius:2px}.qa-input-row{display:flex;gap:10px}.qa-input-row input{flex:1}.qa-bubble-btn{position:fixed;bottom:24px;right:24px;width:60px;height:60px;border-radius:50%;background:#fff;border:none;box-shadow:0 6px 20px #00000040;cursor:pointer;z-index:9990;display:flex;align-items:center;justify-content:center;padding:6px;box-sizing:border-box;transition:transform .18s ease,box-shadow .18s ease}.qa-bubble-btn:hover{transform:scale(1.06);box-shadow:0 8px 26px #00000052}.qa-bubble-btn img{width:100%;height:100%;object-fit:contain;border-radius:50%}.qa-popup-panel{display:none;position:fixed;bottom:96px;right:24px;width:360px;max-width:calc(100vw - 32px);max-height:min(70vh,560px);background:var(--card);border:1px solid var(--border);border-radius:16px;box-shadow:0 12px 36px #00000047;z-index:9989;flex-direction:column;overflow:hidden}.qa-popup-panel.open{display:flex}.qa-popup-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px 16px;background:linear-gradient(120deg,var(--brand-dark),var(--brand));color:#fff;flex-shrink:0}.qa-popup-header h2{margin:0;font-size:14.5px;color:#fff}.qa-popup-close{background:#ffffff2e;border:none;color:#fff;width:26px;height:26px;border-radius:50%;cursor:pointer;font-size:15px;line-height:1;flex-shrink:0}.qa-popup-close:hover{background:#ffffff4d}.qa-popup-body{padding:16px;overflow-y:auto}@media(max-width:480px){.qa-popup-panel{right:16px;bottom:88px;width:calc(100vw - 32px)}.qa-bubble-btn{right:16px;bottom:16px}}.detail-header h3{margin:0;font-size:16px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.district-list{display:flex;flex-direction:column;gap:8px}.district-row{display:grid;grid-template-columns:140px 1fr 170px 50px;align-items:center;gap:12px;background:#fafcfa;border:1px solid var(--border);border-left:4px solid var(--brand);border-radius:8px;padding:9px 12px;cursor:pointer}.district-row:hover{background:#f2f7f4}.district-row.needs-attention{border-left-color:var(--red);background:#fff8f7}.dr-name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dr-bar-track{height:7px;background:var(--red-light);border-radius:4px;overflow:hidden}.dr-bar-fill{height:100%;background:var(--brand);border-radius:4px}.dr-stats{font-size:12px;color:var(--muted);white-space:nowrap}.dr-pct{font-size:13px;font-weight:700;text-align:right}@media(max-width:700px){.district-row{grid-template-columns:1fr}}.soon-card{text-align:center;padding:60px 20px;color:var(--muted)}.soon-card .icon{font-size:44px;margin-bottom:10px}.soon-card h3{color:var(--text);margin:0 0 8px}.plan-person-results{max-height:220px;overflow:auto;border:1px solid var(--border);border-radius:8px;margin-top:8px}.plan-person-results:empty{display:none;border:none}.plan-person-result-item{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-bottom:1px solid var(--border);gap:10px}.plan-person-result-item:last-child{border-bottom:none}.plan-person-result-item .ppr-info{font-size:13px;color:var(--text)}.plan-week-input,.plan-note-input{width:100%;min-width:0;box-sizing:border-box;padding:5px 8px;border:1px solid var(--border);border-radius:6px;font-family:inherit;font-size:13px;background:var(--card);color:var(--text)}.plan-month-week-select{width:100%;min-width:145px;box-sizing:border-box;padding:5px 8px;border:1px solid var(--border);border-radius:6px;font-family:inherit;font-size:13px;background:var(--card);color:var(--text)}.plan-remove-btn{background:none;border:none;cursor:pointer;font-size:16px;color:#c0392b}.plan-remove-btn:hover{opacity:.7}.people-group-actions{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 10px}.btn-xs{padding:5px 12px;font-size:12px}.plan-added-tag{font-size:12px;color:var(--brand-dark);font-weight:600;white-space:nowrap}.plan-range-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:4px 0 16px}.plan-range-label{font-size:13px;color:var(--muted);font-weight:600;margin-right:2px}.range-btn{background:var(--card);border:1px solid var(--border);color:var(--text);padding:6px 16px;border-radius:20px;font-size:12.5px;cursor:pointer;font-family:inherit;font-weight:600}.range-btn:hover{filter:brightness(.97)}.range-btn.active{background:var(--brand);color:#fff;border-color:var(--brand)}.plan-chart-wrap{height:220px;margin-bottom:22px}.plan-timeline-cols{display:grid;grid-template-columns:1fr 1fr;gap:20px}@media(max-width:800px){.plan-timeline-cols{grid-template-columns:1fr}}.plan-timeline-heading{font-size:14px;font-weight:700;margin:0 0 12px;padding:6px 12px;border-radius:8px;display:inline-block}.plan-timeline-heading.past{background:var(--red-light);color:var(--red)}.plan-timeline-heading.upcoming{background:var(--brand-light);color:var(--brand-dark)}.plan-timeline-list{max-height:360px;overflow:auto;display:flex;flex-direction:column;gap:10px}.plan-timeline-empty{color:var(--muted);font-size:13px;padding:18px;text-align:center;border:1px dashed var(--border);border-radius:10px}.plan-day-group{border:1px solid var(--border);border-radius:10px;padding:10px 12px;background:var(--card)}.plan-day-header{font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}.plan-day-header .badge{background:var(--brand-light);color:var(--brand-dark);font-size:11px;padding:2px 9px;border-radius:20px;font-weight:600;flex-shrink:0}.plan-day-header.is-today .badge{background:var(--brand);color:#fff}.plan-day-person{display:flex;justify-content:space-between;gap:10px;font-size:13px;padding:5px 0;border-top:1px dashed var(--border)}.plan-day-person:first-child{border-top:none}.plan-day-person-loc{color:var(--muted);font-size:12px;white-space:nowrap}.plan-map-input{margin-bottom:4px}.plan-map-actions{display:flex;align-items:center;gap:10px;font-size:11px}.plan-meta-line{font-size:10.5px;color:var(--muted);margin-top:4px;white-space:normal}body.readonly-mode #planTbody select,body.readonly-mode #planTbody input,body.readonly-mode #iotPlanGroups select,body.readonly-mode #iotPlanGroups input,body.readonly-mode #iotPlanFinalizedGroups select,body.readonly-mode #iotPlanFinalizedGroups input,body.readonly-mode #trainingConfirmTbody input{pointer-events:none;background:var(--bg)!important;opacity:.7}body.readonly-mode #trainingConfirmTbody .btn-linklike{display:none!important}.dropdown-manager{border:1px solid var(--border);border-radius:8px;margin:4px 0 10px;background:var(--card)}.dropdown-manager-header{display:flex;align-items:center;gap:8px;padding:9px 12px;cursor:pointer;flex-wrap:wrap}.dropdown-manager-body{padding:4px 12px 12px;display:flex;flex-wrap:wrap;gap:14px}.dropdown-manager-cat{flex:1;min-width:220px;border:1px solid var(--border);border-radius:8px;padding:8px 10px;background:var(--bg)}.dropdown-manager-cat-title{font-weight:700;font-size:13px;margin-bottom:6px}.dropdown-chips{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:7px}.dropdown-chip{display:inline-flex;align-items:center;gap:4px;font-size:12px;padding:2px 8px;border-radius:999px;border:1px solid var(--border)}.dropdown-chip.is-default{background:var(--card);color:var(--muted)}.dropdown-chip.is-custom{background:#ecfdf5;color:#065f46;border-color:#6ee7b7}.dropdown-chip.is-custom button{border:none;background:transparent;color:#dc2626;cursor:pointer;font-size:12px;line-height:1;padding:0 1px}.dropdown-add-row{display:flex;gap:6px}.dropdown-add-row input{flex:1;min-width:0;padding:5px 8px;border:1px solid var(--border);border-radius:6px;font-family:inherit;font-size:12.5px;background:var(--card);color:var(--text)}body.readonly-mode .dropdown-add-row,body.readonly-mode .dropdown-chip.is-custom button{display:none!important}.iot-map-name-toggle{cursor:pointer;color:var(--brand);font-weight:600}.iot-map-name-toggle .caret{display:inline-block;transition:transform .2s;font-size:10px}.iot-map-name-toggle .caret.open{transform:rotate(90deg)}.iot-map-detail-row>td{background:var(--bg);padding:0!important}.iot-map-detail{padding:10px 12px}.iot-map-detail-ctx{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:12px;color:var(--muted);margin-bottom:9px;padding-bottom:8px;border-bottom:1px dashed var(--border)}.iot-map-detail-ctx b{color:var(--text);font-weight:600}.iot-map-detail-empty{font-size:13px;color:var(--muted);padding:4px 0}.iot-map-detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px 12px}.iot-map-detail-grid label{display:flex;flex-direction:column;gap:3px;font-size:11.5px;font-weight:600;color:var(--muted)}.iot-map-detail-grid label.iot-map-detail-wide{grid-column:1 / -1}.iot-map-detail-grid select,.iot-map-detail-grid input{padding:5px 8px;border:1px solid var(--border);border-radius:6px;font-family:inherit;font-size:13px;background:var(--card);color:var(--text);font-weight:400}.iot-map-detail-foot{margin-top:9px}body.readonly-mode .iot-map-detail select,body.readonly-mode .iot-map-detail input{pointer-events:none;opacity:.7;background:var(--bg)!important}body.readonly-mode .iot-map-detail-empty button,body.readonly-mode .iot-map-detail-foot{display:none!important}#installerShell{max-width:900px;margin:12px auto;padding:16px 16px 44px;background:var(--bg);color:var(--text);border-radius:16px;box-shadow:0 6px 24px #00000026}#installerShell .inst-team-name,#installerShell h3,#installerShell h4,#installerShell b,#installerShell strong{color:var(--text)}.inst-topbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin:6px 0 10px}.inst-team-name{font-size:16px}.inst-actions{display:flex;gap:8px;flex-wrap:wrap}.inst-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:12px}.inst-kpi{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:10px 8px;text-align:center}.inst-kpi-num{font-size:22px;font-weight:800}.inst-kpi-label{font-size:11.5px;color:var(--muted);margin-top:2px}.inst-kpi.ok .inst-kpi-num{color:#16a34a}.inst-kpi.pending .inst-kpi-num{color:#d97706}.inst-kpi.money .inst-kpi-num{color:#2563eb}.inst-tabbar{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap}.inst-tab-btn{flex:1;min-width:120px;padding:10px;border:1px solid var(--border);border-radius:8px;background:var(--card);cursor:pointer;font-family:inherit;font-size:14px;font-weight:600;color:var(--text)}.inst-tab-btn.active{background:var(--brand);color:#fff;border-color:var(--brand)}.inst-group{display:flex;align-items:center;gap:8px;cursor:pointer;padding:9px 11px;border:1px solid var(--border);border-radius:8px;margin-top:8px;background:var(--card)}.inst-group.sub{padding:7px 10px;background:var(--bg);font-size:13.5px}.inst-group-count{font-size:12px;color:var(--muted)}.inst-job-card{border:1px solid var(--border);border-radius:10px;padding:11px 13px;margin:8px 0;background:var(--card);overflow-x:clip}.inst-job-card.row-done{opacity:.72}.inst-list-row{display:flex;align-items:center;gap:10px;padding:13px 12px;border:1px solid var(--border);border-radius:10px;margin:7px 0;background:var(--card);cursor:pointer;transition:background .12s ease}.inst-list-row:active{background:var(--brand-light)}.inst-list-name{font-size:15px;font-weight:700}.inst-list-sub{font-size:12.5px;color:var(--muted);margin-top:2px}.inst-list-go{font-size:24px;line-height:1;color:var(--muted);flex-shrink:0}.inst-list-row.row-done,.inst-list-row.row-cancelled{opacity:.6}.inst-detail-back{margin-bottom:10px}.note-flag{display:block;margin-top:6px;background:#fff3cd;color:#7a4e00;border:1px solid #ffd666;border-left:4px solid #f0a500;border-radius:6px;padding:6px 10px;font-size:12.5px;font-weight:600;line-height:1.35;word-break:break-word}[data-theme=dark] .note-flag{background:#3a2f12;color:#ffd98a;border-color:#5a4a1e;border-left-color:#c79a2e}.note-input-filled{background:#fff8e1!important;border-color:#f0a500!important;box-shadow:0 0 0 2px #f0a5002e;font-weight:600}[data-theme=dark] .note-input-filled{background:#3a2f12!important;border-color:#c79a2e!important;color:var(--text)}.call-wrap{display:grid;grid-template-columns:270px 1fr;gap:14px;align-items:start;margin-top:12px}.call-list{background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:10px;position:sticky;top:8px;max-height:80vh;overflow:auto}.call-list-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;font-size:13px;font-weight:600}.call-remain{background:var(--red-light);color:var(--red);font-size:12px;padding:2px 9px;border-radius:20px}.call-row{padding:8px 9px;border-radius:8px;cursor:pointer;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:2px}.call-row:hover{background:var(--brand-light)}.call-row.on{background:var(--brand-light);box-shadow:inset 3px 0 0 var(--brand)}.call-row-name{font-size:13px;font-weight:600}.call-row-area{font-size:11px;color:var(--muted)}.call-dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:6px;flex-shrink:0}.call-form-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:16px 18px}.call-meter{display:flex;align-items:center;gap:10px;background:var(--brand-light);border-radius:8px;padding:8px 12px;margin:12px 0;font-size:13px;color:var(--brand-dark);font-weight:600}.call-meter-bar{flex:1;height:8px;background:var(--card);border-radius:20px;overflow:hidden}.call-meter-fill{height:100%;background:var(--brand);transition:width .2s ease}.call-sec{font-size:12px;color:var(--muted);margin:14px 0 6px;font-weight:600}.call-fields{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:9px 12px}.call-fields label{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--muted)}.call-fields label span{color:var(--text);font-weight:600}.call-field-miss select,.call-field-miss input{border-color:#ef9f27;background:#fdf7ec}[data-theme=dark] .call-field-miss select,[data-theme=dark] .call-field-miss input{background:#3a2f12}.call-ask{display:inline-block;background:#faeeda;color:#854f0b;font-size:10px;font-weight:600;padding:1px 6px;border-radius:20px;margin-left:5px}.call-empty{color:var(--muted);text-align:center;padding:40px 10px}@media(max-width:760px){.call-wrap{grid-template-columns:1fr}.call-list{position:static;max-height:none}}.inst-job-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap}.inst-job-name{font-size:15.5px;font-weight:700}.inst-job-when{font-size:12.5px;color:var(--muted);white-space:nowrap}.inst-job-area{font-size:13px;color:var(--muted);margin-top:3px}.inst-job-detail{color:var(--text)}.inst-badge{display:inline-block;font-size:11px;font-weight:700;padding:1px 8px;border-radius:999px;margin-left:4px}.inst-badge.s-pending{background:#fef3c7;color:#92400e}.inst-badge.s-done{background:#dcfce7;color:#166534}.inst-badge.s-cancelled{background:#fee2e2;color:#991b1b}.inst-job-actions{display:flex;gap:8px;margin-top:9px;flex-wrap:wrap}.inst-act-btn{display:inline-flex;align-items:center;gap:5px;padding:9px 14px;border-radius:8px;font-size:14px;font-weight:700;text-decoration:none}.inst-act-btn.call{background:#16a34a;color:#fff}.inst-act-btn.nav{background:#2563eb;color:#fff}.inst-act-btn.disabled{background:var(--bg);color:var(--muted)}.inst-job-edit{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(140px,100%),1fr));gap:8px 10px;margin-top:10px;padding-top:9px;border-top:1px dashed var(--border)}.inst-job-edit label{display:flex;flex-direction:column;gap:3px;font-size:11.5px;font-weight:600;color:var(--muted);min-width:0}.inst-job-edit label.inst-pay-check{flex-direction:row;align-items:center;gap:6px;font-size:13px;color:var(--text);align-self:end}.inst-job-edit label.inst-note-wide{grid-column:1 / -1}.inst-job-edit select,.inst-job-edit input[type=text],.inst-job-edit input[type=number]{padding:8px;border:1px solid var(--border);border-radius:7px;font-family:inherit;font-size:14px;background:var(--card);color:var(--text);font-weight:400;width:100%;max-width:100%;min-width:0;box-sizing:border-box}.inst-job-edit label.inst-note-wide>span{display:flex;gap:6px;min-width:0}.inst-job-edit label.inst-note-wide>span>input{flex:1 1 auto;min-width:0}.inst-job-edit label.inst-note-wide>span>button{flex:0 0 auto}.inst-nomap{margin-top:12px;padding:10px 12px;background:#fffbeb;border:1px solid #fbbf24;border-radius:8px;font-size:13px;color:#92400e}@media(max-width:640px){.inst-summary{grid-template-columns:repeat(2,1fr)}}.inst-act-btn.submit{background:#7c3aed;color:#fff}.fs-modal{max-width:560px}#fieldSubBody .fs-job{font-weight:700;font-size:14.5px;margin-bottom:10px}.fs-section{margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--border)}.fs-section:last-child{border-bottom:none}.fs-section h4{margin:0 0 8px;font-size:13.5px}.fs-plot-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:6px}.fs-section>input[type=text]{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:7px;font-family:inherit;font-size:13px;background:var(--card);color:var(--text);box-sizing:border-box}.fs-hint{font-size:11.5px;color:var(--muted);margin-top:5px}.fs-photos{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.fs-slot{border:1px solid var(--border);border-radius:8px;padding:8px;text-align:center;background:var(--bg)}.fs-slot-label{font-size:11.5px;font-weight:600;margin-bottom:6px;min-height:28px}.fs-thumb{width:100%;height:96px;object-fit:cover;border-radius:6px;display:block}.fs-thumb.fs-empty{display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:12px;background:var(--card);border:1px dashed var(--border)}.fs-upload-btn{display:inline-block;margin-top:7px;padding:7px 12px;border-radius:7px;background:var(--brand);color:#fff;font-size:12.5px;font-weight:600;cursor:pointer}.fs-doc{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;cursor:pointer}.fs-del-btn{display:inline-block;margin-top:6px;margin-left:6px;padding:6px 10px;border-radius:7px;background:#fff;border:1px solid #fca5a5;color:#dc2626;font-size:12px;font-weight:600;cursor:pointer}.fs-pick{margin-top:8px;border-top:1px dashed var(--border);padding-top:7px;text-align:left}.fs-pick-head{font-size:11.5px;color:var(--muted);margin-bottom:6px}.fs-pick-row{display:flex;gap:7px;overflow-x:auto;padding-bottom:3px}.fs-pick-item{flex:0 0 auto;width:92px;border:2px solid transparent;border-radius:7px;padding:3px;background:var(--card);text-align:center}.fs-pick-item.on{border-color:#16a34a}.fs-pick-item img{width:100%;height:62px;object-fit:cover;border-radius:5px;display:block}.fs-pick-meta{font-size:10px;color:var(--muted);line-height:1.35;margin:3px 0 4px}.fs-pick-tag{display:inline-block;font-size:10.5px;font-weight:700;color:#fff;background:#16a34a;border-radius:999px;padding:1px 8px}.fs-drive{background:#f5f3ff;border:1px solid #ddd6fe;border-radius:8px;padding:10px 12px}.fs-drive h4{color:#6d28d9}.fs-ts-badge{margin-top:6px;font-size:11px;padding:3px 7px;border-radius:6px;display:inline-flex;align-items:center;gap:4px}.fs-ts-badge.ok{background:#dcfce7;color:#15803d}.fs-ts-badge.need{background:#fef3c7;color:#92400e}.fs-ts-btn{display:block;width:100%;margin-top:6px;padding:6px 8px;border-radius:7px;background:#fff;border:1px solid var(--border);color:var(--text);font-size:11.5px;font-weight:600;cursor:pointer}.fts-preview{margin-bottom:10px;border-radius:8px;overflow:hidden;background:var(--bg)}.fts-preview img{width:100%;max-height:220px;object-fit:contain;display:block}.fts-ocr-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}.fts-hint{font-size:11.5px;color:var(--muted)}.fts-form{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:10px 0}.fts-form label{display:flex;flex-direction:column;gap:4px;font-size:12.5px;font-weight:600;color:var(--text)}.fts-form input,.fts-form textarea{padding:8px 10px;border:1px solid var(--border);border-radius:7px;font-family:inherit;font-size:13px;background:var(--card);color:var(--text);box-sizing:border-box}.fts-form textarea{resize:vertical;min-height:64px}.fts-form .fts-wide{grid-column:1 / -1}.fts-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}@media(max-width:480px){.fts-form{grid-template-columns:1fr}}.inst-preview-banner{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;background:#fef3c7;border:1px solid #fbbf24;color:#92400e;border-radius:8px;padding:8px 12px;margin:6px 0 10px;font-size:13px}.um-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:1000;display:flex;align-items:flex-start;justify-content:center;padding:24px 12px;overflow:auto}.um-modal{background:var(--card);border-radius:12px;width:100%;max-width:720px;padding:16px 18px 20px;box-shadow:0 10px 40px #00000040}.um-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}.um-head h3{margin:0}.um-note{font-size:12.5px;color:var(--muted);background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:8px 10px;margin:6px 0 12px}.um-section{margin-bottom:16px}.um-section h4{margin:0 0 8px;font-size:13.5px}.um-addform{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.um-addform input,.um-addform select{padding:8px 10px;border:1px solid var(--border);border-radius:7px;font-family:inherit;font-size:13px;background:var(--card);color:var(--text)}.um-addform input{flex:1;min-width:130px}.um-list{display:flex;flex-direction:column;gap:6px;max-height:320px;overflow:auto}.um-row{display:flex;align-items:center;gap:8px;padding:7px 9px;border:1px solid var(--border);border-radius:8px;background:var(--bg);flex-wrap:wrap}.um-row-email{flex:1;min-width:160px;font-size:13px}.um-row-email b{display:block}.um-row-email span{font-size:11.5px;color:var(--muted)}.um-row select,.um-row input{padding:6px 8px;border:1px solid var(--border);border-radius:6px;font-family:inherit;font-size:12.5px;background:var(--card);color:var(--text)}.um-row input{width:110px}body.readonly-mode .plan-remove-btn,body.readonly-mode #planBulkOperatorBar,body.readonly-mode #iotPlanBulkOperatorBar,body.readonly-mode .readonly-hide{display:none!important}.readonly-badge{display:inline-block;background:#fef3c7;color:#92400e;border:1px solid #fbbf24;border-radius:999px;padding:2px 10px;font-size:11.5px;font-weight:700;white-space:nowrap}.plan-map-link{color:var(--brand-dark);text-decoration:none;font-weight:600;white-space:nowrap}.plan-map-link:hover{text-decoration:underline}.btn-linklike{background:none;border:none;padding:0;margin:0;color:var(--muted);text-decoration:underline;cursor:pointer;font-size:11px;font-family:inherit;white-space:nowrap}.btn-linklike:hover{color:var(--text)}.toast-container{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:9999;display:flex;flex-direction:column;gap:10px;align-items:center;pointer-events:none;width:100%;padding:0 16px;box-sizing:border-box}.toast{display:flex;align-items:flex-start;gap:10px;background:var(--card);border:1px solid var(--border);border-left:4px solid var(--brand);border-radius:10px;padding:12px 16px;box-shadow:0 6px 20px #0000002e;max-width:420px;width:max-content;font-size:13.5px;color:var(--text);opacity:0;transform:translateY(12px);transition:opacity .25s ease,transform .25s ease;pointer-events:auto}.toast.show{opacity:1;transform:translateY(0)}.toast-icon{flex-shrink:0;font-size:16px;line-height:1.4}.toast-msg{line-height:1.5;word-break:break-word}.toast-success{border-left-color:var(--brand)}.toast-error{border-left-color:var(--red)}.toast-warn{border-left-color:#d9a441}.toast-info{border-left-color:#4a90d9}.confirm-modal-overlay{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:9998;align-items:center;justify-content:center;padding:20px;box-sizing:border-box}.confirm-modal{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:24px 26px;max-width:380px;width:100%;box-shadow:0 10px 40px #0000004d}.confirm-modal p{margin:0 0 22px;font-size:14.5px;color:var(--text);line-height:1.6}.confirm-modal-actions{display:flex;justify-content:flex-end;gap:10px}.doc-checklist-modal{max-width:440px}.doc-checklist-modal h3{margin:0 0 4px;font-size:16px}.doc-checklist-modal .doc-checklist-sub{font-size:12.5px;color:var(--muted);margin:0 0 16px}.doc-checklist-items{display:flex;flex-direction:column;gap:10px;margin-bottom:20px}.doc-checklist-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--border);border-radius:8px}.doc-checklist-item input[type=checkbox]{width:18px;height:18px;flex-shrink:0;cursor:pointer}.doc-checklist-item label{flex:1;font-size:13.5px;cursor:pointer}.doc-checklist-item .doc-checklist-source{font-size:10.5px;color:var(--muted)}.doc-checklist-plot-field{margin:-8px 0 16px}.doc-checklist-plot-field label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:6px}.doc-checklist-plot-row{display:flex;gap:8px;align-items:center}.doc-checklist-plot-row input{flex:1}.doc-checklist-plot-field .doc-checklist-source{font-size:10.5px;color:var(--muted);margin-top:4px;display:inline-block}.plan-progress-wrap{margin:4px 0 20px}.plan-progress-label{display:flex;justify-content:space-between;font-size:13px;font-weight:700;margin-bottom:6px}.plan-progress-track{position:relative;height:10px;border-radius:6px;background:var(--border);overflow:hidden;display:flex}.plan-progress-fill{height:100%;transition:width .3s ease}.plan-progress-fill.cancelled{background:var(--red);opacity:.55}.plan-progress-legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:8px;font-size:12px;color:var(--muted)}.plan-progress-legend .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px}.plan-progress-legend .dot.pending{background:var(--muted)}.plan-progress-legend .dot.cancelled{background:var(--red)}.plan-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}.plan-view-toggle{display:flex;gap:4px;margin-left:auto;background:var(--bg);border:1px solid var(--border);border-radius:20px;padding:3px}.view-toggle-btn{border:none;background:none;padding:6px 14px;border-radius:16px;font-size:12.5px;font-weight:700;cursor:pointer;color:var(--muted);font-family:inherit}.view-toggle-btn.active{background:var(--brand);color:#fff}.plan-status-select{padding:5px 8px;border-radius:6px;border:1px solid var(--border);font-family:inherit;font-size:12.5px;font-weight:600;cursor:pointer;min-width:auto}.plan-status-select.select-compact{width:100px;max-width:100px}.plan-cell-dash{opacity:.5;font-size:12.5px}.plan-sched-badge{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;font-size:14px;font-weight:800;line-height:1}.plan-sched-badge.sched-yes{background:var(--brand-light);color:var(--brand-dark);border:2px solid var(--brand)}.plan-sched-badge.sched-no{background:var(--red-light);color:var(--red);border:2px solid var(--red)}.app-confirm-badge{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:20px;font-size:12px;font-weight:700;white-space:nowrap;line-height:1.3}.app-confirm-badge.confirm-yes{background:var(--brand-light);color:var(--brand-dark);border:1px solid var(--brand)}.app-confirm-badge.confirm-no{background:var(--card);color:var(--muted);border:1px solid var(--border)}.plan-status-select.status-pending{background:var(--card);color:var(--muted)}.plan-status-select.status-done{background:var(--brand-light);color:var(--brand-dark)}.plan-status-select.status-cancelled{background:var(--red-light);color:var(--red)}.plan-status-select.status-ready{background:#dcf3e8;color:#1f7a54}.plan-status-select.status-site_not_ready{background:#fde7d6;color:#b5650f}.plan-status-select.status-survey{background:#dce9fd;color:#2f6bd6}.plan-status-select.status-not_contacted{background:#eceff1;color:#6b7a72}.plan-status-select.status-done_pending_docs{background:#eaf4dd;color:#5d7c22;font-style:italic}.plan-row-pending,.plan-row-done,.plan-row-cancelled{transition:opacity .2s ease}.plan-row-cancelled{opacity:.55}.plan-row-cancelled .plan-status-select{opacity:1}.plan-date-chip{display:inline-flex;align-items:center;gap:8px;background:var(--brand-light);color:var(--brand-dark);font-size:12.5px;font-weight:600;padding:6px 12px;border-radius:20px;margin:0 0 12px}.plan-date-chip button{background:none;border:none;cursor:pointer;color:var(--brand-dark);font-weight:700;font-size:13px;padding:0}.plan-calendar-view{margin-top:4px}.plan-calendar-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.plan-calendar-header h3{margin:0;font-size:15px}.plan-calendar-nav{display:flex;gap:6px}.plan-calendar-nav button{background:var(--card);border:1px solid var(--border);border-radius:8px;padding:6px 12px;cursor:pointer;font-family:inherit;font-size:13px;color:var(--text)}.plan-calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.plan-calendar-dow{text-align:center;font-size:12px;font-weight:700;color:var(--muted);padding:4px 0}.plan-calendar-day{min-height:70px;border:1px solid var(--border);border-radius:10px;padding:6px;cursor:pointer;background:var(--card);display:flex;flex-direction:column;gap:4px}.plan-calendar-day:hover{border-color:var(--brand)}.plan-calendar-day.empty{background:transparent;border:none;cursor:default}.plan-calendar-day.is-today{border-color:var(--brand);border-width:2px}.plan-calendar-day.is-selected{background:var(--brand-light);border-color:var(--brand)}.plan-calendar-day .day-num{font-size:12.5px;font-weight:700;color:var(--text)}.plan-calendar-day .day-badge{align-self:flex-start;font-size:11px;font-weight:700;background:var(--brand);color:#fff;padding:2px 7px;border-radius:10px}.plan-calendar-day .day-badge.has-cancelled{background:#d9a441}@media(max-width:700px){.plan-calendar-day{min-height:52px}.plan-calendar-day .day-badge{font-size:10px}}.iot-project-filter-bar{display:flex;align-items:center;gap:10px;margin-bottom:16px;padding:10px 14px;background:var(--brand-light);border:1px solid var(--border);border-radius:10px;flex-wrap:wrap}.iot-project-filter-bar label{font-weight:700;font-size:13.5px;color:var(--brand-dark);white-space:nowrap}.iot-project-filter-bar select{padding:7px 12px;border:1px solid var(--border);border-radius:8px;font-family:inherit;font-size:13.5px;background:var(--card);color:var(--text);min-width:180px}.pdf-report{display:none;background:#fff;font-family:Sarabun,sans-serif;color:#1c2621;box-sizing:border-box}.pdf-header{display:flex;align-items:center;gap:16px;border-bottom:3px solid #2c7f68;padding-bottom:16px;margin-bottom:20px}.pdf-logo{width:56px;height:56px;border-radius:12px;background:#fff;padding:4px;object-fit:contain;border:1px solid #e6eae8;flex-shrink:0}.pdf-header-text{flex:1;min-width:0}.pdf-header-text h1{margin:0 0 4px;font-size:21px;color:#2c7f68;overflow-wrap:break-word}.pdf-header-eyebrow{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#6b7a72;margin-bottom:3px}.pdf-header-sub{font-size:13px;color:#6b7a72}.pdf-header-meta{font-size:11.5px;color:#6b7a72;text-align:right;white-space:nowrap;line-height:1.6}.pdf-topbar{height:6px;border-radius:3px;background:linear-gradient(90deg,#2c7f68,#3ba68a);margin-bottom:14px}.pdf-kpi-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-bottom:24px}.pdf-kpi-card{background:#f2f5f3;border:1px solid #e6eae8;border-radius:8px;padding:12px 6px;text-align:center;border-top:4px solid #2c7f68}.pdf-kpi-card.pending{border-top-color:#9aa8a0}.pdf-kpi-card.done{border-top-color:#3ba68a}.pdf-kpi-card.cancelled{border-top-color:#e0483e}.pdf-kpi-card.blocked{border-top-color:#b8860b}.pdf-kpi-num{font-size:22px;font-weight:700;color:#1c2621}.pdf-kpi-label{font-size:10.5px;color:#6b7a72;margin-top:2px;text-transform:uppercase;letter-spacing:.03em}.pdf-team-section+.pdf-team-section{page-break-before:always;padding-top:6mm}.pdf-team-heading{display:flex;align-items:center;justify-content:space-between;background:#2c7f68;color:#fff;font-weight:700;font-size:15px;padding:10px 16px;border-radius:6px;margin-bottom:14px}.pdf-team-stats{font-size:11.5px;font-weight:600;opacity:.9}.pdf-date-section{margin-bottom:18px;page-break-inside:avoid}.pdf-date-heading{display:flex;align-items:center;justify-content:space-between;background:#e2f5ef;color:#2c7f68;font-weight:700;font-size:13.5px;padding:8px 14px;border-radius:5px 5px 0 0}.pdf-date-count{font-size:11.5px;font-weight:600;background:#2c7f68;color:#fff;padding:2px 10px;border-radius:10px}.pdf-table{width:100%;table-layout:fixed;border-collapse:collapse;font-size:11px}.pdf-table th,.pdf-table td{border:1px solid #e6eae8;padding:6px 8px;text-align:left;vertical-align:top;word-wrap:break-word;overflow-wrap:break-word;line-height:1.4}.pdf-table tbody tr:nth-child(2n){background:#f8faf9}.pdf-table tbody tr:hover{background:#f2f5f3}.pdf-table th{background:#2c7f68;color:#fff;font-weight:600;font-size:10.5px;text-transform:uppercase;letter-spacing:.02em;border-color:#2c7f68}.pdf-table td.pdf-maplink{word-break:break-all;font-size:9.5px;color:#6b7a72}.pdf-table td.pdf-loc-cell{text-align:center}.pdf-loc-badge{display:inline-block;padding:1px 8px;border-radius:9px;font-size:9.5px;font-weight:700}.pdf-loc-badge.has-loc{background:#e2f5ef;color:#2c7f68}.pdf-loc-badge.no-loc{background:#f2f5f3;color:#9aa8a0}.pdf-status-badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:700}.pdf-status-badge.status-pending{background:#f2f5f3;color:#6b7a72}.pdf-status-badge.status-done{background:#e2f5ef;color:#2c7f68}.pdf-status-badge.status-cancelled{background:#fdeceb;color:#e0483e}.pdf-status-badge.status-ready{background:#dcf3e8;color:#1f7a54}.pdf-status-badge.status-site_not_ready{background:#fde7d6;color:#b5650f}.pdf-status-badge.status-survey{background:#dce9fd;color:#2f6bd6}.pdf-status-badge.status-not_contacted{background:#eceff1;color:#6b7a72}.pdf-status-badge.status-done_pending_docs{background:#eaf4dd;color:#5d7c22}.pdf-signoff{display:flex;justify-content:space-between;gap:40px;margin:32px 30px 0;page-break-inside:avoid}.pdf-signoff-box{flex:1;text-align:center}.pdf-signoff-line{border-bottom:1px solid #9aa8a0;height:40px;margin-bottom:6px}.pdf-signoff-label{font-size:11.5px;color:#6b7a72}.pdf-footer{margin-top:20px;padding-top:12px;border-top:1px solid #e6eae8;font-size:10.5px;color:#9aa8a0;text-align:center}@media print{@page{size:A4;margin:12mm}html,body{background:#fff!important}body>*:not(.pdf-report){display:none!important}.pdf-report{display:block!important;width:100%!important;max-width:100%!important;margin:0!important;padding:0!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}}@media(max-width:700px){header.topbar{padding:14px 14px 0}header.topbar h1{font-size:16.5px}header.topbar p{font-size:12px}.brand-logo{width:36px;height:36px}.header-top-row{flex-wrap:wrap}.container{padding:14px 10px 40px}.module-switcher{flex-wrap:wrap}.module-btn{padding:8px 14px;font-size:12.5px}.global-search-wrap{max-width:100%}.tabbar{overflow-x:auto;flex-wrap:nowrap;-webkit-overflow-scrolling:touch;padding-bottom:2px}.tab-btn{flex-shrink:0;padding:9px 14px;font-size:13px}.kpi-card .kpi-num{font-size:24px}.filters{gap:8px}.filters div{flex:1 1 100%}.filters select,.filters input[type=text]{min-width:0;width:100%}#installerShell{margin:8px 6px;padding:12px 11px 40px;border-radius:14px}.inst-topbar{flex-direction:column;align-items:stretch}.inst-actions .btn{flex:1 1 auto}.inst-tab-btn{min-width:0;padding:9px 4px;font-size:12px}.inst-kpi{padding:8px 6px}.inst-kpi-num{font-size:19px}.inst-kpi-label{font-size:10.5px}.inst-job-edit{grid-template-columns:1fr 1fr}.inst-job-actions .inst-act-btn{flex:1 1 auto;justify-content:center}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:36px;padding:0 14px;border:1px solid transparent;border-radius:var(--r-md);font-size:var(--fs-base);font-weight:500;line-height:1;white-space:nowrap;cursor:pointer;transition:background .15s,border-color .15s,color .15s,box-shadow .15s}.btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--brand-ring)}.btn:active{transform:translateY(.5px)}.btn-brand,.btn-primary{background:var(--brand);color:#fff;border-color:var(--brand);box-shadow:var(--sh-1)}.btn-brand:hover,.btn-primary:hover{background:var(--brand-strong);border-color:var(--brand-strong)}[data-theme=dark] .btn-brand,[data-theme=dark] .btn-primary{color:#0b1f1a}.btn-outline,.btn-ghost{background:var(--surface);color:var(--text);border-color:var(--border-strong)}.btn-outline:hover,.btn-ghost:hover{background:var(--surface-2);border-color:var(--text-3)}.btn-dark{background:var(--ink);color:var(--surface);border-color:var(--ink)}.btn-dark:hover{opacity:.88}.btn-quiet{background:transparent;color:var(--muted);border-color:transparent}.btn-quiet:hover{background:var(--surface-2);color:var(--text)}.btn-danger{background:var(--danger);color:#fff;border-color:var(--danger)}.btn-danger:hover{filter:brightness(.94)}.btn-sm{height:30px;padding:0 10px;font-size:var(--fs-sm);border-radius:var(--r-sm)}.btn-icon{width:36px;padding:0}.btn-icon.btn-sm{width:30px}.stat{display:inline-flex;align-items:center;gap:6px;padding:3px 9px 3px 8px;border-radius:var(--r-pill);font-size:var(--fs-sm);font-weight:500;line-height:1.5;white-space:nowrap;background:var(--neutral-soft);color:var(--neutral)}.stat .ico{width:13px;height:13px}.stat:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}.stat.has-ico:before{display:none}.stat-ok{background:var(--ok-soft);color:var(--ok)}.stat-info{background:var(--info-soft);color:var(--info)}.stat-wait{background:var(--wait-soft);color:var(--wait)}.stat-attn{background:var(--attn-soft);color:var(--attn)}.stat-danger{background:var(--danger-soft);color:var(--danger)}.stat-neutral{background:var(--neutral-soft);color:var(--neutral)}.chip-pct{display:inline-flex;align-items:center;padding:2px 7px;border-radius:var(--r-xs);font-size:var(--fs-xs);font-weight:600;background:var(--brand-soft);color:var(--brand-strong);font-variant-numeric:tabular-nums}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}.panel+.panel{margin-top:var(--s4)}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);padding:14px 18px;border-bottom:1px solid var(--divider)}.panel-head.is-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;width:100%;background:none;border-left:0;border-right:0;border-top:0;text-align:left}.panel-head.is-toggle:hover{background:var(--surface-2)}.panel-title{display:flex;align-items:center;gap:8px;margin:0;font-size:var(--fs-md);font-weight:600;color:var(--text)}.panel-title .ico{color:var(--text-3)}.panel-sub{font-size:var(--fs-sm);color:var(--text-3)}.panel-body{padding:18px}.panel-body.is-flush{padding:0}.metric-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}.metric{background:var(--surface);padding:16px 18px 18px;position:relative}.metric-top{display:flex;align-items:center;gap:7px;margin-bottom:10px}.metric-top .ico{color:var(--text-3)}.metric-label{font-size:var(--fs-sm);color:var(--muted);font-weight:500}.metric-value{font-size:var(--fs-2xl);font-weight:650;letter-spacing:-.02em;line-height:1.15;color:var(--text)}.metric-sub{margin-top:3px;font-size:var(--fs-sm);color:var(--text-3)}.metric-spark{position:absolute;right:14px;bottom:12px;width:82px;height:26px;opacity:.85;pointer-events:none}.metric-spark svg{width:100%;height:100%}.metric.is-accent .metric-value{color:var(--brand-strong)}.metric.is-danger .metric-value{color:var(--danger)}.metric-grid.is-auto{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}@media(max-width:1100px){.metric-grid{grid-template-columns:repeat(2,1fr)}.metric-grid.is-auto{grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}}@media(max-width:560px){.metric-grid{grid-template-columns:1fr}}.filterbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;padding:14px 18px;border-bottom:1px solid var(--divider);background:var(--surface-2)}.filterbar .field{display:flex;flex-direction:column;gap:5px;min-width:140px}.filterbar .field.is-grow{flex:1;min-width:200px}.filterbar .field>label{font-size:var(--fs-xs);font-weight:500;color:var(--text-3);text-transform:none;letter-spacing:0}.filterbar .field>select,.filterbar .field>input{width:100%}.filterbar .filter-actions{display:flex;gap:8px;margin-left:auto}.search-field{position:relative}.search-field .ico{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--text-3);pointer-events:none}.search-field input{padding-left:33px}.tbl-wrap{overflow:auto;max-height:62vh}.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--fs-base)}.tbl thead th{position:sticky;top:0;z-index:2;background:var(--surface);color:var(--text-3);font-size:var(--fs-sm);font-weight:500;text-align:left;white-space:nowrap;padding:11px 14px;border-bottom:1px solid var(--border)}.tbl tbody td{padding:12px 14px;border-bottom:1px solid var(--divider);color:var(--text);vertical-align:middle}.tbl tbody tr:last-child td{border-bottom:0}.tbl tbody tr:hover td{background:var(--surface-2)}.tbl th.num,.tbl td.num{text-align:right}.tbl .cell-strong{font-weight:550}.tbl .cell-muted{color:var(--text-3)}.tbl.is-sticky-first th:first-child,.tbl.is-sticky-first td:first-child{position:sticky;left:0;z-index:1;background:var(--surface)}.tbl.is-sticky-first thead th:first-child{z-index:3}.tbl.is-sticky-first tbody tr:hover td:first-child{background:var(--surface-2)}.bar-cell{display:flex;align-items:center;gap:9px}.bar-track{flex:1;min-width:60px;height:6px;border-radius:999px;background:var(--surface-3);overflow:hidden}.bar-fill{height:100%;border-radius:999px;background:var(--brand);transition:width .5s ease}.pct-text{min-width:38px;text-align:right;font-size:var(--fs-sm);color:var(--muted);font-variant-numeric:tabular-nums}.rail-list{display:flex;flex-direction:column}.rail-row{display:flex;align-items:center;gap:10px;padding:13px 18px;border-bottom:1px solid var(--divider)}.rail-row:last-child{border-bottom:0}.rail-row .ico{color:var(--text-3)}.rail-label{flex:1;font-size:var(--fs-base);color:var(--text)}.rail-count{font-size:var(--fs-base);font-weight:600;color:var(--text)}.rank-list{display:flex;flex-direction:column;gap:13px;padding:16px 18px}.rank-row{display:grid;grid-template-columns:84px 1fr auto;align-items:center;gap:11px}.rank-name{font-size:var(--fs-base);color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rank-track{height:22px;border-radius:var(--r-xs);background:var(--surface-3);overflow:hidden;position:relative}.rank-fill{height:100%;border-radius:var(--r-xs);background:var(--brand-soft);border-left:2.5px solid var(--brand);transition:width .5s ease}.rank-val{position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:var(--fs-xs);font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums}.rank-total{font-size:var(--fs-sm);color:var(--text-3);font-variant-numeric:tabular-nums}.empty{display:flex;flex-direction:column;align-items:center;gap:9px;padding:44px 20px;text-align:center}.empty-ico{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:var(--surface-3);color:var(--text-3)}.empty-title{font-size:var(--fs-md);font-weight:550;color:var(--text)}.empty-text{font-size:var(--fs-base);color:var(--text-3);max-width:340px}td.empty-state-cell{padding:0!important;background:var(--surface)!important}.spinner-inline{display:inline-block;width:13px;height:13px;margin-right:7px;border:2px solid var(--border-strong);border-top-color:var(--brand);border-radius:50%;animation:spin .7s linear infinite;vertical-align:-2px}@keyframes spin{to{transform:rotate(360deg)}}.loc-src{display:inline-block;padding:1px 6px;margin-left:4px;font-size:10.5px;font-weight:600;line-height:1.5;border-radius:999px;white-space:nowrap;vertical-align:1px;border:1px solid transparent;cursor:help}.loc-src-install{color:var(--ok);background:var(--ok-soft);border-color:var(--ok)}.loc-src-farm{color:var(--amber);background:var(--amber-light);border-color:var(--amber)}.loc-src-idcard{color:var(--red);background:var(--red-light);border-color:var(--red)}.loc-src-none{color:var(--text-3);background:transparent;border-color:var(--border-strong)}.loc-plan-warn{display:inline-block;padding:1px 6px;margin-left:4px;font-size:10.5px;font-weight:600;line-height:1.5;border-radius:4px;white-space:nowrap;vertical-align:1px;color:var(--amber);background:var(--amber-light);border:1px dashed var(--amber)}.loc-fix-banner{border:1px solid var(--amber);background:var(--amber-light);border-radius:8px;padding:11px 13px;margin:10px 0 4px}.loc-fix-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px}.loc-fix-title{font-weight:700;font-size:14px;color:var(--amber)}.loc-fix-sub{font-size:12.5px;color:var(--muted);flex:1 1 260px}.loc-fix-actions{display:flex;align-items:center;gap:10px;margin-left:auto}.loc-fix-body{display:none}.loc-fix-banner.open .loc-fix-body{display:block}.loc-fix-body .detail-table{background:var(--card);border-radius:6px}.dual-status{display:inline-flex;flex-direction:column;align-items:flex-start;gap:3px;line-height:1.35}.dual-status.is-inline{flex-direction:row;align-items:center;gap:6px}.ds-otod{font-size:12px;color:var(--text-2);white-space:nowrap;padding:1px 7px;border-radius:999px;background:var(--surface-3);border:1px solid var(--border)}.ds-otod-none{color:var(--text-3);font-style:normal}.ds-stage{font-size:11.5px;font-weight:600;white-space:nowrap;padding:1px 7px;border-radius:999px;border:1px solid transparent}.ds-stage-1{color:var(--text-2);background:var(--surface-3);border-color:var(--border-strong)}.ds-stage-2,.ds-stage-3{color:var(--amber);background:var(--amber-light);border-color:var(--amber)}.ds-stage-4,.ds-stage-5{color:var(--brand);background:var(--ok-soft);border-color:var(--brand)}.ds-stage-6{color:var(--ok);background:var(--ok-soft);border-color:var(--ok)}.ds-stage-7{color:#fff;background:var(--ok);border-color:var(--ok)}.ds-stage-0{color:var(--red);background:var(--red-light);border-color:var(--red)}.plan-added-cell{white-space:nowrap}.plan-added-at{display:block;font-size:12px;color:var(--text-2)}.plan-added-by{display:block;font-size:11px;color:var(--text-3)}.plan-added-none{font-size:12px;color:var(--text-3);font-style:italic}.plan-added-range label{white-space:nowrap}.plan-remove-btn.is-locked{color:var(--text-3);cursor:help;opacity:.75}.plan-remove-btn.is-locked:hover{color:var(--amber);background:var(--amber-light)}.team-report-summary .detail-table{max-width:720px}.team-report-total td{background:var(--surface-3);border-top:2px solid var(--border-strong)}.pdf-team-heading{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:14px 0 8px;padding:8px 12px;border-radius:6px;background:#e2f5ef;border:1px solid #b7e2d2;font-size:15px;font-weight:700;color:#1f7a54}.pdf-team-count{font-size:12px;font-weight:400;color:#4b6b5e}.pdf-team-block{margin-bottom:10px}.pdf-team-subhead{margin:10px 0 4px;font-size:13.5px;font-weight:700;color:#1c2621;border-left:4px solid #3ba68a;padding-left:8px}.pdf-team-subhead span{font-weight:400;font-size:11.5px;color:#6b7a72;margin-left:6px}.pdf-write-cell{border-bottom:1px dotted #9aa8a1!important;min-width:90px}.pdf-endblock{display:flow-root;padding-top:26px}.pdf-endblock .pdf-signoff{margin-top:0!important}.pdf-endblock .pdf-footer{margin-top:18px}.pdf-table-2line{border-collapse:collapse}.pdf-table-2line .pdf-person{border-bottom:1px solid #dfe6e2}.pdf-table-2line .pdf-person:nth-of-type(2n){background:#fafcfb}.pdf-table-2line .pdf-person-main>td{border-bottom:0!important;padding-bottom:3px;vertical-align:top}.pdf-table-2line .pdf-person-detail>td{border-top:0!important;padding-top:0;padding-bottom:7px}.pdf-table-2line .pdf-no{vertical-align:top;color:#6b7a72}.pdf-name{font-weight:700}.pdf-nid{display:block;font-size:10px;color:#7c8b83;letter-spacing:.2px}.pdf-detail-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:2px 16px;margin-top:2px}.pdf-fld{display:flex;align-items:baseline;gap:5px;font-size:10.5px;line-height:1.55;min-width:0}.pdf-fld-k{flex:0 0 auto;color:#8b9a92;font-size:9.5px;white-space:nowrap}.pdf-fld-v{color:#22302a;font-weight:600;white-space:normal;overflow-wrap:anywhere}.pdf-fld.is-empty .pdf-fld-v{color:#c2ccc7;font-weight:400}.pdf-detail-note{margin-top:3px;padding:2px 8px;border-radius:4px;background:#fdf5e4;border-left:3px solid #e0a63c;font-size:10.5px;line-height:1.5;color:#7a5a10}.pdf-detail-note .pdf-fld-k{margin-right:5px;color:#a8842e}.pdf-mp-note{margin-top:2px;font-size:9.5px;color:#8a6d1f;font-style:italic}.pdf-sub-divider td{background:#eef4f0!important;color:#33544a;font-weight:700;font-size:10.5px;padding:3px 8px;border-top:2px solid #c9dcd2}.pdf-sub-divider td span{font-weight:400;color:#6d8579;margin-left:6px}.pdf-rc-extra{margin-top:3px;font-size:10px;color:#4c6157}@media print{.pdf-team-heading,.pdf-team-subhead,.pdf-date-heading{break-after:avoid;page-break-after:avoid;break-inside:avoid;page-break-inside:avoid}.pdf-table-2line .pdf-person,.pdf-table tr{break-inside:avoid;page-break-inside:avoid}.pdf-table thead{display:table-header-group}.pdf-team-block{break-before:auto}.pdf-team-block>.pdf-team-subhead+.pdf-date-section{break-before:avoid;page-break-before:avoid}.pdf-endblock{break-inside:avoid;page-break-inside:avoid;break-before:avoid;page-break-before:avoid}.pdf-endblock .pdf-signoff,.pdf-endblock .pdf-footer{break-before:avoid;page-break-before:avoid}}.notice-list{display:flex;flex-direction:column;gap:8px;margin-top:12px}.notice{position:relative;padding:10px 14px 10px 16px;border:1px solid #fbbf24;border-left-width:4px;border-radius:var(--r-md);background:#fffbeb;color:#92400e;font-size:var(--fs-xs);line-height:1.55;cursor:default}.notice b{font-weight:800}.notice>div{margin-top:2px}.notice.is-danger{border-color:var(--danger);background:var(--danger-soft);color:var(--danger)}[data-theme=dark] .notice{background:#33290f;color:#ffd98a;border-color:#6b5620}[data-theme=dark] .notice.is-danger{background:var(--danger-soft);color:var(--danger);border-color:var(--danger)}.stage-stuck-list>.notice{flex:1 0 100%}.plan-progress-fill.s3{background:#f59e0b}.plan-progress-fill.s2{background:#64748b}.plan-progress-fill.s1{background:color-mix(in srgb,#64748b 45%,transparent)}.plan-progress-legend .dot.s3{background:#f59e0b}.plan-progress-legend .dot.s2{background:#64748b}.plan-progress-legend .dot.s1{background:color-mix(in srgb,#64748b 45%,var(--card, transparent))}.plan-progress-legend .is-click{cursor:pointer}.plan-progress-legend .is-click:hover{color:var(--text);text-decoration:underline}@keyframes row-locate-blink{0%,to{background-color:color-mix(in srgb,var(--brand) 26%,transparent);box-shadow:inset 3px 0 0 var(--brand)}50%{background-color:color-mix(in srgb,var(--brand) 6%,transparent);box-shadow:inset 3px 0 0 transparent}}tr.row-locate>td,.row-locate:not(tr){animation:row-locate-blink .9s ease-in-out 5}tr.row-locate>td:first-child{box-shadow:inset 3px 0 0 var(--brand)}body{background:var(--bg)}#appShell{max-width:1640px;margin:18px auto 26px;padding:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-xl);box-shadow:var(--sh-2);overflow:visible}header.topbar{display:block;position:sticky;top:0;z-index:40;margin:0;padding:0;background:var(--surface);border-bottom:1px solid var(--border);border-radius:var(--r-xl) var(--r-xl) 0 0;box-shadow:none;color:var(--text)}[data-theme=dark] header.topbar{background:var(--surface);box-shadow:none}.header-top-row{display:flex;align-items:center;gap:14px;min-height:var(--topbar-h);padding:10px 18px;margin:0;border:0}.header-brand{display:flex;align-items:center;gap:10px;flex:none}.header-brand .brand-logo{width:30px;height:30px;object-fit:contain;background:none;border-radius:0;padding:0;box-shadow:none}.header-brand h1{margin:0;font-size:var(--fs-md);font-weight:600;color:var(--text);letter-spacing:-.015em;white-space:nowrap}.header-brand p,#headerSub{display:none}.module-switcher{display:inline-flex;gap:3px;flex:none;margin:0;padding:3px;background:var(--surface-3);border-radius:var(--r-pill)}.module-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border:0;border-radius:var(--r-pill);background:transparent;color:var(--muted);font-size:var(--fs-base);font-weight:500;line-height:1;transition:background .15s,color .15s}.module-btn .ico{width:15px;height:15px}.module-btn:hover{color:var(--text);background:transparent}.module-btn.active{background:var(--brand);color:#fff;box-shadow:var(--sh-1)}[data-theme=dark] .module-btn.active{color:#0b1f1a}nav.tabbar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:0;padding:0 18px 12px;border:0;background:none}.tab-btn{display:inline-flex;align-items:center;gap:7px;padding:7px 14px;border-radius:var(--r-pill);border:1px solid var(--border);background:var(--surface);color:var(--muted);font-size:var(--fs-base);font-weight:500;line-height:1;transition:background .15s,color .15s,border-color .15s}.tab-btn .ico{width:15px;height:15px;opacity:.9}.tab-btn:hover{background:var(--surface-2);color:var(--text);border-color:var(--border-strong)}.tab-btn.active{background:var(--ink);color:var(--surface);border-color:var(--ink);box-shadow:var(--sh-1)}.tab-btn.disabled{opacity:.5;cursor:not-allowed}.tab-btn.disabled:hover{background:var(--surface);color:var(--muted);border-color:var(--border)}.soon-badge{padding:1px 6px;border-radius:var(--r-pill);background:var(--wait-soft);color:var(--wait);font-size:var(--fs-xs);font-weight:600}.header-actions{display:flex;align-items:center;gap:7px;margin-left:auto;flex:none}.header-user{display:flex;align-items:center;gap:8px;padding:4px 4px 4px 11px;border-radius:var(--r-pill);border:1px solid var(--border);background:var(--surface)}.header-user-mail{font-size:var(--fs-sm);color:var(--muted);max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.header-avatar{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--brand-soft);color:var(--brand-strong);font-weight:600;font-size:var(--fs-sm);text-transform:uppercase;flex:none}.theme-toggle-btn{display:grid;place-items:center;width:34px;height:34px;padding:0;border:1px solid var(--border);border-radius:var(--r-pill);background:var(--surface);color:var(--muted);font-size:0}.theme-toggle-btn:hover{background:var(--surface-2);color:var(--text);transform:none}.readonly-badge{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:var(--r-pill);background:var(--wait-soft);color:var(--wait);font-size:var(--fs-sm);font-weight:500}.global-search-wrap{position:relative;flex:1;max-width:330px;margin:0}.global-search-input{width:100%;height:34px;padding:0 12px 0 33px;border:1px solid var(--border-strong);border-radius:var(--r-pill);background:var(--surface-2);color:var(--text);font-size:var(--fs-base)}.global-search-input:focus{background:var(--surface);border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-ring)}.global-search-wrap>.ico{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-3);pointer-events:none}.global-search-results{margin-top:6px;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--sh-3);overflow:hidden}.container{max-width:none;margin:0;padding:20px 18px 26px}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s4);margin-bottom:var(--s5);flex-wrap:wrap}.page-title{font-size:var(--fs-xl);font-weight:650;letter-spacing:-.02em;color:var(--text)}.page-sub{margin-top:3px;font-size:var(--fs-base);color:var(--text-3)}.page-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.subtabs{display:flex;gap:20px;margin:-4px 0 var(--s5);border-bottom:1px solid var(--border)}.subtab{padding:0 0 10px;border:0;background:none;color:var(--text-3);font-size:var(--fs-base);font-weight:500;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .15s,border-color .15s}.subtab:hover{color:var(--text)}.subtab.active{color:var(--text);border-bottom-color:var(--brand)}.dash-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:var(--s4);align-items:start}.dash-main{min-width:0;display:flex;flex-direction:column;gap:var(--s4)}.dash-rail{display:flex;flex-direction:column;gap:var(--s4);position:sticky;top:calc(var(--topbar-h) + 58px)}@media(max-width:1180px){.dash-grid{grid-template-columns:1fr}.dash-rail{position:static}}@media(max-width:980px){#appShell{margin:0;border-radius:0;border-left:0;border-right:0}header.topbar{border-radius:0}.header-top-row{flex-wrap:wrap;gap:10px;padding:10px 14px}.global-search-wrap{order:5;max-width:none;flex-basis:100%}.header-brand h1{font-size:var(--fs-base)}nav.tabbar{padding:0 14px 10px;overflow-x:auto;flex-wrap:nowrap}.tab-btn{white-space:nowrap}.container{padding:16px 14px 24px}.header-user-mail{display:none}}.statusbar{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);margin:0 0 var(--s4);padding:0;font-size:var(--fs-sm);color:var(--text-3)}#status{margin:0;padding:0;background:none;border:0;color:var(--text-3);font-size:var(--fs-sm)}.statusbar:empty{display:none}.global-search-wrap input.global-search-input{height:34px;padding:0 12px 0 34px}.filterbar .field input[type=text],.filterbar .field select{height:36px}.search-field input[type=text]{padding-left:33px}.tbl tbody td,.tbl thead th{white-space:nowrap}.tbl td.is-wrap{white-space:normal}.chevron{display:inline-flex;color:var(--text-3);transition:transform .2s ease}.chevron.open{transform:rotate(90deg)}.section{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:none;padding:18px;margin-bottom:var(--s4)}.section .section{border:0;padding:0;margin-bottom:12px}.section h2{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:var(--fs-md);font-weight:600;color:var(--text);margin:0 0 12px;padding:0;border:0}.section h2 .ico{color:var(--text-3)}.section h3{font-size:var(--fs-base);font-weight:600;color:var(--text)}.section h2 .badge,.badge{display:inline-flex;align-items:center;background:var(--surface-3);color:var(--muted);border-radius:var(--r-pill);padding:2px 9px;font-size:var(--fs-xs);font-weight:600}.filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;background:var(--surface-2);border:1px solid var(--divider);border-radius:var(--r-md);padding:12px 14px;margin:0 0 12px}.filters>div{display:flex;flex-direction:column;gap:5px;min-width:130px}.filters label{font-size:var(--fs-xs);font-weight:500;color:var(--text-3);margin:0}.filters select,.filters input[type=text],.filters input[type=date]{width:100%;height:34px}.table-wrap{border:1px solid var(--border);border-radius:var(--r-md);overflow:auto;max-height:66vh;background:var(--surface)}table.detail-table,table.summary-table{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--fs-base)}table.detail-table th,table.summary-table th{position:sticky;top:0;z-index:2;background:var(--surface)!important;color:var(--text-3);font-size:var(--fs-sm);font-weight:500;text-align:left;white-space:nowrap;padding:10px 12px;border-bottom:1px solid var(--border)}table.detail-table td,table.summary-table td{padding:10px 12px;border-bottom:1px solid var(--divider);background:transparent;color:var(--text);vertical-align:middle}table.detail-table tbody tr:nth-child(2n) td,table.summary-table tbody tr:nth-child(2n) td{background:transparent}table.detail-table tbody tr:hover td,table.summary-table tbody tr:hover td{background:var(--surface-2)}table.detail-table tbody tr:last-child td,table.summary-table tbody tr:last-child td{border-bottom:0}[data-theme=dark] table.detail-table th{background:var(--surface)!important}[data-theme=dark] table.detail-table tbody tr:hover td,[data-theme=dark] .lb-row,[data-theme=dark] .district-row{background:var(--surface-2)}.tag{border-radius:var(--r-pill);font-weight:500;font-size:var(--fs-sm);padding:3px 10px}.tag-Y{background:var(--ok-soft);color:var(--ok)}.tag-N{background:var(--danger-soft);color:var(--danger)}.plan-view-toggle{display:inline-flex;gap:3px;padding:3px;background:var(--surface-3);border-radius:var(--r-md)}.view-toggle-btn{display:inline-flex;align-items:center;gap:6px;border:0;background:transparent;color:var(--muted);padding:6px 12px;border-radius:calc(var(--r-md) - 3px);font-size:var(--fs-sm);font-weight:500;line-height:1.4;cursor:pointer;transition:background .15s,color .15s}.view-toggle-btn:hover{color:var(--text)}.view-toggle-btn.active{background:var(--surface);color:var(--text);box-shadow:var(--sh-1)}.subtabs{padding:0 2px}.subtabs .view-toggle-btn{background:none;box-shadow:none;border-radius:0;padding:0 2px 10px;margin-bottom:-1px;color:var(--text-3);font-size:var(--fs-base);border-bottom:2px solid transparent}.subtabs .view-toggle-btn:hover{color:var(--text)}.subtabs .view-toggle-btn.active{color:var(--text);border-bottom-color:var(--brand);background:none}.subtabs .chip-pct{margin-left:4px}.plan-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 12px}.plan-range-row{display:flex;align-items:center;gap:6px;margin:12px 0 4px}.plan-range-label{font-size:var(--fs-sm);color:var(--text-3);margin-right:2px}.range-btn{border:1px solid var(--border-strong);background:var(--surface);color:var(--muted);border-radius:var(--r-pill);padding:4px 12px;font-size:var(--fs-sm);font-weight:500;cursor:pointer}.range-btn:hover{background:var(--surface-2);color:var(--text)}.range-btn.active{background:var(--ink);border-color:var(--ink);color:var(--surface)}.plan-progress-wrap{margin:2px 0 4px}.plan-progress-label{display:flex;justify-content:space-between;font-size:var(--fs-sm);color:var(--muted);font-weight:500;margin-bottom:7px}.plan-progress-track{display:flex;height:8px;border-radius:999px;background:var(--surface-3);overflow:hidden}.plan-progress-fill.done{background:var(--brand)}.plan-progress-fill.cancelled{background:var(--danger);opacity:.75}.plan-progress-legend{display:flex;gap:16px;margin-top:8px;font-size:var(--fs-sm);color:var(--muted)}.plan-progress-legend .dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:5px;background:var(--neutral)}.plan-progress-legend .dot.done{background:var(--brand)}.plan-progress-legend .dot.pending{background:var(--wait)}.plan-progress-legend .dot.cancelled{background:var(--danger)}.plan-timeline-cols{display:grid;grid-template-columns:1fr 1fr;gap:var(--s4);margin-top:var(--s4)}@media(max-width:900px){.plan-timeline-cols{grid-template-columns:1fr}}.plan-timeline-col{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);overflow:hidden}.plan-timeline-heading{display:flex;align-items:center;gap:7px;margin:0;padding:11px 14px;font-size:var(--fs-base);font-weight:600;color:var(--text);border-bottom:1px solid var(--divider);background:var(--surface-2)}.plan-timeline-heading.upcoming{color:var(--brand-strong)}.plan-timeline-heading .ico{color:currentColor}.plan-timeline-list{max-height:330px;overflow:auto;padding:6px 0}.plan-timeline-empty{padding:26px 14px;text-align:center;color:var(--text-3);font-size:var(--fs-sm)}.plan-day-group{padding:4px 14px 8px}.plan-day-header{display:flex;align-items:center;justify-content:space-between;font-size:var(--fs-sm);font-weight:600;color:var(--muted);padding:7px 0 5px}.plan-day-header.is-today{color:var(--brand-strong)}.plan-day-header.is-today:after{content:"วันนี้";margin-left:8px;background:var(--brand-soft);color:var(--brand-strong);border-radius:var(--r-pill);padding:1px 8px;font-size:var(--fs-xs)}.plan-day-people{display:flex;flex-direction:column}.plan-day-person{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 0;border-top:1px solid var(--divider);font-size:var(--fs-base)}.plan-day-person-loc{color:var(--text-3);font-size:var(--fs-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plan-status-select{height:30px;padding:0 26px 0 10px;border-radius:var(--r-pill);font-size:var(--fs-sm);font-weight:500;border:1px solid transparent}.plan-status-select.status-pending{background:var(--wait-soft);color:var(--wait)}.plan-status-select.status-done{background:var(--ok-soft);color:var(--ok)}.plan-status-select.status-cancelled{background:var(--neutral-soft);color:var(--neutral);text-decoration:line-through}.plan-status-select.status-ready{background:var(--info-soft);color:var(--info)}.plan-status-select.status-site_not_ready{background:var(--attn-soft);color:var(--attn)}.plan-status-select.status-survey{background:var(--info-soft);color:var(--info)}.plan-status-select.status-not_contacted{background:var(--neutral-soft);color:var(--neutral)}.plan-status-select.status-done_pending_docs{background:var(--ok-soft);color:var(--ok);opacity:.85;font-style:italic}.plan-date-chip{display:inline-flex;align-items:center;gap:6px}.plan-date-chip input[type=date]{height:32px;border-radius:var(--r-sm);font-weight:500}input[type=date]:not([value=""]){color:var(--text)}.plan-calendar-view{border:1px solid var(--border);border-radius:var(--r-md);padding:14px;background:var(--surface)}.plan-calendar-grid{gap:6px}.plan-calendar-dow{color:var(--text-3);font-size:var(--fs-xs);font-weight:600}.plan-calendar-day{border:1px solid var(--divider);border-radius:var(--r-sm);background:var(--surface)}.plan-calendar-day:hover{border-color:var(--brand);background:var(--brand-soft)}.plan-calendar-day.is-today{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand)}.plan-calendar-day.is-selected{background:var(--brand-soft);border-color:var(--brand)}.plan-calendar-day .day-badge{background:var(--brand);color:#fff;border-radius:var(--r-pill);font-size:var(--fs-xs)}.plan-calendar-nav button{border:1px solid var(--border-strong);background:var(--surface);border-radius:var(--r-sm);color:var(--text);padding:4px 10px}.dropdown-manager{border:1px dashed var(--border-strong);border-radius:var(--r-md);margin-bottom:12px;background:var(--surface-2)}.dropdown-manager-header{display:flex;align-items:center;gap:8px;padding:10px 12px;cursor:pointer;font-size:var(--fs-sm);color:var(--muted)}.dropdown-manager-header strong{color:var(--text);font-weight:600}.toast-container{z-index:300}.toast{display:flex;align-items:center;gap:9px;background:var(--ink);color:var(--surface);border:0;border-radius:var(--r-md);box-shadow:var(--sh-3);padding:11px 15px;font-size:var(--fs-base)}.toast-icon{display:inline-flex}.toast-success .toast-icon{color:#5fe0b2}.toast-error .toast-icon{color:#ff8a80}.toast-warn .toast-icon{color:#ffd54f}.toast-info .toast-icon{color:#90caf9}.ptoast{align-items:flex-start;width:min(360px,86vw)}.ptoast-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}.ptoast-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.ptoast-label{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ptoast-pct{font-variant-numeric:tabular-nums;color:var(--brand);font-weight:600;flex:0 0 auto}.ptoast-track{height:5px;border-radius:var(--r-pill);background:#ffffff29;overflow:hidden}.ptoast-fill{display:block;height:100%;width:0%;border-radius:var(--r-pill);background:var(--brand);transition:width .25s ease}.ptoast-sub{font-size:var(--fs-xs);opacity:.65;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ptoast.done .ptoast-fill{background:var(--ok)}.ptoast.done .ptoast-pct,.ptoast.done .toast-icon{color:var(--ok)}.ptoast.done.done-warn .ptoast-fill{background:var(--wait)}.ptoast.done.done-warn .ptoast-pct,.ptoast.done.done-warn .toast-icon{color:var(--wait)}.confirm-modal,.um-modal{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-3)}.um-head{display:flex;align-items:center;justify-content:space-between}.um-head h3{display:flex;align-items:center;gap:8px;font-size:var(--fs-lg)}.um-section h4{display:flex;align-items:center;gap:7px;font-size:var(--fs-base);color:var(--text)}.um-note{color:var(--muted);font-size:var(--fs-sm)}.qa-popup-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-3)}.qa-popup-header{background:var(--surface-2);border-bottom:1px solid var(--divider)}.qa-popup-header h2{font-size:var(--fs-md);display:flex;align-items:center;gap:7px}.qa-chip{border:1px solid var(--border-strong);background:var(--surface);color:var(--muted);border-radius:var(--r-pill);font-size:var(--fs-sm)}.qa-chip:hover{background:var(--brand-soft);color:var(--brand-strong);border-color:var(--brand)}.qa-msg{border-radius:var(--r-md);font-size:var(--fs-base);line-height:var(--lh)}.qa-user{background:var(--brand);color:#fff}.qa-bot{background:var(--surface-2);color:var(--text);border:1px solid var(--divider)}.qa-bubble-btn{box-shadow:var(--sh-2);border:1px solid var(--border);background:var(--surface)}.global-search-item{border-bottom:1px solid var(--divider)}.global-search-item:hover{background:var(--surface-2)}.global-search-item .gs-title{color:var(--text);font-weight:550}.global-search-item .gs-sub{color:var(--text-3)}.global-search-item .gs-tag{background:var(--brand-soft);color:var(--brand-strong);border-radius:var(--r-pill);font-size:var(--fs-xs);font-weight:600}.auth-gate{background:var(--bg)}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-xl);box-shadow:var(--sh-2)}.auth-card h1{font-size:var(--fs-xl);letter-spacing:-.02em}.auth-card .auth-sub{color:var(--text-3)}.auth-field input{height:40px}.auth-submit-btn{height:40px;border-radius:var(--r-md);background:var(--brand);border:0;color:#fff;font-weight:600;font-size:var(--fs-md)}.auth-submit-btn:hover{background:var(--brand-strong)}[data-theme=dark] .auth-submit-btn{color:#0b1f1a}.auth-toggle-link a{color:var(--brand-strong);font-weight:500}.scoreboard{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);box-shadow:none}.score-num{font-variant-numeric:tabular-nums;letter-spacing:-.02em}.leaderboard,.province-detail,.people-panel{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);box-shadow:none}.lb-title{color:var(--text);font-weight:600}.lb-row,.district-row{border-radius:var(--r-sm);background:var(--surface-2)}.lb-row:hover,.district-row:hover{background:var(--surface-3)}.lb-bar-fill,.dr-bar-fill{background:var(--brand);border-radius:999px}.map-back-overlay,.map-title-overlay{border-radius:var(--r-md);box-shadow:var(--sh-2);border:1px solid var(--border)}.config-box{border-radius:var(--r-md);border:1px solid var(--wait);background:var(--wait-soft);color:var(--text)}.iot-project-filter-bar{background:var(--surface-2);border:1px solid var(--divider);border-radius:var(--r-md)}.toggle-detail{display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer;-webkit-user-select:none;user-select:none;margin:-18px -18px 0;padding:14px 18px;border-radius:var(--r-lg) var(--r-lg) 0 0}.toggle-detail:hover{background:var(--surface-2)}.toggle-detail h2{margin:0}#installerShell{border:1px solid var(--border);box-shadow:var(--sh-2);border-radius:var(--r-xl)}.inst-topbar{border-bottom:1px solid var(--divider)}.inst-tab-btn{border:1px solid var(--border);background:var(--surface);color:var(--muted);border-radius:var(--r-pill);padding:9px 14px;font-size:var(--fs-base);font-weight:500;min-height:40px}.inst-tab-btn.active{background:var(--ink);color:var(--surface);border-color:var(--ink)}.inst-kpi{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface)}.inst-kpi-num{font-variant-numeric:tabular-nums}.inst-job-actions .inst-act-btn{border-radius:var(--r-md);min-height:40px;font-weight:500}.call-queue-item,.call-form-card{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface)}.soon-card{border:1px dashed var(--border-strong);border-radius:var(--r-lg);background:var(--surface-2);color:var(--text-3)}.empty-state-cell .empty-icon{filter:grayscale(1);opacity:.5}.chart-wrap{border:0}.metric.is-click{cursor:pointer;transition:background .15s}.metric.is-click:hover{background:var(--surface-2)}.metric.is-today{position:relative}.metric.is-today:before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--brand)}.metric.is-today .metric-value{color:var(--brand-strong)}.appoint-grid .metric-sub{min-height:1.4em}.iot-project-filter-bar.is-inline{display:inline-flex;align-items:center;gap:7px;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--r-md);padding:0 4px 0 11px;height:36px;margin:0}.iot-project-filter-bar.is-inline label{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-sm);color:var(--text-3);white-space:nowrap;margin:0}.iot-project-filter-bar.is-inline select{border:0;height:32px;background-color:transparent;min-width:130px}.iot-project-filter-bar.is-inline select:focus{box-shadow:none}.geo-stage{position:relative;height:calc(100vh - 205px);min-height:560px;margin:0;border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden;background:radial-gradient(1100px 520px at 78% 12%,var(--brand-soft) 0%,transparent 55%),linear-gradient(160deg,var(--surface) 0%,var(--surface-2) 100%)}.geo-stage .thailand-map-wrap.geo-canvas{position:absolute;top:0;right:0;bottom:0;left:0;margin:0;padding:0;background:none;border:0;border-radius:0;box-shadow:none;max-width:none;width:auto;height:auto;aspect-ratio:auto;cursor:grab}.geo-stage .thailand-map-wrap.geo-canvas:active{cursor:grabbing}.geo-stage #thailandSvg,.geo-stage #iotSvg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block}.geo-stage #mapLabelsHtml,.geo-stage #iotMapLabelsHtml{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}[data-theme=dark] .geo-stage{background:radial-gradient(1100px 520px at 78% 12%,rgba(79,214,176,.08) 0%,transparent 55%),linear-gradient(160deg,var(--surface) 0%,var(--bg) 100%)}.geo-stage .html-label{position:absolute;transform:translate(-50%,-50%);background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--r-pill);box-shadow:var(--sh-1);padding:2px 9px;font-size:11.5px;font-weight:550;white-space:nowrap;pointer-events:none}.geo-stage .map-back-overlay{position:absolute;top:16px;right:16px;left:auto;z-index:6;display:none;align-items:center;gap:6px;height:36px;padding:0 14px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--r-pill);box-shadow:var(--sh-2);font-size:var(--fs-base);font-weight:500;cursor:pointer}.geo-stage .map-back-overlay.visible{display:inline-flex}.geo-stage .map-title-overlay{position:absolute;top:16px;right:120px;left:auto;z-index:5;padding:7px 14px;background:var(--ink);color:var(--surface);border:0;border-radius:var(--r-pill);box-shadow:var(--sh-2);font-size:var(--fs-base);font-weight:600}.geo-zoom{position:absolute;right:16px;bottom:16px;z-index:6;display:flex;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--sh-2);overflow:hidden}.geo-zoom button{width:42px;height:38px;border:0;background:none;color:var(--text);font-size:19px;line-height:1;cursor:pointer}.geo-zoom button:first-child{border-right:1px solid var(--divider)}.geo-zoom button:hover{background:var(--surface-2)}.geo-foot{position:absolute;left:428px;bottom:14px;z-index:5;display:flex;align-items:center;gap:14px;font-size:var(--fs-xs);color:var(--text-3)}.geo-foot .map-legend{display:inline-flex;align-items:center;gap:5px;margin:0}.geo-foot .legend-dot{width:9px;height:9px;border-radius:50%;display:inline-block}.geo-foot .map-caption{margin:0}.geo-panel{position:absolute;top:14px;left:14px;bottom:14px;z-index:7;width:392px;max-width:calc(100% - 28px);display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-3);overflow:hidden}.geo-panel-top{padding:16px 16px 12px;border-bottom:1px solid var(--divider)}.geo-title{display:flex;align-items:center;gap:8px;font-size:var(--fs-lg);font-weight:650;letter-spacing:-.015em}.geo-title .ico{color:var(--brand-strong)}.geo-sub{margin:2px 0 12px;font-size:var(--fs-sm);color:var(--text-3)}.geo-search{display:flex;gap:8px}.geo-search .search-field{flex:1}.geo-project{margin-bottom:10px;width:100%}.geo-project select{flex:1}#mapSearchStatus,#iotMapSearchStatus{font-size:var(--fs-sm);color:var(--attn);margin-top:6px}#mapSearchStatus:empty,#iotMapSearchStatus:empty{display:none}.geo-panel .scoreboard{display:flex;align-items:center;gap:12px;margin:12px 0 0;padding:11px 14px;background:var(--surface-2);border:1px solid var(--divider);border-radius:var(--r-md);box-shadow:none}.geo-panel .score-side{text-align:center;flex:none}.geo-panel .score-num{font-size:var(--fs-lg);font-weight:650}.geo-panel .score-side.yes .score-num{color:var(--ok)}.geo-panel .score-side.no .score-num{color:var(--danger)}.geo-panel .score-label{font-size:var(--fs-xs);color:var(--text-3)}.geo-panel .score-mid{flex:1}.geo-panel .score-bar{display:flex;height:7px;border-radius:999px;overflow:hidden;background:var(--surface-3)}.geo-panel .score-bar-fill-y{background:var(--brand)}.geo-panel .score-bar-fill-n{background:var(--danger)}.geo-panel .score-pct-labels{display:flex;justify-content:space-between;margin-top:5px;font-size:var(--fs-xs);color:var(--text-3)}.geo-panel .preschedule-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;padding:8px 11px;background:var(--wait-soft);border:1px dashed var(--wait);border-radius:var(--r-md);font-size:var(--fs-sm)}.geo-panel .preschedule-toggle{display:flex;align-items:center;gap:6px;font-weight:550;cursor:pointer}.geo-panel .preschedule-bar input[type=date]{height:30px}.geo-panel .preschedule-status{font-size:var(--fs-xs);color:var(--muted)}.geo-panel-scroll{flex:1;overflow-y:auto;padding:12px 16px 16px}.geo-panel-scroll .lb-title{margin:2px 0 8px;font-size:var(--fs-sm);font-weight:600;color:var(--muted)}.geo-panel-scroll .leaderboard{display:flex;flex-direction:column;gap:6px}.geo-panel-scroll .province-detail,.geo-panel-scroll .people-panel{border:0;border-radius:0;background:none;box-shadow:none;padding:0;margin-top:12px}.geo-panel-scroll .detail-header{display:flex;flex-direction:column;gap:8px;align-items:stretch}.geo-panel-scroll .detail-header h3{font-size:var(--fs-base)}.geo-panel-scroll .district-row{padding:9px 11px}@media(max-width:860px){.geo-stage{height:auto;min-height:0}.geo-stage .thailand-map-wrap.geo-canvas{position:relative;height:420px}.geo-panel{position:relative;inset:auto;width:auto;max-width:none;margin:0;border:0;border-top:1px solid var(--border);border-radius:0;box-shadow:none}.geo-panel-scroll{max-height:none}.geo-foot{left:14px;bottom:auto;top:380px}}.geo-stage .map-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:4;padding:14px 20px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--sh-2);white-space:nowrap}.geo-panel .score-pct-labels{white-space:nowrap;gap:8px}.geo-panel .score-pct-labels span:nth-child(2){overflow:hidden;text-overflow:ellipsis}.geo-panel-scroll .table-wrap{max-height:46vh}.geo-stage .html-label{z-index:1;font-size:11px;padding:2px 8px}.geo-stage .map-back-overlay{z-index:8}.geo-stage .map-title-overlay{z-index:8;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.geo-stage .geo-zoom{z-index:8}.geo-stage .geo-foot{z-index:2}.geo-panel{z-index:10}.geo-panel .scoreboard{min-width:0}.geo-panel .score-side{flex:none;min-width:54px}.geo-panel .score-num{font-size:var(--fs-md)}.geo-panel .score-mid{min-width:0;overflow:hidden}.geo-panel .score-pct-labels{display:flex;align-items:center}.geo-panel .score-pct-labels span{flex:none}.geo-panel .score-pct-labels span:nth-child(2){flex:1;min-width:0;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.geo-drawer{position:absolute;top:14px;right:14px;bottom:14px;z-index:10;width:470px;max-width:calc(100% - 440px);display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-3);transform:translate(calc(100% + 24px));transition:transform .28s cubic-bezier(.2,.8,.2,1),width .28s cubic-bezier(.2,.8,.2,1);overflow:hidden}.geo-drawer.open{transform:translate(0)}.geo-drawer.is-wide{width:min(920px,calc(100% - 440px))}.geo-drawer.open.is-min{transform:translate(calc(100% + 24px))}.geo-drawer-head{display:flex;align-items:center;gap:6px;padding:10px 12px 10px 16px;border-bottom:1px solid var(--divider);flex:none}.geo-drawer-title{display:flex;align-items:center;gap:7px;font-size:var(--fs-base);font-weight:600;margin-right:auto}.geo-drawer-title .ico{color:var(--brand-strong)}.geo-drawer-body{flex:1;overflow-y:auto;padding:14px 16px}.geo-drawer-body .people-panel{border:0;border-radius:0;background:none;box-shadow:none;padding:0;margin:0}.geo-drawer-body .table-wrap{max-height:44vh}.geo-drawer-body .detail-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.geo-drawer-body .detail-header h3{flex:1 1 auto;min-width:0}.iot-map-name-call{cursor:pointer;color:var(--brand-strong);font-weight:600;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:3px;text-decoration-color:var(--border-strong, var(--border))}.iot-map-name-call:hover{color:var(--brand);text-decoration-style:solid}.geo-drawer-tab{display:none;position:absolute;top:50%;left:-44px;transform:translateY(-50%) rotate(180deg);writing-mode:vertical-rl;align-items:center;gap:6px;padding:12px 8px;border:1px solid var(--border);border-right:0;border-radius:0 var(--r-md) var(--r-md) 0;background:var(--brand);color:#fff;font-size:var(--fs-sm);font-weight:600;cursor:pointer;box-shadow:var(--sh-2)}.geo-drawer.open.is-min .geo-drawer-tab{display:inline-flex}.geo-drawer.open.is-min{transform:translate(calc(100% + -0px));overflow:visible}[data-theme=dark] .geo-drawer-tab{color:#0b1f1a}@media(max-width:1180px){.geo-drawer{max-width:calc(100% - 28px)}.geo-drawer.is-wide{width:calc(100% - 28px)}}.geo-stage{--drawer-w: 0px}.geo-stage:has(.geo-drawer.open:not(.is-min)){--drawer-w: 484px}.geo-stage:has(.geo-drawer.open.is-wide:not(.is-min)){--drawer-w: min(934px, calc(100% - 426px) )}.geo-stage .map-back-overlay{right:calc(16px + var(--drawer-w));transition:right .28s cubic-bezier(.2,.8,.2,1)}.geo-stage .map-title-overlay{right:calc(120px + var(--drawer-w));transition:right .28s cubic-bezier(.2,.8,.2,1)}.geo-stage .geo-zoom{right:calc(16px + var(--drawer-w));transition:right .28s cubic-bezier(.2,.8,.2,1)}.geo-drawer:not(.is-wide) .col-extra{display:none}.geo-search .search-field input{width:100%}.geo-stage .map-label{stroke:none;paint-order:normal;fill:#1f5748;font-weight:600;opacity:.82;letter-spacing:.01em}[data-theme=dark] .geo-stage .map-label{fill:#a9dfcc;opacity:.9}.geo-stage .html-label{background:#eef8f4eb;border:1px solid rgba(63,158,136,.28);color:#1d5041;font-weight:600;box-shadow:0 1px 4px #1f574824}[data-theme=dark] .geo-stage .html-label{background:#142620e0;border-color:#4fd6b040;color:#bfe8da}.geo-stage .map-title-overlay{top:18px;right:auto;left:calc(420px + (100% - 420px - var(--drawer-w)) / 2);transform:translate(-50%);max-width:none;background:var(--brand);color:#fff;font-size:16.5px;font-weight:650;letter-spacing:-.01em;padding:10px 24px;border-radius:var(--r-pill);box-shadow:0 8px 24px #2e8f7661;transition:left .28s cubic-bezier(.2,.8,.2,1)}[data-theme=dark] .geo-stage .map-title-overlay{color:#0b1f1a;box-shadow:0 8px 24px #00000073}.geo-panel .lb-row.is-active,.geo-panel .district-row.is-active{background:var(--brand-soft);box-shadow:inset 0 0 0 1.5px var(--brand)}.geo-panel .lb-row.is-active .lb-name,.geo-panel .district-row.is-active .dr-name{color:var(--brand-strong);font-weight:650}[data-theme=dark] .geo-panel .lb-row.is-active,[data-theme=dark] .geo-panel .district-row.is-active{background:var(--brand-soft)}.geo-stage .map-label{fill:#fff;opacity:.96;font-weight:650;paint-order:stroke;stroke:#173e3452;stroke-width:.55px;letter-spacing:0}[data-theme=dark] .geo-stage .map-label{fill:#f2fbf7;stroke:#00000073}.geo-stage .map-label.is-dim{fill:#7c948b;opacity:.85;font-weight:600;stroke:#ffffff8c;stroke-width:.4px}.geo-stage .map-label.is-dim.is-current{opacity:0}[data-theme=dark] .geo-stage .map-label.is-dim{fill:#7d918a;stroke:#0006}.geo-stage .dist-appear{opacity:0;animation:geoDistIn .55s cubic-bezier(.2,.7,.3,1) forwards;animation-delay:var(--d, 0ms)}@keyframes geoDistIn{0%{opacity:0;filter:brightness(1.5) saturate(.6)}55%{opacity:1;filter:brightness(1.22) saturate(1.05)}to{opacity:1;filter:brightness(1) saturate(1)}}.geo-stage #mapG .prov-path,.geo-stage #iotMapG .prov-path{transition:opacity .45s ease,filter .45s ease}.geo-stage #mapG.is-focused .prov-path:not(.is-focus),.geo-stage #iotMapG.is-focused .prov-path:not(.is-focus){opacity:.22;filter:saturate(.12) brightness(1.12)}.geo-stage #mapG.is-focused .prov-path:not(.is-focus):hover,.geo-stage #iotMapG.is-focused .prov-path:not(.is-focus):hover{opacity:.5;filter:saturate(.5) brightness(1.05)}.geo-stage #mapG.is-focused~#labelLayer .map-label,.geo-stage #iotMapG.is-focused~#iotLabelLayer .map-label{transition:opacity .45s ease}.geo-stage .prov-focus-outline{fill:none;pointer-events:none;stroke:#14503f;stroke-width:1.5px;stroke-linejoin:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 2px rgba(20,80,63,.35));animation:geoOutlineIn .5s ease .18s both}[data-theme=dark] .geo-stage .prov-focus-outline{stroke:#7ff0cd;filter:drop-shadow(0 0 3px rgba(127,240,205,.35))}@keyframes geoOutlineIn{0%{opacity:0}to{opacity:1}}.call-wrap{display:grid;grid-template-columns:var(--call-list-w, 320px) 6px minmax(0,1fr);gap:0;align-items:start;margin-top:12px}.call-list{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:12px;position:sticky;top:8px;max-height:78vh;overflow:hidden;display:flex;flex-direction:column;min-height:0}.call-list-fixed{flex:none}#iotCallRows{flex:1 1 auto;min-height:0;overflow:auto;margin:0 -4px;padding:2px 4px 0}.call-list-head{font-size:var(--fs-base);font-weight:600;margin-bottom:10px}.call-list-head .dummy{display:none}.call-remain{background:var(--wait-soft);color:var(--wait);font-size:var(--fs-xs);font-weight:600;padding:3px 10px;border-radius:var(--r-pill)}.call-resizer{position:relative;cursor:col-resize;touch-action:none;align-self:stretch;min-height:200px}.call-resizer:before{content:"";position:absolute;inset:12px 2px auto 2px;height:calc(100% - 24px);border-radius:999px;background:var(--border);transition:background .15s}.call-resizer:hover:before,.call-resizer.is-dragging:before{background:var(--brand)}.call-resizer:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4px;height:34px;border-radius:999px;background:var(--border-strong)}.call-resizer:hover:after,.call-resizer.is-dragging:after{background:var(--brand-strong)}body.is-col-resizing{-webkit-user-select:none;user-select:none;cursor:col-resize}.call-row{display:flex;align-items:flex-start;gap:9px;padding:9px 10px;margin-bottom:4px;border:1px solid transparent;border-radius:var(--r-md);cursor:pointer;transition:background .12s,border-color .12s}.call-row:hover{background:var(--surface-2);border-color:var(--border)}.call-row.on{background:var(--brand-soft);border-color:var(--brand);box-shadow:none}.call-row-no{flex:none;min-width:22px;height:22px;padding:0 5px;display:grid;place-items:center;border-radius:var(--r-sm);background:var(--surface-3);color:var(--text-3);font-size:var(--fs-xs);font-weight:600;font-variant-numeric:tabular-nums}.call-row.on .call-row-no{background:var(--brand);color:#fff}[data-theme=dark] .call-row.on .call-row-no{color:#0b1f1a}.call-row-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.call-row-top{display:flex;align-items:center;gap:6px}.call-row-name{font-size:var(--fs-base);font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.call-row .call-dot{width:7px;height:7px;margin:0;flex:none}.call-row-phone{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-base);font-weight:600;color:var(--brand-strong);font-variant-numeric:tabular-nums;letter-spacing:.02em}.call-row-nophone{color:var(--text-3);font-weight:400;font-size:var(--fs-sm)}.call-row-area{font-size:var(--fs-xs);color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.call-prov-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:8px;margin:10px 0 5px;padding:5px 8px;background:var(--surface-2);border-radius:var(--r-sm);border-left:3px solid var(--brand);font-size:var(--fs-xs);font-weight:700;color:var(--text-2)}#iotCallRows>.call-prov-head:first-child{margin-top:0}.call-prov-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.call-prov-n{flex:none;color:var(--text-3);font-weight:600;font-variant-numeric:tabular-nums}.call-form-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:18px;margin-left:8px}.call-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}.call-head-info{flex:1 1 340px;min-width:0}.call-head-topline{display:flex;align-items:center;gap:10px 12px;min-width:0;flex-wrap:wrap}.call-head-name{font-size:var(--fs-xl);font-weight:700;letter-spacing:-.015em;line-height:1.3;flex:none}.call-head-loc{display:flex;align-items:center;gap:5px;margin-top:3px;font-size:var(--fs-base);color:var(--muted)}.call-note-badge{flex:1 1 auto;min-width:0;display:inline-flex;align-items:center;gap:8px;padding:5px 11px;border-radius:var(--r-md);background:#fff8e1;border:1px solid #f0a500;box-shadow:0 0 0 2px #f0a50029;cursor:default}.call-note-badge.is-block{flex:1 1 100%;width:100%}.call-note-tag{flex:none;display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;color:#8a5b00;white-space:nowrap}.call-note-tag .ico{color:#b07a06}.call-note-text{flex:1 1 auto;min-width:0;display:block;font-size:13px;font-weight:600;line-height:1.35;color:#4a3405;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[data-theme=dark] .call-note-badge{background:#3a2f12;border-color:#c79a2e;box-shadow:0 0 0 2px #c79a2e2e}[data-theme=dark] .call-note-tag,[data-theme=dark] .call-note-tag .ico{color:#e8c877}[data-theme=dark] .call-note-text{color:#f2e4c2}.call-note-flag{flex:none;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:5px;background:#fff3cd;border:1px solid #f0a500;color:#8a5b00}[data-theme=dark] .call-note-flag{background:#3a2f12;border-color:#c79a2e;color:#e8c877}@media(max-width:900px){.call-head-topline{flex-wrap:wrap}.call-note-badge{flex-basis:100%}}.pdf-report .pdf-note-cell{font-size:10px;line-height:1.3}.call-head-loc .ico{color:var(--text-3)}.call-nav{display:flex;gap:6px}.call-phone-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:14px 0 12px;padding:12px 16px;background:var(--brand-soft);border:1px solid var(--brand);border-radius:var(--r-md)}.call-phone-label{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);font-weight:600;color:var(--brand-strong)}.call-phone-num{font-size:26px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;letter-spacing:.04em;-webkit-user-select:all;user-select:all;cursor:text}.call-phone-none{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-base);color:var(--danger);font-weight:500}.call-phone-nid{margin-left:auto;font-size:var(--fs-sm);color:var(--muted);font-variant-numeric:tabular-nums}.call-phone-nid b{color:var(--text);-webkit-user-select:all;user-select:all}.call-chips{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:4px}.call-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 11px;border-radius:var(--r-pill);background:var(--surface-2);border:1px solid var(--divider);font-size:var(--fs-sm);color:var(--text)}.call-chip b{color:var(--text-3);font-weight:500}.call-chip.is-key{background:var(--brand-soft);border-color:transparent;color:var(--brand-strong)}.call-chip.is-key b{color:var(--brand-strong);opacity:.75}@media(max-width:900px){.call-wrap{grid-template-columns:1fr}.call-resizer{display:none}.call-list{position:static;max-height:320px}.call-form-card{margin-left:0;margin-top:12px}}.call-fields label span.call-ask,.call-fields label .call-ask{background:#fdebc8;color:#7a4a05;border:1px solid #efc178;font-weight:700;letter-spacing:.01em}[data-theme=dark] .call-fields label span.call-ask,[data-theme=dark] .call-fields label .call-ask{background:#4a3a15;color:#f2d089;border-color:#7d6425}.call-save-hint{flex:1;align-self:center;font-size:var(--fs-sm);color:var(--text-3)}.call-unsaved{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--r-pill);background:var(--wait-soft);color:var(--wait);font-weight:600}.call-autosaved{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--r-pill);background:var(--brand-soft);color:var(--brand-strong);font-weight:600}.call-export{display:flex;gap:6px;margin-bottom:8px}.call-export .btn{flex:1}.call-remain-all{opacity:.65;font-weight:500}.inst-bottomnav,.inst-filter-open{display:none}.inst-quick-label{font-size:var(--fs-xs);color:var(--text-3);margin:12px 0 5px}.inst-quick-status{display:flex;gap:6px;flex-wrap:wrap}.inst-qs{flex:1 1 auto;min-height:44px;min-width:104px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--border-strong, var(--border));border-radius:var(--r-md);background:var(--surface);color:var(--text);font-family:inherit;font-size:var(--fs-base);font-weight:600;cursor:pointer;transition:background .12s,color .12s,border-color .12s}.inst-qs:active{transform:scale(.97)}.inst-qs.on.ready{background:var(--info-soft);color:var(--info);border-color:currentColor}.inst-qs.on.done{background:var(--ok-soft);color:var(--ok);border-color:currentColor}.inst-qs.on.site_not_ready{background:var(--attn-soft);color:var(--attn);border-color:currentColor}.inst-sn-done{display:flex;align-items:center;gap:6px;margin-top:8px;padding:7px 11px;border-radius:var(--r-md);background:var(--ok-soft);color:var(--ok);font-size:var(--fs-sm);font-weight:600}.inst-sn-done b{font-variant-numeric:tabular-nums;-webkit-user-select:all;user-select:all}.inst-more-btn{width:100%;margin-top:12px;min-height:44px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 12px;border:1px dashed var(--border-strong, var(--border));border-radius:var(--r-md);background:var(--surface-2);color:var(--muted);font-family:inherit;font-size:var(--fs-sm);font-weight:600;cursor:pointer}.inst-more-btn:active{background:var(--surface-3)}.inst-more-btn .chevron{transition:transform .18s}.inst-more-btn.open .chevron{transform:rotate(180deg)}.inst-act-btn.scan{background:var(--ink);color:var(--surface);border:0;font-family:inherit;cursor:pointer}.inst-filter-sheet{display:none}.inst-filter-sheet.open{display:block}.inst-sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:90}.inst-sheet-body{position:fixed;left:0;right:0;bottom:0;z-index:91;background:var(--surface);border-radius:18px 18px 0 0;padding:8px 16px calc(16px + env(safe-area-inset-bottom));max-height:82vh;overflow:auto;box-shadow:0 -8px 30px #00000047;animation:instSheetUp .22s cubic-bezier(.2,.8,.3,1)}@keyframes instSheetUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.inst-sheet-grip{width:40px;height:4px;border-radius:999px;background:var(--border-strong, var(--border));margin:4px auto 12px}.inst-sheet-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.inst-sheet-apply{width:100%;min-height:48px;margin-top:12px;font-size:var(--fs-md)}body.inst-sheet-lock,body.qr-scanning{overflow:hidden}@media(max-width:780px){#installerShell{padding-bottom:78px}.inst-tabbar{display:none}.inst-filter-open{width:100%;min-height:46px;margin-bottom:10px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 14px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text);font-family:inherit;font-size:var(--fs-base);font-weight:600;cursor:pointer}.inst-filter-open-l{display:inline-flex;align-items:center;gap:7px}.inst-filter-open-count{font-size:var(--fs-sm);font-weight:500;color:var(--muted)}.inst-filter-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:var(--brand);color:#fff;font-size:var(--fs-xs);font-weight:700}.inst-filter-sheet:not(.open) .filters{display:none}.inst-bottomnav{position:fixed;left:0;right:0;bottom:0;z-index:80;display:flex;align-items:stretch;background:var(--surface);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -2px 14px #00000012}.inst-bn-btn{flex:1;min-height:58px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border:0;background:none;color:var(--text-3);font-family:inherit;font-size:var(--fs-xs);font-weight:600;cursor:pointer;-webkit-tap-highlight-color:transparent}.inst-bn-btn .ico{transition:transform .15s}.inst-bn-btn.active{color:var(--brand-strong)}.inst-bn-btn.active .ico{transform:translateY(-1px)}.inst-bn-btn:active .ico{transform:scale(.9)}.inst-actions .inst-act-export{display:none}.inst-actions.show-export .inst-act-export{display:inline-flex}.inst-actions.show-export .inst-act-more{display:none}.inst-topbar{gap:8px}.inst-actions{display:flex;gap:8px}.inst-actions .btn{flex:1 1 0;min-height:42px}.inst-job-actions{gap:7px}.inst-job-actions .inst-act-btn{flex:1 1 46%;min-height:46px;font-size:var(--fs-base)}.inst-list-row{min-height:62px}#installerShell input,#installerShell select,#installerShell textarea,.inst-sheet-body input,.inst-sheet-body select{font-size:16px!important}.inst-job-edit select,.inst-job-edit input[type=text],.inst-job-edit input[type=number]{min-height:44px}}.qr-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100000;display:flex;flex-direction:column;background:#000;color:#fff;padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}.qr-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;font-size:16px}.qr-title{display:inline-flex;align-items:center;gap:8px;font-weight:700}.qr-icon-btn{width:42px;height:42px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;border:0;background:#ffffff24;color:#fff;cursor:pointer}.qr-icon-btn:active{background:#ffffff47}.qr-stage{position:relative;flex:1;overflow:hidden}.qr-stage video{width:100%;height:100%;object-fit:cover;display:block;background:#000}.qr-frame{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:min(68vw,300px);aspect-ratio:1;border-radius:22px;box-shadow:0 0 0 100vmax #0000008c;transition:box-shadow .2s}.qr-corner{position:absolute;width:34px;height:34px;border:4px solid #fff;border-radius:4px;transition:border-color .2s}.qr-corner.tl{top:-2px;left:-2px;border-right:0;border-bottom:0;border-top-left-radius:20px}.qr-corner.tr{top:-2px;right:-2px;border-left:0;border-bottom:0;border-top-right-radius:20px}.qr-corner.bl{bottom:-2px;left:-2px;border-right:0;border-top:0;border-bottom-left-radius:20px}.qr-corner.br{bottom:-2px;right:-2px;border-left:0;border-top:0;border-bottom-right-radius:20px}.qr-laser{display:none}.qr-overlay.is-live .qr-laser{display:block;position:absolute;left:8%;right:8%;top:0;height:2px;background:linear-gradient(90deg,transparent,#34d399,transparent);box-shadow:0 0 12px 2px #34d39980;animation:qrSweep 2.4s cubic-bezier(.45,0,.55,1) infinite}@keyframes qrSweep{0%,to{top:4%}50%{top:96%}}.qr-overlay.is-hit .qr-corner{border-color:#34d399}.qr-overlay.is-hit .qr-frame{box-shadow:0 0 0 100vmax #000000b8,0 0 26px 6px #34d3998c}.qr-overlay.is-hit .qr-laser{animation:none;opacity:0}.qr-overlay.is-error .qr-frame{display:none}.qr-foot{padding:14px;display:flex;flex-direction:column;gap:12px;align-items:center}.qr-hint{text-align:center;font-size:14px;line-height:1.5;color:#ffffffdb}.qr-tools{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.qr-tool{min-height:46px;padding:0 18px;border-radius:999px;display:inline-flex;align-items:center;gap:7px;border:1px solid rgba(255,255,255,.3);background:#ffffff1a;color:#fff;font-family:inherit;font-size:15px;font-weight:600;cursor:pointer}.qr-tool:active{background:#ffffff38}.qr-tool.is-on{background:#fbbf24;border-color:#fbbf24;color:#1a1a1a}@media(prefers-reduced-motion:reduce){.qr-overlay.is-live .qr-laser,.inst-sheet-body{animation:none}}.inst-act-more{display:none}@media(max-width:780px){.inst-act-more{display:inline-flex}}.inst-plot{margin-top:10px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2)}.inst-plot.need{border-color:var(--attn);background:var(--attn-soft)}.inst-plot.ok{border-color:var(--ok);background:var(--ok-soft)}.inst-plot-head{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:var(--fs-sm);font-weight:600}.inst-plot-tag{font-size:var(--fs-xs);font-weight:700;color:var(--ok);display:inline-flex;align-items:center;gap:4px}.inst-plot-tag.need{color:var(--attn)}.inst-plot-val{margin-top:6px;font-size:var(--fs-sm);font-variant-numeric:tabular-nums;word-break:break-all}.inst-plot-val a{color:var(--brand-strong)}.inst-plot-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:9px}.inst-plot-actions .btn{flex:1 1 auto;min-height:42px}.inst-chg{margin-top:4px}.inst-chg-head{display:flex;align-items:center;gap:5px;font-size:var(--fs-xs);font-weight:700;color:var(--text-3);margin-bottom:4px}.inst-chg-row{font-size:11.5px;line-height:1.5;color:var(--muted);padding:3px 0}.inst-chg-row+.inst-chg-row{border-top:1px dashed var(--divider)}.inst-chg-row b{color:var(--text);font-weight:600}.inst-chg-val{display:block;color:var(--text-2)}.inst-chg-meta{display:block;font-size:11px;color:var(--text-3)}.inst-chg-team{opacity:.8}.done-row{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);margin-bottom:8px;overflow:hidden}.done-row.open{border-color:var(--brand)}.done-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;cursor:pointer}.done-head:hover{background:var(--surface-2)}.done-head-main{flex:1;min-width:0}.done-name{font-size:var(--fs-base);font-weight:600;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.done-project{font-size:var(--fs-xs);font-weight:600;padding:2px 9px;border-radius:var(--r-pill);background:var(--brand-soft);color:var(--brand-strong)}.done-sub{display:flex;gap:14px;flex-wrap:wrap;margin-top:4px;font-size:var(--fs-sm);color:var(--muted)}.done-sub span{display:inline-flex;align-items:center;gap:4px}.done-ar{font-variant-numeric:tabular-nums;font-weight:600;color:var(--text)}.done-ar.none{color:var(--attn);font-weight:500}.done-boxtype{color:var(--brand-strong);font-weight:500}.done-head-right{display:flex;align-items:center;gap:10px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.done-doc{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;padding:4px 11px;border-radius:var(--r-pill);font-size:var(--fs-xs);font-weight:600}.done-doc.ok{background:var(--ok-soft);color:var(--ok)}.done-doc.warn{background:var(--attn-soft);color:var(--attn)}.done-sent{font-size:var(--fs-xs);color:var(--brand-strong);display:inline-flex;align-items:center;gap:4px}.done-stage-chip{font-size:var(--fs-xs);font-weight:700;padding:2px 9px;border-radius:var(--r-pill);background:var(--brand-light);color:var(--brand-strong);white-space:nowrap}.done-stage-chip.is-done{background:var(--ok-soft);color:var(--ok)}.done-stage-btn{white-space:nowrap}.done-stage-wait{font-size:var(--fs-xs);color:var(--text-3);display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.done-chevron{color:var(--text-3);transition:transform .18s}.done-row.open .done-chevron{transform:rotate(180deg)}.done-body{padding:0 14px 14px;border-top:1px solid var(--divider)}.done-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:18px;margin-top:14px}@media(max-width:900px){.done-grid{grid-template-columns:1fr}}.done-col-title{font-size:var(--fs-sm);font-weight:600;color:var(--text-3);display:flex;align-items:center;gap:6px;margin-bottom:8px}.done-photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.done-slot{border:1px solid var(--divider);border-radius:var(--r-md);padding:8px;background:var(--surface-2)}.done-slot-title{font-size:var(--fs-xs);color:var(--text-3);margin-bottom:6px;text-align:center}.done-slot img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:var(--r-sm);display:block;background:var(--surface-3)}.done-slot-empty{display:flex;align-items:center;justify-content:center;aspect-ratio:4/3;border:1px dashed var(--border-strong, var(--border));border-radius:var(--r-sm);color:var(--text-3);font-size:var(--fs-sm)}.done-empty-box{display:flex;align-items:center;justify-content:center;height:150px;border:1px dashed var(--border-strong, var(--border));border-radius:var(--r-sm);color:var(--text-3);font-size:var(--fs-sm)}.done-empty-line{display:flex;align-items:center;min-height:34px;padding:0 10px;flex:1 1 auto;min-width:0;border:1px dashed var(--border-strong, var(--border));border-radius:var(--r-sm);color:var(--text-3);font-size:var(--fs-xs);line-height:1.35}.done-boxtype-value{display:flex;align-items:center;min-height:34px;padding:0 10px;border:1px solid var(--divider);border-radius:var(--r-sm);background:var(--surface-2);font-size:var(--fs-sm);font-weight:600;color:var(--text)}.done-slot-act{display:flex;gap:6px;justify-content:center;margin-top:7px;flex-wrap:wrap}.done-slot-act .btn{cursor:pointer}.done-video{width:100%;border-radius:var(--r-md);background:#000;max-height:200px}.done-plot{font-size:var(--fs-sm);font-variant-numeric:tabular-nums;word-break:break-all}.done-plot a{color:var(--brand-strong)}.done-ar-input{width:100%;height:36px;font-variant-numeric:tabular-nums}.done-meta{display:grid;grid-template-columns:minmax(0,170px) minmax(0,1fr);gap:10px 14px;margin-top:14px}@media(max-width:700px){.done-meta{grid-template-columns:1fr}}.done-meta-item{min-width:0}.done-link-row{display:flex;align-items:center;gap:7px;min-width:0}.done-link{flex:1 1 auto;min-width:0;display:block;min-height:34px;line-height:34px;padding:0 10px;border:1px solid var(--divider);border-radius:var(--r-sm);background:var(--surface-2);color:var(--brand-strong);font-size:var(--fs-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.done-fold{margin-top:12px;border:1px dashed var(--divider);border-radius:var(--r-sm);background:var(--surface-2)}.done-fold>summary{display:flex;align-items:center;gap:6px;cursor:pointer;list-style:none;padding:7px 10px;font-size:var(--fs-xs);font-weight:700;color:var(--text-3)}.done-fold>summary::-webkit-details-marker{display:none}.done-fold>summary:after{content:"▾";margin-left:auto;font-size:11px;opacity:.7;transition:transform .15s ease}.done-fold[open]>summary:after{transform:rotate(180deg)}.done-fold>summary:hover{color:var(--text)}.done-fold-body{padding:0 10px 9px}.done-fold-count{font-weight:600;color:var(--text-3);background:var(--surface-3);border-radius:999px;padding:0 7px;font-size:11px}.done-fold-danger{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 6%,transparent)}.done-fold-danger>summary{color:var(--danger)}.done-send{margin-top:14px;padding-top:12px;border-top:1px dashed var(--divider)}.done-send .btn{width:100%;min-height:44px}.done-sent-at{font-size:var(--fs-xs);color:var(--muted);margin-top:6px;text-align:center}.done-danger{margin-top:16px;padding:10px 12px;border-radius:var(--r-md);border:1px dashed var(--danger);background:color-mix(in srgb,var(--danger) 6%,transparent)}.done-danger-title{font-size:var(--fs-xs);font-weight:700;color:var(--danger);display:flex;align-items:center;gap:6px}.done-danger-hint{font-size:var(--fs-xs);color:var(--muted);margin:4px 0 8px;line-height:1.5}.master-reset-btn{width:100%;min-height:40px;justify-content:center}.btn-linklike-danger{color:var(--danger)}.btn-linklike-danger:hover{color:var(--danger);filter:brightness(.9)}body.pv-open{overflow:hidden}.pv{position:fixed;top:0;right:0;bottom:0;left:0;z-index:4000;display:flex;flex-direction:column;background:#080b0ef0;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:pvIn .16s ease-out}.pv[hidden]{display:none}@keyframes pvIn{0%{opacity:0}to{opacity:1}}.pv-bar{flex:none;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;color:#fff;background:linear-gradient(to bottom,rgba(0,0,0,.55),transparent)}.pv-title{display:flex;align-items:baseline;gap:10px;min-width:0}.pv-label{font-size:var(--fs-sm);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pv-count{font-size:var(--fs-xs);opacity:.7;font-variant-numeric:tabular-nums;flex:none}.pv-tools{display:flex;align-items:center;gap:4px;flex:none}.pv-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:none;border-radius:50%;background:#ffffff1a;color:#fff;cursor:pointer;transition:background .15s}.pv-btn:hover{background:#ffffff38}.pv-btn:active{background:#ffffff4d}.pv-stage{flex:1;min-height:0;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;touch-action:none;cursor:grab}.pv.is-zoomed .pv-stage{cursor:grabbing}.pv-media{max-width:100%;max-height:100%;transform-origin:center center;will-change:transform;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.pv-media[hidden]{display:none}#pvVideo{width:min(100%,900px);background:#000}.pv-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:1;width:46px;height:46px;border:none;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#ffffff1f;color:#fff;cursor:pointer;transition:background .15s}.pv-nav:hover{background:#ffffff42}.pv-nav[hidden]{display:none}.pv-prev{left:12px}.pv-next{right:12px}.pv-hint{flex:none;padding:10px 14px 16px;text-align:center;font-size:var(--fs-xs);color:#ffffff8c}.pv-hint[hidden]{display:none}.img-zoomable{display:block;width:100%;padding:0;border:none;background:none;cursor:zoom-in;border-radius:inherit}.img-zoomable img{display:block}@media(max-width:640px){.pv-nav{width:40px;height:40px}.pv-prev{left:6px}.pv-next{right:6px}.pv-hint{display:none}.pv-btn{width:42px;height:42px}}.inst-card-readonly{opacity:.95}.inst-done-pay{font-size:var(--fs-xs);color:var(--muted);margin-top:6px}.inst-kpi-link{cursor:pointer;border:none;font:inherit;text-align:inherit}.inst-kpi-link:hover{filter:brightness(.97)}.metric-clickable{cursor:pointer;text-align:left;font:inherit}.metric-clickable:hover{filter:brightness(.98)}.rank-sort{display:flex;gap:4px}.rank-sort-btn{border:1px solid var(--border);background:var(--surface);color:var(--muted);font-family:inherit;font-size:var(--fs-xs);padding:3px 9px;border-radius:99px;cursor:pointer}.rank-sort-btn.active{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}.rank-fill.is-remain{background:var(--danger)}.stat.stat-warn{background:var(--wait-soft);color:var(--wait)}.inst-job-card,.inst-list-row{content-visibility:auto;contain-intrinsic-size:auto 120px}#iotCompletedList>.done-row{content-visibility:auto;contain-intrinsic-size:auto 74px}#iotCallRows>.call-row{content-visibility:auto;contain-intrinsic-size:auto 46px}.stage-panel{margin-top:12px;padding:10px 12px;border:1px solid var(--divider);border-radius:var(--r-md);background:var(--surface-2)}.stage-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.stage-steps{display:inline-flex;gap:4px}.stage-dot{width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;background:var(--surface-3);color:var(--text-3);border:1px solid var(--divider)}.stage-dot.is-past{background:color-mix(in srgb,var(--ok, #16a34a) 18%,transparent);color:var(--ok, #16a34a);border-color:transparent}.stage-dot.is-now{background:var(--brand);color:#fff;border-color:var(--brand)}.stage-now{font-size:var(--fs-sm);font-weight:700;color:var(--text)}.stage-flags{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.stage-flag{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-xs);font-weight:600;padding:2px 8px;border-radius:var(--r-pill)}.stage-flag.is-danger{background:color-mix(in srgb,var(--danger) 12%,transparent);color:var(--danger)}.stage-flag.is-warn{background:#fff3cd;color:#7a4e00}[data-theme=dark] .stage-flag.is-warn{background:#3a2f12;color:#ffd98a}.stage-missing{margin-top:7px;font-size:var(--fs-xs);color:var(--danger);line-height:1.5}.stage-warn{margin-top:5px;font-size:var(--fs-xs);color:var(--text-3);line-height:1.5}.stage-depa{margin-top:7px;font-size:var(--fs-xs);color:var(--text-2)}.stage-depa.is-none{color:var(--text-3);font-style:italic}.stage-depa.is-warn{display:flex;align-items:flex-start;gap:5px;color:#92400e;background:#fffbeb;border:1px solid #fbbf24;border-radius:var(--r-sm);padding:6px 9px;line-height:1.45}[data-theme=dark] .stage-depa.is-warn{background:#3a2f12;color:#ffd98a;border-color:#5a4a1e}.done-legacy{display:inline-block;font-size:11px;font-weight:600;padding:1px 8px;border-radius:var(--r-pill);background:var(--surface-3);color:var(--text-3);margin-left:6px;vertical-align:middle}.stage-actions{margin-top:9px}.stage-actions .btn{width:100%;min-height:38px}.stage-wait{display:block;font-size:var(--fs-xs);color:var(--text-3);line-height:1.5}.stage-manual{margin-top:9px;padding-top:8px;border-top:1px dashed var(--divider);display:flex;align-items:center;gap:8px;flex-wrap:wrap}.stage-by{font-size:11px;color:var(--text-3)}.stage-chip{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-xs);font-weight:600;padding:1px 8px;border-radius:var(--r-pill);background:var(--brand-light);color:var(--brand-strong);white-space:nowrap}.call-try-info{font-size:var(--fs-xs);color:var(--text-3);font-weight:400}.call-waived-note{display:flex;align-items:flex-start;gap:7px;margin-top:2px;padding:9px 11px;border:1px solid var(--divider);border-radius:var(--r-md);background:var(--surface-2, var(--surface));font-size:var(--fs-sm);line-height:1.5;color:var(--text-2)}.call-waived-note .ov-i,.call-waived-note svg{flex:none;margin-top:2px;color:var(--text-3)}.stage-board{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}.stage-card{display:flex;flex-direction:column;gap:3px;align-items:flex-start;text-align:left;padding:11px 12px;border:1px solid var(--divider);border-radius:var(--r-md);background:var(--surface);cursor:pointer;font-family:inherit;transition:border-color .12s ease,transform .12s ease}.stage-card:hover{border-color:var(--brand);transform:translateY(-1px)}.stage-card-no{font-size:11px;font-weight:700;color:var(--text-3)}.stage-card-num{font-size:24px;font-weight:800;line-height:1.1;color:var(--text);font-variant-numeric:tabular-nums}.stage-card-label{font-size:var(--fs-xs);color:var(--text-2)}.stage-card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.stage-cell{display:inline-block;font-size:var(--fs-xs);color:var(--text-2);white-space:nowrap}.stage-cell b{color:var(--text);font-variant-numeric:tabular-nums}.stage-card-bar{display:block;width:100%;height:4px;border-radius:4px;background:var(--surface-3);margin-top:5px;overflow:hidden}.stage-card-bar>span{display:block;height:100%;background:var(--brand)}.stage-out{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px}.stage-out:empty{display:none}.stage-out-lead{font-size:var(--fs-sm);font-weight:700;color:var(--text-2)}.stage-out-note{font-size:var(--fs-xs);color:var(--text-3)}.stage-out-chip{padding:5px 11px;border-radius:var(--r-pill);border:1px solid var(--divider);background:var(--surface);color:var(--text-2);font-size:var(--fs-xs);font-family:inherit;cursor:pointer;transition:border-color .12s ease}.stage-out-chip:hover{border-color:var(--danger)}.stage-out-chip:focus-visible{outline:2px solid var(--danger);outline-offset:2px}.stage-out-lead b,.stage-out-chip b{color:var(--danger);font-weight:800;font-variant-numeric:tabular-nums}.stage-stuck{margin-top:14px}.stage-stuck-title{display:flex;align-items:center;gap:6px;font-size:var(--fs-sm);font-weight:700;color:var(--danger);margin-bottom:8px}.stage-stuck-list{display:flex;flex-wrap:wrap;gap:8px}.stage-stuck-item{padding:7px 12px;border-radius:var(--r-pill);border:1px solid #fbbf24;background:#fffbeb;color:#92400e;font-size:var(--fs-xs);font-family:inherit;cursor:pointer}.stage-stuck-item.is-danger{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 8%,transparent);color:var(--danger)}.stage-stuck-item b{font-weight:800}[data-theme=dark] .stage-stuck-item{background:#3a2f12;color:#ffd98a;border-color:#5a4a1e}.stage-stuck-ok{display:flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--ok, #16a34a)}.rpt-dash{color:#1c2621}.rpt-dash .rpt-page{page-break-before:always;padding-top:2mm}.rpt-dash .rpt-kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:14px}.rpt-dash .rpt-kpi{background:#f5f8f7;border:1px solid #e6eae8;border-top:4px solid #2c7f68;border-radius:8px;padding:10px 6px 9px;text-align:center}.rpt-dash .rpt-kpi-num{font-size:21px;font-weight:800;line-height:1.1;color:#1c2621}.rpt-dash .rpt-kpi-label{font-size:10.5px;color:#6b7a72;margin-top:3px}.rpt-dash .rpt-kpi-sub{font-size:9.5px;color:#9aa8a0;margin-top:1px}.rpt-dash .rpt-sec{margin-top:13px;page-break-inside:avoid}.rpt-dash .rpt-sec-head{display:flex;align-items:baseline;justify-content:space-between;border-bottom:1.5px solid #2c7f68;padding-bottom:4px;margin-bottom:8px}.rpt-dash .rpt-sec-head h2{margin:0;font-size:14px;color:#2c7f68}.rpt-dash .rpt-sec-head span{font-size:10.5px;color:#9aa8a0}.rpt-dash .rpt-note{font-size:11px;color:#6b7a72;margin-top:6px;line-height:1.5}.rpt-dash .rpt-note b{color:#1c2621}.rpt-dash .rpt-ok{color:#0f8065}.rpt-dash .rpt-bad{color:#d1443a}.rpt-dash .rpt-followup{margin-top:13px;border:1px solid #e6eae8;border-left:4px solid #b8860b;border-radius:6px;padding:9px 12px;background:#fcfaf5;page-break-inside:avoid}.rpt-dash .rpt-followup-title{font-size:12.5px;font-weight:700;color:#8a6508;margin-bottom:5px}.rpt-dash .rpt-followup-item{font-size:11.5px;color:#1c2621;padding:2px 0 2px 12px;position:relative}.rpt-dash .rpt-followup-item:before{content:"";position:absolute;left:0;top:8px;width:5px;height:5px;border-radius:50%;background:#b8860b}.rpt-dash .rpt-followup-item.is-bad:before{background:#d1443a}.rpt-dash .rpt-followup-item.is-ok:before{background:#0f8065}.rpt-dash .rpt-table{margin-top:2px;font-size:10.5px}.rpt-dash .rpt-table th,.rpt-dash .rpt-table td{padding:4px 7px}.rpt-dash .rpt-td-bar{white-space:nowrap}.rpt-dash .rpt-minibar{display:inline-block;width:62%;height:7px;border-radius:4px;background:#e6eae8;overflow:hidden;vertical-align:middle}.rpt-dash .rpt-minibar>i{display:block;height:100%;background:#0f8065;border-radius:4px}.rpt-dash .rpt-minipct{display:inline-block;width:32%;text-align:right;font-size:10px;color:#6b7a72}.rpt-dash .rpt-map{text-align:center}.rpt-dash .rpt-rank-wrap{display:grid;grid-template-columns:1fr 1fr;gap:14px}.rpt-dash .rpt-rank{border:1px solid #e6eae8;border-radius:6px;padding:8px 10px}.rpt-dash .rpt-rank-title{font-size:12px;font-weight:700;margin-bottom:5px}.rpt-dash .rpt-rank-title.is-ok{color:#0f8065}.rpt-dash .rpt-rank-title.is-bad{color:#c8762c}.rpt-dash .rpt-rank-row{display:flex;align-items:baseline;gap:7px;font-size:11px;padding:2px 0}.rpt-dash .rpt-rank-no{width:14px;color:#9aa8a0;font-weight:700}.rpt-dash .rpt-rank-name{flex:1;min-width:0}.rpt-dash .rpt-rank-val{font-weight:700}.rpt-dash .rpt-rank-sub{color:#9aa8a0;width:62px;text-align:right}#status.is-sync-stale{color:var(--attn);font-weight:600}.ts-summary{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:12px;padding:10px 14px;background:var(--surface-2);border:1px solid var(--divider);border-radius:var(--r-md)}.ts-sum-item{font-size:var(--fs-sm);color:var(--text-2)}.ts-sum-item b{font-size:17px;color:var(--text);margin-right:3px}.ts-sum-item.is-warn b{color:var(--attn)}.ts-group{margin-bottom:16px}.ts-group-head{font-size:var(--fs-sm);font-weight:700;color:var(--brand-strong);border-bottom:1.5px solid var(--brand-light);padding-bottom:5px;margin-bottom:9px;display:flex;align-items:baseline;gap:8px}.ts-group-head span{font-size:var(--fs-xs);font-weight:400;color:var(--text-3)}.ts-cards{display:flex;flex-direction:column;gap:9px}.ts-card{border:1px solid var(--divider);border-radius:var(--r-md);background:var(--surface);overflow:hidden}.ts-card.is-open{border-color:var(--brand);box-shadow:0 0 0 2px color-mix(in srgb,var(--brand) 16%,transparent)}.ts-card.is-cancelled{opacity:.62}.ts-card-head{display:flex;align-items:center;gap:14px;width:100%;padding:11px 14px;background:none;border:0;font-family:inherit;text-align:left;cursor:pointer}.ts-card-head:hover{background:var(--surface-2)}.ts-card-main{flex:1;min-width:0}.ts-card-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:var(--fs-md);font-weight:700;color:var(--text)}.ts-card-sub{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:var(--fs-xs);color:var(--text-3);margin-top:3px}.ts-card-sub span{display:inline-flex;align-items:center;gap:4px}.ts-card-right{display:flex;flex-direction:column;align-items:flex-end;gap:3px;flex-shrink:0}.ts-count{font-size:var(--fs-sm);color:var(--text-2);white-space:nowrap}.ts-count b{font-size:18px;color:var(--text)}.ts-count.is-over b{color:var(--danger)}.ts-cap-bar{width:92px;height:4px;border-radius:3px;background:var(--surface-3);overflow:hidden}.ts-cap-bar>span{display:block;height:100%;background:var(--brand)}.ts-count.is-over+.ts-cap-bar>span{background:var(--danger)}.ts-chevron{font-size:13px;color:var(--text-3)}.ts-card.is-open .ts-chevron{transform:rotate(180deg)}.ts-days{font-size:11px;font-weight:700;padding:1px 7px;border-radius:var(--r-pill);background:var(--attn-soft);color:var(--attn)}.ts-status{font-size:11px;font-weight:600;padding:1px 8px;border-radius:var(--r-pill);background:var(--surface-3);color:var(--text-3)}.ts-status.is-planned{background:var(--attn-soft);color:var(--attn)}.ts-status.is-confirmed{background:var(--brand-light);color:var(--brand-strong)}.ts-status.is-done{background:var(--ok-soft);color:var(--ok)}.ts-status.is-cancelled{background:var(--danger-soft);color:var(--danger)}.ts-card-body{padding:4px 14px 14px;border-top:1px solid var(--divider)}.ts-fields{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px}.ts-fields>div{display:flex;flex-direction:column;gap:3px;min-width:130px}.ts-fields>div.is-grow{flex:1 1 220px;min-width:0}.ts-fields label{font-size:var(--fs-xs);color:var(--text-3);font-weight:600}.ts-fields input,.ts-fields select{width:100%;min-width:0;box-sizing:border-box}.ts-hint{font-weight:400;color:var(--text-3);opacity:.85}.ts-actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-top:12px;padding-top:10px;border-top:1px dashed var(--divider)}.ts-actions-label{font-size:var(--fs-xs);color:var(--text-3)}.ts-member-wrap{max-height:380px;overflow:auto;margin-top:12px}.ts-empty{text-align:center;padding:34px 16px;color:var(--text-3)}.ts-empty-title{font-size:var(--fs-md);font-weight:700;color:var(--text-2);margin-top:8px}.ts-empty-text{font-size:var(--fs-sm);margin-top:4px}.ts-empty-line{font-size:var(--fs-sm);color:var(--text-3);padding:14px 2px}.ts-newform{border:1px dashed var(--brand);border-radius:var(--r-md);padding:13px 15px;margin-bottom:14px;background:var(--surface-2)}.ts-newform h3{margin:0 0 6px;font-size:var(--fs-md);color:var(--brand-strong);display:flex;align-items:center;gap:6px}.ts-check{display:inline-flex;align-items:center;gap:7px;font-size:var(--fs-sm);color:var(--text-2);margin-top:11px}.ts-bulkbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:10px 0 0;padding:9px 13px;background:var(--brand-light);border:1px solid var(--brand);border-radius:var(--r-md)}.ts-bulkbar>span:first-child{font-size:var(--fs-sm);font-weight:700;color:var(--brand-strong)}.plan-nosession{font-size:var(--fs-xs);color:var(--text-3);white-space:nowrap}.plan-session-link{font-weight:600;white-space:nowrap}.plan-date-locked{font-size:var(--fs-sm);color:var(--text-2);white-space:nowrap}.sp-panel{border:1px solid var(--brand);border-radius:var(--r-md);padding:13px 15px;margin-bottom:14px;background:var(--surface)}.sp-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.sp-head h3{margin:0;font-size:var(--fs-md);color:var(--brand-strong);display:flex;align-items:center;gap:6px}.sp-lead{font-size:12.5px;color:var(--text-3);margin:4px 0 12px;line-height:1.6}.sp-lead b{color:var(--text-2)}.sp-fields{display:flex;flex-wrap:wrap;gap:10px}.sp-fields>div{display:flex;flex-direction:column;gap:3px;min-width:128px;flex:1 1 128px}.sp-fields label{font-size:var(--fs-xs);color:var(--text-3);font-weight:600}.sp-fields input,.sp-fields select{width:100%;min-width:0;box-sizing:border-box}.sp-opts{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-top:11px}.sp-skip{display:flex;flex-direction:column;gap:3px;flex:1 1 240px;min-width:0}.sp-skip label{font-size:var(--fs-xs);color:var(--text-3);font-weight:600}.sp-summary{display:flex;gap:18px;flex-wrap:wrap;margin:14px 0 8px;padding:10px 14px;background:var(--brand-light);border-radius:var(--r-md)}.sp-summary>div{font-size:var(--fs-sm);color:var(--brand-strong)}.sp-summary>div b{font-size:18px;color:var(--text);margin-right:3px}.sp-summary>div.is-warn b{color:var(--attn)}.sp-warn{font-size:var(--fs-sm);color:var(--attn);background:var(--attn-soft);border-radius:var(--r-sm);padding:8px 12px;margin:8px 0}.sp-table-wrap{max-height:420px;overflow:auto;margin-top:6px}.sp-second-day{font-size:var(--fs-xs);color:var(--text-3);margin-top:3px;display:flex;align-items:center;gap:4px}.sp-over{font-size:var(--fs-xs);color:var(--danger);font-weight:600}.done-depa{display:inline-block;font-size:11px;font-weight:600;padding:1px 8px;border-radius:var(--r-pill);background:var(--brand-light);color:var(--brand-strong);margin-left:6px;vertical-align:middle}.done-noar{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;padding:1px 9px;border-radius:var(--r-pill);background:var(--attn-soft);color:var(--attn);border:1px solid var(--attn);margin-left:6px;vertical-align:middle;cursor:pointer;font-family:inherit}.done-noar:hover{background:var(--attn);color:#fff}.done-noar-check{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--text-2);white-space:nowrap;padding-bottom:8px}.done-filterbar{background:var(--surface-2);border:1px solid var(--divider);border-radius:var(--r-md);padding:12px 14px;margin-bottom:12px}.done-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));gap:10px 12px}.done-fields>div{display:flex;flex-direction:column;gap:3px;min-width:0}.done-fields>div.is-wide{grid-column:span 2}.done-fields label{font-size:var(--fs-xs);color:var(--text-3);font-weight:600}.done-fields input,.done-fields select{width:100%;min-width:0;box-sizing:border-box}.done-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:11px;padding-top:10px;border-top:1px solid var(--divider)}.done-toolbar-sep{flex:1}.done-toolbar .btn{white-space:nowrap}@media(max-width:700px){.done-fields>div.is-wide{grid-column:1 / -1}.done-toolbar-sep{display:none}.done-toolbar .btn{flex:1 1 auto;justify-content:center}}.done-tick{flex:0 0 auto;width:20px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.done-tick.is-empty{cursor:default}.done-tick input{width:16px;height:16px;cursor:pointer;accent-color:var(--brand);margin:0}.done-selectbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--brand-light);border:1px solid var(--brand);border-radius:var(--r-md);padding:9px 13px;margin:0 0 11px;position:sticky;top:0;z-index:3}.done-selectbar[hidden]{display:none}.done-sel-count{font-size:var(--fs-sm);color:var(--brand-strong)}.done-sel-warn{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-xs);font-weight:600;color:var(--attn)}.done-sel-sep{flex:1}@media(max-width:700px){.done-sel-sep{display:none}.done-selectbar .btn{flex:1 1 auto;justify-content:center}}.call-mode-tabs{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-bottom:7px}.call-mode-tab{font-family:inherit;font-size:var(--fs-xs);color:var(--text-2);cursor:pointer;background:var(--surface-2);border:1px solid var(--divider);border-radius:var(--r-sm);padding:5px 7px;line-height:1.3;text-align:center}.call-mode-tab b{display:block;font-size:var(--fs-sm);color:var(--text)}.call-mode-tab:hover{border-color:var(--brand)}.call-mode-tab.on{background:var(--brand-light);border-color:var(--brand);color:var(--brand-strong)}.call-mode-tab.on b{color:var(--brand-strong)}.call-mode-hint{font-size:11.5px;line-height:1.45;color:var(--text-3);background:var(--attn-soft);border-left:3px solid var(--attn);border-radius:var(--r-sm);padding:6px 8px;margin-bottom:7px}.inst-when-need{display:inline-flex;align-items:center;gap:4px;font-weight:700;color:var(--attn)}.inst-sched{border:1px solid var(--divider);border-radius:var(--r-md);padding:8px 10px;margin:8px 0}.inst-sched.need{border-color:var(--attn);background:var(--attn-soft)}.inst-sched.ok{background:var(--surface-2)}.inst-sched-head{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:var(--fs-sm);font-weight:600;margin-bottom:6px}.inst-sched-tag{font-size:var(--fs-xs);font-weight:700;color:var(--brand-strong)}.inst-sched-tag.need{color:var(--attn)}.inst-sched-row{display:grid;grid-template-columns:1fr 1fr;gap:6px}.inst-sched-row select{width:100%;min-width:0;box-sizing:border-box}.iot-sol-table th.iot-sol-grp{text-align:center;background:var(--brand-soft);color:var(--brand-strong, var(--brand))}.iot-sol-table th.iot-sol-grp.is-fit{background:var(--surface-3);color:var(--text-2)}.iot-sol-table td.num{text-align:center}.iot-sol-input{width:64px;height:32px;text-align:center;font-variant-numeric:tabular-nums;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--text);padding:0 6px}.iot-sol-input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.iot-sol-input.is-fitting{background:var(--surface-2)}.iot-sol-input.is-auto{color:var(--brand-strong, var(--brand));font-weight:600}.iot-sol-input::-webkit-outer-spin-button,.iot-sol-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.iot-sol-input[type=number]{-moz-appearance:textfield}.iot-sol-name{font-weight:600}.iot-sol-ar{font-size:12px;color:var(--brand-strong, var(--brand));font-weight:700;margin-left:4px}.iot-sol-meta{font-size:12px;color:var(--muted);margin-top:2px}.iot-sol-stage{color:var(--text-2)}.iot-sol-actions{white-space:nowrap}.iot-sol-actions .btn+.btn{margin-left:6px}.iot-sol-saved{font-size:12.5px;color:var(--ok, #1f7a4d);display:inline-flex;align-items:center;gap:4px}.iot-sol-none{font-size:12.5px;color:var(--muted)}.iot-sol-table tbody tr.is-dirty>td{background:#fffbe8!important}[data-theme=dark] .iot-sol-table tbody tr.is-dirty>td{background:#2a2712!important}.iot-sol-table tr.is-empty .iot-sol-name{color:var(--text-2)}.iot-sol-more{padding:12px 0 2px;display:flex;align-items:center}.summary-table tr.is-total td{border-top:2px solid var(--line-strong, var(--line))}.iot-sol-size{width:100%;height:32px;padding:0 8px;font-size:var(--fs-sm, 13px);border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--text)}.iot-sol-size:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.iot-sol-size:disabled{color:var(--muted)}.done-meta-wide{grid-column:1 / -1}.done-sol-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}.done-sol-size{height:36px;min-width:156px}.done-sol-field{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 10px;border:1px solid var(--divider);border-radius:var(--r-sm);background:var(--surface-2);font-size:var(--fs-xs);color:var(--text-3);white-space:nowrap}.done-sol-field b{font-weight:500}.done-sol-num{width:58px;height:26px;padding:0 6px;text-align:center;font-variant-numeric:tabular-nums;font-size:var(--fs-sm);font-weight:600;color:var(--text);border:1px solid var(--divider);border-radius:6px;background:var(--surface)}.done-sol-num.is-auto{color:var(--brand-strong)}.done-sol-num::-webkit-outer-spin-button,.done-sol-num::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.done-sol-num[type=number]{-moz-appearance:textfield}.done-sol-hint{font-size:var(--fs-xs);color:var(--text-3)}.done-sol-multi{font-size:var(--fs-xs);color:var(--warn-strong, var(--text-3))}.iot-sol-master{border:1px solid var(--border);border-radius:12px}.iot-sol-master-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.iot-sol-master-head h2{display:flex;align-items:center;gap:8px;margin:0}.iot-sol-master-tag{font-size:11.5px;font-weight:700;padding:2px 9px;border-radius:999px;background:var(--surface-3);color:var(--text-2)}.iot-sol-master-acts{display:flex;gap:8px;flex-wrap:wrap}.iot-sol-master-h3{font-size:14px;margin:16px 0 8px}.iot-sol-master-team td.is-miss{color:var(--red);font-weight:700}.iot-sol-master-list td{vertical-align:top}.acct-alert{margin:0 0 var(--s4);padding:12px 14px;border-radius:var(--r-md);background:var(--wait-soft);color:var(--text);font-size:var(--fs-sm);line-height:1.6;border:1px solid color-mix(in srgb,var(--wait) 30%,transparent)}.acct-alert.is-info{background:var(--info-soft);border-color:color-mix(in srgb,var(--info) 30%,transparent);display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap}.acct-alert code,.acct-hint code,.tl-pane code{font-size:.92em;background:var(--surface-3);padding:1px 6px;border-radius:6px}.acct-hint{font-size:var(--fs-sm);color:var(--text-2);line-height:1.6;margin:6px 0 12px}.acct-sub{font-size:var(--fs-xs);color:var(--text-3);line-height:1.45}.acct-sub.is-warn{color:var(--attn);font-weight:600}.acct-empty{padding:18px;text-align:center;color:var(--text-3);font-size:var(--fs-sm)}.acct-th-hint{font-weight:400;color:var(--text-3);font-size:var(--fs-xs)}.acct-table tr.is-disabled td{background:color-mix(in srgb,var(--danger-soft) 55%,transparent)}.acct-table tr.is-disabled .acct-name{text-decoration:line-through;text-decoration-color:color-mix(in srgb,var(--danger) 50%,transparent)}.acct-name{font-weight:600;color:var(--text)}.acct-me{display:inline-block;margin-left:4px;padding:0 7px;border-radius:var(--r-pill);background:var(--brand-soft);color:var(--brand-strong);font-size:11px;font-weight:600;vertical-align:1px}.acct-note{margin-top:4px;font-size:var(--fs-xs);color:var(--text-2)}.acct-team{margin-top:6px;width:100%;max-width:200px;font-size:var(--fs-xs);padding:4px 8px}.acct-role{width:100%;font-size:var(--fs-sm)}.acct-apps{display:flex;flex-wrap:wrap;gap:6px;min-width:300px}.acct-table{min-width:860px}.acct-table td{vertical-align:middle}.acct-app{white-space:nowrap;border:1px solid var(--border-strong);background:var(--surface);color:var(--text-3);border-radius:var(--r-pill);padding:4px 11px;font:inherit;font-size:var(--fs-xs);font-weight:600;cursor:pointer;transition:background var(--dur-1),color var(--dur-1),border-color var(--dur-1)}.acct-app:hover:not([disabled]){border-color:var(--brand);color:var(--text)}.acct-app.is-on{background:var(--brand-soft);border-color:color-mix(in srgb,var(--brand) 55%,transparent);color:var(--brand-dark)}.acct-app.is-on:before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor;margin-right:6px;vertical-align:1px}.acct-app.is-test.is-on{background:var(--wait-soft);border-color:color-mix(in srgb,var(--wait) 45%,transparent);color:var(--wait)}.acct-app[disabled]{cursor:not-allowed;opacity:.75}.acct-app.is-busy{opacity:.5;pointer-events:none}.acct-st{display:inline-block;padding:2px 10px;border-radius:var(--r-pill);font-size:var(--fs-xs);font-weight:600}.acct-st.is-on{background:var(--ok-soft);color:var(--ok)}.acct-st.is-off{background:var(--danger-soft);color:var(--danger)}.acct-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.acct-actions .btn{padding:3px 9px}.acct-panel{border:1px solid color-mix(in srgb,var(--brand) 35%,var(--border))}.acct-panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.acct-panel-head h2{margin:0}.acct-panel-head h2 .acct-sub{font-weight:400;margin-left:6px}.acct-panel-foot{display:flex;justify-content:flex-end;margin-top:14px}.acct-new-fields{margin-top:6px}.acct-new-apps{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:8px;margin-top:14px}.acct-new-apps-label{grid-column:1 / -1;font-size:var(--fs-xs);color:var(--text-3);font-weight:600}.acct-check{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-md);cursor:pointer;background:var(--surface)}.acct-check:has(input:checked){border-color:color-mix(in srgb,var(--brand) 55%,transparent);background:var(--brand-soft)}.acct-check.is-locked{opacity:.7;cursor:not-allowed}.acct-check input{margin-top:3px}.acct-check span{display:flex;flex-direction:column;gap:2px}.acct-check small{color:var(--text-3);font-size:var(--fs-xs);line-height:1.4}.acct-hist-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:10px 0 6px}.acct-hist-bar .acct-sub{flex:1 1 260px}.acct-timeline{list-style:none;margin:0;padding:0;max-height:560px;overflow:auto;border-top:1px solid var(--divider)}.acct-ev{display:grid;grid-template-columns:118px 130px 1fr;gap:10px;padding:8px 4px;border-bottom:1px solid var(--divider);font-size:var(--fs-sm);align-items:baseline}.acct-ev-time{color:var(--text-3);font-size:var(--fs-xs);font-variant-numeric:tabular-nums}.acct-ev-app{color:var(--text-2);font-size:var(--fs-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.acct-ev-target{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--fs-xs);color:var(--text-2);background:var(--surface-3);padding:0 6px;border-radius:6px}.acct-ev-det{display:block;color:var(--text-2);font-size:var(--fs-xs);margin-top:2px;word-break:break-word}.acct-ev.is-acct b,.acct-ev.is-test b{color:var(--attn)}.acct-ev.is-db b{color:var(--info)}@media(max-width:640px){.acct-ev{grid-template-columns:1fr;gap:2px}}.acct-dialog{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10050;background:#00000059;display:flex;align-items:center;justify-content:center;padding:16px}.acct-dialog-card{width:min(440px,100%);background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--sh-3);padding:20px}.acct-dialog-card h3{margin:0 0 6px;font-size:var(--fs-md)}.acct-dialog-card textarea{width:100%;box-sizing:border-box;margin-top:10px;font:inherit}.acct-dialog-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}.otod-test-banner{display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap;padding:8px 16px;background:var(--wait-soft);color:var(--text);font-size:var(--fs-sm);border-bottom:1px solid color-mix(in srgb,var(--wait) 35%,transparent)}.tl-subnav{flex-wrap:wrap;margin-bottom:var(--s4)}.tl-count:not(:empty){display:inline-block;min-width:18px;padding:0 6px;margin-left:4px;border-radius:var(--r-pill);background:var(--danger);color:#fff;font-size:11px;line-height:18px;text-align:center}.tl-pane h2{margin-top:0}.tl-pane h3{margin:22px 0 8px;font-size:var(--fs-md)}.tl-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px;margin:10px 0 14px}.tl-stat{padding:10px 12px;border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--border);display:flex;flex-direction:column;gap:2px}.tl-stat b{font-size:var(--fs-lg);font-variant-numeric:tabular-nums;color:var(--text-3)}.tl-stat.has b{color:var(--wait)}.tl-stat span{font-size:var(--fs-xs);color:var(--text-2)}.tl-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:10px 0}.tl-grow{flex:1 1 260px;min-width:0}.tl-inline{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--text-2)}.tl-inline input{width:80px}.tl-links{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:8px}.tl-link{display:flex;flex-direction:column;gap:3px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--r-md);text-decoration:none;color:var(--text);background:var(--surface)}.tl-link:hover{border-color:var(--brand)}.tl-link span{font-size:var(--fs-xs);color:var(--text-2);line-height:1.45}.tl-switch{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border:1px solid var(--border);border-radius:var(--r-md);cursor:pointer}.tl-switch input{margin-top:3px}.tl-switch span{display:flex;flex-direction:column;gap:2px}.tl-switch small{font-size:var(--fs-xs);color:var(--text-2);line-height:1.45}.tl-chips{display:flex;flex-wrap:wrap;gap:6px}.tl-chip{padding:3px 10px;border-radius:var(--r-pill);font-size:var(--fs-xs);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.tl-chip.is-warn{background:var(--attn-soft);color:var(--attn)}.tl-chip.is-ok{background:var(--ok-soft);color:var(--ok);font-family:inherit}.tl-ver{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px}.tl-ver>div{padding:10px 12px;border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--border);display:flex;flex-direction:column;gap:4px}.tl-list{margin:0;padding-left:18px;font-size:var(--fs-sm);line-height:1.8}.tl-copy{display:flex;flex-direction:column;gap:6px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-md)}.tl-copy code{word-break:break-all;font-size:var(--fs-xs)}.tl-copy .btn{align-self:flex-start}.tl-table td{vertical-align:top}.tl-err{cursor:pointer}.tl-err:hover td{background:var(--surface-2)}.tl-err-msg{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--fs-xs);word-break:break-word;color:var(--danger)}.tl-pre{white-space:pre-wrap;word-break:break-word;max-height:240px;overflow:auto;margin:6px 0;padding:8px 10px;background:var(--surface-3);border-radius:var(--r-sm);font-size:11px}.tl-picklist{display:flex;flex-direction:column;gap:6px;max-height:340px;overflow:auto;margin:6px 0 10px}.tl-pick{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:8px 12px;border:1px solid var(--border);border-radius:var(--r-md);cursor:pointer;background:var(--surface)}.tl-pick.is-on{border-color:color-mix(in srgb,#d4a72c 60%,transparent);background:#fffbea}.tl-pick.is-locked{opacity:.65;cursor:not-allowed}.tl-pick>span:nth-child(2){display:flex;flex-direction:column;gap:2px;min-width:0}.tl-pick-st{justify-self:end}.tl-chip.is-pick{background:#fff1c2;color:#6b4b00;font-family:inherit;display:inline-flex;gap:6px;align-items:center}.tl-chip.is-pick button{border:0;background:transparent;color:inherit;font:inherit;font-weight:700;cursor:pointer;padding:0 2px}.tl-add{margin:12px 0}.tl-add summary{cursor:pointer;font-weight:600;color:var(--text-2)}@media(max-width:640px){.tl-pick{grid-template-columns:auto 1fr}.tl-pick-st{grid-column:2;justify-self:start}}.tl-sugg-bar{justify-content:space-between}.tl-sugg-bar .acct-sub{flex:1 1 280px}.tl-sugg-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:10px;margin:6px 0 10px}.tl-sugg{border:1px solid var(--border);border-radius:var(--r-md);padding:10px;background:var(--surface-2);display:flex;flex-direction:column;gap:6px}.tl-sugg-head{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.tl-sugg-head .btn{margin-left:auto;padding:2px 8px}.tl-sugg .tl-pick{grid-template-columns:auto 1fr;padding:7px 10px}body{font-feature-settings:"kern" 1;text-rendering:optimizeLegibility}::selection{background:var(--brand-ring);color:var(--text)}:where(a,button,[role=button],input,select,textarea,summary):focus-visible{outline:none;box-shadow:0 0 0 3.5px var(--brand-ring);border-radius:var(--r-sm)}.page-title{font-weight:700;letter-spacing:-.026em;line-height:1.22}.panel-title,.metric-value{letter-spacing:-.018em}.metric-value{font-weight:700}#appShell{border-radius:26px;box-shadow:0 1px 3px #0000000a,0 12px 40px #0000000f}header.topbar{background:color-mix(in srgb,var(--surface) 72%,transparent);-webkit-backdrop-filter:var(--glass);backdrop-filter:var(--glass);border-radius:26px 26px 0 0;border-bottom-color:color-mix(in srgb,var(--border) 70%,transparent)}@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){header.topbar{background:var(--surface)}}.header-brand h1{font-weight:650;letter-spacing:-.02em}.header-brand .brand-logo{transition:transform var(--dur-2) var(--ease-out)}.header-brand:hover .brand-logo{transform:scale(1.06)}.module-switcher{padding:3px;background:var(--surface-3)}.module-btn{font-weight:550;transition:color var(--dur-1) var(--ease-out),background var(--dur-1) var(--ease-out),transform var(--dur-1) var(--ease-out),box-shadow var(--dur-1) var(--ease-out)}.module-btn.active{box-shadow:0 1px 3px #0000001f,0 3px 8px #0000000f}.module-btn:active{transform:scale(.96)}.tab-btn{font-weight:500;transition:background var(--dur-1) var(--ease-out),color var(--dur-1) var(--ease-out),border-color var(--dur-1) var(--ease-out),transform var(--dur-1) var(--ease-out)}.tab-btn:active{transform:scale(.97)}.tab-btn.active{font-weight:600;box-shadow:0 1px 2px #0000001a,0 4px 10px #0000000f}.subtab{font-weight:550;transition:color var(--dur-1) var(--ease-out)}.subtab.active{font-weight:650}.subtabs{border-bottom-color:var(--divider)}.btn{font-weight:550;transition:background var(--dur-1) var(--ease-out),border-color var(--dur-1) var(--ease-out),color var(--dur-1) var(--ease-out),box-shadow var(--dur-1) var(--ease-out),transform var(--dur-1) var(--ease-out)}.btn:active{transform:scale(.96)}.btn-brand,.btn-primary{box-shadow:0 1px 2px #00000014,0 4px 12px color-mix(in srgb,var(--brand) 26%,transparent)}.btn-brand:hover,.btn-primary:hover{box-shadow:0 2px 4px #00000017,0 8px 20px color-mix(in srgb,var(--brand) 32%,transparent)}.btn-outline:hover,.btn-ghost:hover{border-color:var(--border-strong);background:var(--surface-3)}.theme-toggle-btn,.header-user{transition:background var(--dur-1) var(--ease-out),transform var(--dur-1) var(--ease-out)}.theme-toggle-btn:active{transform:scale(.92)}.panel{border-radius:var(--r-lg);box-shadow:var(--sh-1);transition:box-shadow var(--dur-2) var(--ease-out)}.panel-head{padding:15px 18px}.panel-body{padding:18px 18px 20px}.metric-grid{gap:12px;background:none;border:0;border-radius:0;overflow:visible}.metric{border:1px solid var(--border);border-radius:var(--r-lg);padding:17px 18px 19px;box-shadow:var(--sh-1);transition:transform var(--dur-2) var(--ease-out),box-shadow var(--dur-2) var(--ease-out)}.metric:hover{transform:translateY(-2px);box-shadow:var(--sh-2)}.metric-label{font-weight:550}input[type=text],input[type=search],input[type=email],input[type=password],input[type=number],input[type=date],input[type=time],select,textarea{border-radius:var(--r-sm);border-color:var(--border-strong);transition:border-color var(--dur-1) var(--ease-out),box-shadow var(--dur-1) var(--ease-out),background var(--dur-1) var(--ease-out)}input:focus,select:focus,textarea:focus{box-shadow:0 0 0 3.5px var(--brand-ring)}.global-search-input{transition:background var(--dur-2) var(--ease-out),border-color var(--dur-1) var(--ease-out),box-shadow var(--dur-1) var(--ease-out)}.global-search-results{border-radius:var(--r-lg);box-shadow:var(--sh-3)}.tbl thead th{font-weight:600;letter-spacing:.01em;color:var(--text-2)}.tbl tbody td{border-bottom-color:var(--divider)}.tbl tbody tr{transition:background var(--dur-1) var(--ease-out)}.tbl-wrap{border-radius:var(--r-md)}.stat{font-weight:550}.chip-pct{border-radius:var(--r-pill);padding:2px 8px}.confirm-modal-overlay{background:#00000052;-webkit-backdrop-filter:blur(12px) saturate(140%);backdrop-filter:blur(12px) saturate(140%)}.confirm-modal,.um-modal{border:1px solid var(--border);border-radius:var(--r-xl);box-shadow:var(--sh-3);animation:refineSheetIn var(--dur-2) var(--ease-out)}@keyframes refineSheetIn{0%{opacity:0;transform:scale(.96) translateY(8px)}to{opacity:1;transform:none}}.toast{border-radius:var(--r-md);box-shadow:var(--sh-3)}@media(max-width:820px){header.topbar{background:var(--surface);-webkit-backdrop-filter:none;backdrop-filter:none}#appShell{border-radius:0;box-shadow:none}.metric-grid{gap:10px}.confirm-modal-overlay{-webkit-backdrop-filter:none;backdrop-filter:none;background:#00000073}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.metric:hover{transform:none}}@media print{*,*:before,*:after{box-shadow:none!important;text-shadow:none!important;animation:none!important;transition:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}.metric,.panel{transform:none!important}}.metric,.panel{transition:none}.metric:hover{transform:none;box-shadow:var(--sh-1)}.header-brand .brand-logo{transition:none}.header-brand:hover .brand-logo{transform:none}.tbl tbody tr{transition:none}#iotCompletedList>*,#iotPlanGroups>.plan-group-header+div,#iotCallRows>*,#installerJobGroups>*{content-visibility:auto;contain-intrinsic-size:auto 120px}select,input[type=text],input[type=search],input[type=email],input[type=password],input[type=number],input[type=date],input[type=time]{padding-top:0;padding-bottom:0;line-height:normal}.filters select,.filters input[type=text],.filters input[type=date]{height:36px}html:not([data-ui=v2]) .v2-navgrp{display:none}[data-ui=v2]{--v2-sb: 228px;--v2-top: 56px}@media(min-width:900px){[data-ui=v2] #appShell{display:grid!important;grid-template-columns:var(--v2-sb) minmax(0,1fr) auto;grid-template-rows:var(--v2-top) auto minmax(0,1fr);height:100dvh;max-width:none;margin:0;padding:0;border:0;border-radius:0;box-shadow:none;background:var(--bg);overflow:hidden}[data-ui=v2] #appShell[style*=none]{display:none!important}[data-ui=v2] #appShell>header.topbar,[data-ui=v2] #appShell>header.topbar>.header-top-row{display:contents}[data-ui=v2] #appShell:before{content:"";grid-column:1;grid-row:1 / 4;background:var(--surface);border-right:1px solid var(--border)}[data-ui=v2] #appShell:after{content:"";grid-column:2 / 4;grid-row:1;z-index:0;background:var(--surface);border-bottom:1px solid var(--border)}[data-ui=v2] .header-brand{grid-column:1;grid-row:1;z-index:1;align-self:center;padding:0 14px;gap:10px}[data-ui=v2] .header-brand .brand-logo{width:30px;height:30px}[data-ui=v2] .header-brand h1{font-size:var(--fs-md);font-weight:700;letter-spacing:-.02em}[data-ui=v2] .module-switcher{grid-column:1;grid-row:2;z-index:1;display:flex;margin:10px 12px 4px}[data-ui=v2] .module-btn{flex:1;justify-content:center;padding:7px 4px;font-size:var(--fs-sm);white-space:nowrap}[data-ui=v2] .module-btn.active{background:var(--surface);color:var(--text);box-shadow:0 1px 3px #0000001f}[data-ui=v2][data-theme=dark] .module-btn.active{background:var(--surface-3);color:var(--text)}[data-ui=v2] nav.tabbar{grid-column:1;grid-row:3;z-index:1;flex-direction:column;align-items:stretch;flex-wrap:nowrap;gap:2px;padding:4px 12px 14px;overflow-y:auto;overflow-x:hidden;min-height:0}[data-ui=v2] .v2-navgrp{padding:12px 12px 4px;font-size:11px;font-weight:600;letter-spacing:.06em;color:var(--text-3)}[data-ui=v2] .tab-btn{display:flex;width:100%;justify-content:flex-start;gap:10px;padding:8px 12px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--text-2);font-size:var(--fs-base);font-weight:500;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[data-ui=v2] .tab-btn .ico{width:16px;height:16px;flex:none;opacity:1}[data-ui=v2] .tab-btn:hover{background:var(--surface-3);color:var(--text);border-color:transparent}[data-ui=v2] .tab-btn.active{background:var(--ink);color:var(--surface);box-shadow:none}[data-ui=v2] .tab-btn.active:hover{background:var(--ink);color:var(--surface)}[data-ui=v2] .tab-btn.disabled{opacity:.45}[data-ui=v2] .tab-btn[data-tab=iot-dashboard]{order:10}[data-ui=v2] .tab-btn[data-tab=iot-map]{order:11}[data-ui=v2] .tab-btn[data-tab=iot-plan]{order:20}[data-ui=v2] .tab-btn[data-tab=iot-completed]{order:21}[data-ui=v2] .tab-btn[data-tab=iot-blockers]{order:22}[data-ui=v2] .tab-btn[data-tab=iot-solenoid]{order:23}[data-ui=v2] .tab-btn[data-tab=iot-app-match]{order:30}[data-ui=v2] .tab-btn[data-tab=iot-manual-code]{order:31}[data-ui=v2] .tab-btn[data-tab=iot-box]{order:32}[data-ui=v2] .tab-btn[data-tab=iot-app-promote]{order:33}[data-ui=v2] .tab-btn[data-tab=iot-removed]{order:34}[data-ui=v2] .tab-btn[data-tab=iot-report-center]{order:40}[data-ui=v2] .tab-btn[data-tab=iot-accounts]{order:50}[data-ui=v2] .tab-btn[data-tab=iot-testlab]{order:51}[data-ui=v2] .tab-btn[data-tab=dashboard]{order:10}[data-ui=v2] .tab-btn[data-tab=map]{order:11}[data-ui=v2] .tab-btn[data-tab=plan]{order:20}[data-ui=v2] .tab-btn[data-tab=training-confirm]{order:21}[data-ui=v2] .tab-btn:not([data-tab]){order:90}[data-ui=v2] .global-search-wrap{grid-column:2;grid-row:1;z-index:2;align-self:center;justify-self:start;width:100%;max-width:440px;margin:0 0 0 22px}[data-ui=v2] .global-search-wrap input.global-search-input{height:36px;border-radius:var(--r-sm);border-color:transparent;background:var(--surface-3)}[data-ui=v2] .global-search-wrap input.global-search-input:focus{background:var(--surface);border-color:var(--brand)}[data-ui=v2] .global-search-results{position:absolute;left:0;right:0;z-index:60}[data-ui=v2] .header-actions{grid-column:3;grid-row:1;z-index:1;align-self:center;margin:0;padding:0 20px 0 12px}[data-ui=v2] .ui-toggle-btn{color:var(--brand-strong);border-color:var(--brand-soft);background:var(--brand-soft)}[data-ui=v2] .ui-toggle-btn:hover{background:var(--brand-soft);color:var(--brand-dark)}[data-ui=v2] #appShell>header.topbar>#installerShell,[data-ui=v2] #appShell>.container{grid-column:2 / 4;grid-row:2 / 4;z-index:0;min-width:0;min-height:0;overflow:auto;overscroll-behavior:contain;padding:16px 22px 24px}[data-ui=v2] .statusbar{margin:0 0 8px;font-size:var(--fs-xs)}[data-ui=v2] .dash-rail{top:0}[data-ui=v2] .page-head{margin-bottom:12px;align-items:center}[data-ui=v2] .page-title{font-size:21px;font-weight:700}[data-ui=v2] .page-sub{margin-top:1px;font-size:var(--fs-sm)}[data-ui=v2] .section{padding:14px 16px;margin-bottom:12px;border-radius:14px;box-shadow:var(--sh-1)}[data-ui=v2] .section h2{font-size:15px;margin-bottom:8px}[data-ui=v2] .section>p{margin:0 0 10px}[data-ui=v2] .metric-grid{display:flex;flex-wrap:wrap;gap:0;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:4px 2px;margin-bottom:12px;box-shadow:var(--sh-1);overflow:hidden}[data-ui=v2] .metric{flex:1 1 0;min-width:150px;padding:9px 16px 10px;border:0;border-left:1px solid var(--divider);border-radius:0;background:transparent;box-shadow:none;transform:none}[data-ui=v2] .metric:first-child{border-left:0}[data-ui=v2] .metric:hover{transform:none;box-shadow:none;background:var(--surface-2)}[data-ui=v2] .metric-top{margin-bottom:2px}[data-ui=v2] .metric-value{font-size:22px;line-height:1.15}[data-ui=v2] .metric-sub{font-size:var(--fs-xs);margin-top:1px}[data-ui=v2] .metric-spark{width:64px;height:20px;bottom:10px;right:12px}[data-ui=v2] .inst-summary{display:flex;gap:0;margin-bottom:12px;background:var(--surface-2);border:1px solid var(--divider);border-radius:var(--r-md);padding:2px 0}[data-ui=v2] .inst-kpi{flex:1;border:0;border-left:1px solid var(--divider);border-radius:0;background:transparent;padding:6px 8px}[data-ui=v2] .inst-kpi:first-child{border-left:0}[data-ui=v2] .inst-kpi-num{font-size:18px;font-weight:700}[data-ui=v2] .subtabs{gap:4px;margin:0 0 12px}[data-ui=v2] .subtab{padding:8px 12px;font-size:var(--fs-base)}[data-ui=v2] .subtab.active{color:var(--text);font-weight:600;border-bottom-color:var(--ink)}[data-ui=v2] .filters,[data-ui=v2] .done-filterbar,[data-ui=v2] .filterbar{background:none;border:0;border-radius:0;padding:0;margin:0 0 10px;align-items:center;gap:8px}[data-ui=v2] .filterbar{padding-bottom:12px;border-bottom:1px solid var(--divider)}[data-ui=v2] .done-fields{display:flex;flex-wrap:wrap;gap:8px}[data-ui=v2] .filters>div,[data-ui=v2] .done-fields>div,[data-ui=v2] .filterbar .field{flex-direction:row;align-items:center;gap:6px;min-width:0}[data-ui=v2] .done-fields>div.is-wide{flex:1 1 260px}[data-ui=v2] .filters label,[data-ui=v2] .done-fields label,[data-ui=v2] .filterbar .field>label{white-space:nowrap;font-size:var(--fs-xs);font-weight:500}[data-ui=v2] .filters select,[data-ui=v2] .filters input[type=text],[data-ui=v2] .filters input[type=date],[data-ui=v2] .done-fields select,[data-ui=v2] .done-fields input,[data-ui=v2] .filterbar .field>select,[data-ui=v2] .filterbar .field>input{height:36px;width:auto;min-width:120px}[data-ui=v2] .done-toolbar{border-top:0;margin-top:6px;padding-top:0}[data-ui=v2] .dropdown-manager{margin-bottom:8px}[data-ui=v2] .table-wrap,[data-ui=v2] .tbl-wrap{max-height:calc(100dvh - 300px);border-radius:var(--r-md)}[data-ui=v2] table.detail-table th,[data-ui=v2] table.summary-table th,[data-ui=v2] .tbl thead th{font-size:var(--fs-xs);font-weight:600;color:var(--text-3);background:var(--surface-2)}[data-ui=v2] table.detail-table td,[data-ui=v2] table.summary-table td,[data-ui=v2] .tbl tbody td{padding-top:8px;padding-bottom:8px}[data-ui=v2] .panel{box-shadow:var(--sh-1)}[data-ui=v2] .panel-head{padding:12px 16px}[data-ui=v2] .panel-body{padding:14px 16px 16px}[data-ui=v2] .qa-bubble-btn{width:50px;height:50px;bottom:18px;right:18px}@media(max-width:1400px){[data-ui=v2]{--v2-sb: 200px;--v2-top: 52px}[data-ui=v2] #appShell>.container{padding:12px 18px 20px}[data-ui=v2] .metric-value{font-size:20px}[data-ui=v2] .global-search-wrap{max-width:360px}}@media(max-width:1000px){[data-ui=v2]{--v2-sb: 64px}[data-ui=v2] .header-brand h1,[data-ui=v2] .v2-navgrp{display:none}[data-ui=v2] .header-brand{justify-content:center;padding:0}[data-ui=v2] .module-switcher{flex-direction:column;margin:8px 8px 4px;border-radius:var(--r-sm)}[data-ui=v2] .module-btn{font-size:0;padding:8px 0;border-radius:var(--r-xs)}[data-ui=v2] .module-btn .ico{width:16px;height:16px}[data-ui=v2] nav.tabbar{padding:8px 8px 12px}[data-ui=v2] .tab-btn{font-size:0;justify-content:center;padding:10px 0}[data-ui=v2] .tab-btn .ico{width:18px;height:18px}}@media print{[data-ui=v2] #appShell{display:block!important;height:auto;overflow:visible}[data-ui=v2] #appShell:before,[data-ui=v2] #appShell:after{display:none}[data-ui=v2] #appShell>header.topbar{display:none}[data-ui=v2] #appShell>.container{overflow:visible;padding:0}[data-ui=v2] .table-wrap,[data-ui=v2] .tbl-wrap{max-height:none}}}@media(max-width:899px){[data-ui=v2] .v2-navgrp{display:none}}[data-motion=on].vt-on #appShell>.container{view-transition-name:otod-content}[data-motion=on].vt-on::view-transition-old(root),[data-motion=on].vt-on::view-transition-new(root){animation:none}[data-motion=on].vt-on::view-transition-old(otod-content){animation:motionFadeOut .12s var(--ease-in-out, ease) both}[data-motion=on].vt-on::view-transition-new(otod-content){animation:motionFadeUp .2s var(--ease-out, ease) both}[data-motion=on].vt-on .tab-content.active{animation:none}@keyframes motionFadeOut{to{opacity:0}}@keyframes motionFadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes motionFadeDown{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}@keyframes motionFadeIn{0%{opacity:0}to{opacity:1}}[data-motion=on] .is-updated,[data-motion=on] tr.is-updated>td{animation:motionRowFlash .9s var(--ease-out, ease) both}[data-motion=on] .is-new,[data-motion=on] tr.is-new>td{animation:motionFadeIn .22s var(--ease-out, ease) both}@keyframes motionRowFlash{0%{background-color:var(--brand-soft)}60%{background-color:var(--brand-soft)}to{background-color:transparent}}[data-theme=dark][data-motion=on] .is-updated,[data-theme=dark][data-motion=on] tr.is-updated>td{animation-name:motionRowFlashDark}@keyframes motionRowFlashDark{0%,60%{background-color:#16352e}to{background-color:transparent}}[data-motion=on][data-ui=v2] nav.tabbar{position:relative}[data-motion=on][data-ui=v2] .v2-nav-ind{position:absolute;left:12px;right:12px;top:0;height:0;border-radius:var(--r-sm);background:var(--ink);transform:translateY(0);opacity:0;transition:transform .22s var(--ease-out, ease),height .22s var(--ease-out, ease),opacity .12s;pointer-events:none;z-index:0}[data-motion=on][data-ui=v2] .v2-nav-ind.on{opacity:1}[data-motion=on][data-ui=v2] .tab-btn{position:relative;z-index:1;transition:background-color .12s var(--ease-out, ease),color .16s var(--ease-out, ease)}[data-motion=on][data-ui=v2] nav.tabbar.has-ind .tab-btn.active,[data-motion=on][data-ui=v2] nav.tabbar.has-ind .tab-btn.active:hover{background:transparent}[data-motion=on] .module-btn{transition:background-color .16s var(--ease-out, ease),color .16s,box-shadow .16s}[data-motion=on] .subtab{transition:color .14s,border-color .14s}[data-motion=on] .metric-value{font-variant-numeric:tabular-nums}[data-motion=on] .bar-fill,[data-motion=on] .rank-fill,[data-motion=on] .plan-progress-track>*,[data-motion=on] .stage-bar-fill{transition:width .6s var(--ease-out, ease)}@keyframes motionShimmer{0%{background-position:-200% 0}to{background-position:200% 0}}[data-motion=on] .metric-value:empty:before{content:"";display:block;width:56%;height:.9em;margin:.15em 0;border-radius:6px;background:linear-gradient(90deg,var(--surface-3) 25%,var(--surface-2) 50%,var(--surface-3) 75%);background-size:200% 100%;animation:motionShimmer 1.2s linear infinite}[data-motion=on] #iotCompletedList:empty:before,[data-motion=on] #iotPlanGroups:empty:before,[data-motion=on] #iotCallRows:empty:before,[data-motion=on] #installerJobGroups:empty:before,[data-motion=on] .rank-list:empty:before,[data-motion=on] .rail-list:empty:before{content:"";display:block;height:132px;border-radius:var(--r-md);background:linear-gradient(90deg,var(--surface-3) 25%,var(--surface-2) 50%,var(--surface-3) 75%) 0 0 / 200% 100%;-webkit-mask:linear-gradient(#000 0 0) 0 0 / 100% 36px no-repeat,linear-gradient(#000 0 0) 0 48px / 100% 36px no-repeat,linear-gradient(#000 0 0) 0 96px / 100% 36px no-repeat;mask:linear-gradient(#000 0 0) 0 0 / 100% 36px no-repeat,linear-gradient(#000 0 0) 0 48px / 100% 36px no-repeat,linear-gradient(#000 0 0) 0 96px / 100% 36px no-repeat;animation:motionShimmer 1.2s linear infinite}[data-motion=on] .um-overlay,[data-motion=on] .confirm-modal-overlay{animation:motionFadeIn .14s ease both}[data-motion=on] .toast{transition-timing-function:var(--ease-out, ease)}[data-motion=on] .chevron{transition:transform .2s var(--ease-out, ease)}[data-motion=on] .global-search-results{animation:motionFadeDown .14s var(--ease-out, ease) both}[data-motion=on] .btn,[data-motion=on] .theme-toggle-btn{transition:transform .12s var(--ease-out, ease),background-color .12s,border-color .12s,color .12s,box-shadow .12s}@media(prefers-reduced-motion:reduce){[data-motion=on] *{animation:none!important;transition:none!important}[data-motion=on] .v2-nav-ind{display:none}}
