:root{--paper:#f2f7f4;--card:#fff;--ink:#1b2e24;--muted:#5e7365;--line:#e2e8e4;--ruler:#059669;--ruler-bg:#0596691a;--target:#e11d48;--target-bg:#e11d481a;--blue:#2563eb;--blue-bg:#2563eb1a;--warn-bg:#f59e0b26;--warn-ink:#92400e;--crit-bg:#e11d481a;--crit-ink:#9f1239;--glass-bg:#ffffffd9;--glass-border:#ffffff80}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background:var(--paper);color:var(--ink);font-family:Sarabun,sans-serif;line-height:1.5}button,select,input{font-family:inherit}.app{max-width:1180px;margin:0 auto;padding:22px 20px 60px}.navbar{background-color:var(--glass-bg);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line);z-index:100;position:sticky;top:0;box-shadow:0 4px 20px #0000000a}.navbar-inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;max-width:1180px;margin:0 auto;padding:16px 20px;display:flex}.navbar-inner h1{margin:0;font-size:21px;font-weight:700}.navbar-inner .updated{color:var(--muted);font-size:12.5px}.navbar-header{justify-content:space-between;align-items:center;width:auto;display:flex}.menuToggleBtn{border:1px solid var(--line);cursor:pointer;color:var(--ink);background:0 0;border-radius:8px;padding:4px 10px;font-size:20px;transition:all .2s;display:none}.menuToggleBtn:hover{background:var(--paper)}.controlsRow{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.pillRow{background:var(--card);border:1px solid var(--line);border-radius:999px;gap:6px;padding:4px;display:inline-flex}.pillRow button{color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:999px;padding:7px 14px;font-size:13.5px;font-weight:600}.pillRow button.active{background:var(--ink);color:#fff}select.buildingSelect{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:999px;padding:8px 14px;font-size:13.5px;font-weight:600}button.refreshBtn{border:1px solid var(--line);background:var(--card);color:var(--ink);cursor:pointer;border-radius:999px;padding:8px 14px;font-size:13.5px;font-weight:600}button.refreshBtn:disabled{opacity:.6;cursor:default}.sectionTitle{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:28px 0 10px;font-size:13px;font-weight:700}.kpiGrid{grid-template-columns:repeat(3,1fr);gap:12px;display:grid}.kpiGrid.cols-3{grid-template-columns:repeat(3,1fr)}.kpiGrid.cols-4{grid-template-columns:repeat(4,1fr)}.kpiGrid.cols-5{grid-template-columns:repeat(5,1fr)}.kpiCard{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px 16px 14px;transition:transform .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),border-color .3s;box-shadow:0 6px 16px #00000008}.kpiCard:hover{border-color:#0596694d;transform:translateY(-4px)scale(1.01);box-shadow:0 12px 24px #05966914}.kpiCard:first-child{background:linear-gradient(135deg, #f0f7ff, var(--card));border-color:#dbeafe}.kpiCard:nth-child(2){background:linear-gradient(135deg, #faf5ff, var(--card));border-color:#f3e8ff}.kpiCard:nth-child(3){background:linear-gradient(135deg, #f0fdf4, var(--card));border-color:#dcfce7}.kpiCard:nth-child(4){background:linear-gradient(135deg, #fffbeb, var(--card));border-color:#fef3c7}.kpiCard:nth-child(5){background:linear-gradient(135deg, #fff1f2, var(--card));border-color:#ffe4e6}.kpiCard:nth-child(6){background:linear-gradient(135deg, #f5f3ff, var(--card));border-color:#ede9fe}.kpiCard.highlight{background:linear-gradient(135deg, #ecfdf5 0%, var(--card) 100%);border-color:#6ee7b7;box-shadow:0 0 15px #0596690d}.kpiCard .label{color:var(--muted);margin-bottom:6px;font-size:12.5px}.kpiCard .value{font-size:24px;font-weight:700}.kpiCard .unit{color:var(--muted);margin-left:4px;font-size:12px;font-weight:400}.kpiSub{color:var(--muted);margin-top:2px;font-size:11px}.dashSection{margin-bottom:8px}.metricsRow{grid-template-columns:1fr 1fr;gap:14px;display:grid}.metricCard{background:var(--card);border:1px solid var(--line);border-left:4px solid #10b981;border-radius:14px;padding:18px 20px}.metricHeader{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}.metricName{color:var(--ink);font-size:18px;font-weight:800}.metricBadge{color:#fff;border-radius:999px;padding:3px 10px;font-size:11px;font-weight:700}.metricDesc{color:var(--muted);margin-bottom:8px;font-size:12px}.metricValue{font-size:32px;font-weight:800;line-height:1.1}.metricSub{color:var(--muted);margin-top:6px;font-size:11.5px}.metricSub.warn{color:#e67e22}.progressCard{margin-top:14px;padding:16px 20px!important}.progressLabel{justify-content:space-between;margin-bottom:8px;font-size:14px;font-weight:600;display:flex}.progressTrack{background:#f0f0f0;border-radius:14px;width:100%;height:28px;position:relative;overflow:hidden}.progressFill{border-radius:14px;height:100%;transition:width .5s}.progressText{justify-content:center;align-items:center;font-size:13px;font-weight:700;display:flex;position:absolute;inset:0}.progressScale{justify-content:space-between;margin-top:4px;font-size:11px;font-weight:500;display:flex}.toggleDataBtn{background:var(--blue);color:#fff;cursor:pointer;border:none;border-radius:8px;padding:5px 12px;font-size:12px;font-weight:600;transition:background .2s}.toggleDataBtn:hover{background:#2563eb}.chartsGrid{grid-template-columns:1.4fr 1fr;gap:14px;display:grid}.card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px 18px 8px;box-shadow:0 4px 12px #00000008}.card .cardTitle{margin-bottom:10px;font-size:14.5px;font-weight:700}.card .cardSub{color:var(--muted);margin:-6px 0 12px;font-size:12.5px}.toggleRow{flex-wrap:wrap;gap:14px;margin-bottom:10px;display:flex}.toggleRow label{color:var(--muted);cursor:pointer;align-items:center;gap:5px;font-size:12.5px;display:inline-flex}.toggleRow input[type=checkbox]{accent-color:var(--ink);cursor:pointer}.alertList{flex-direction:column;gap:8px;display:flex}.alertItem{border-radius:12px;align-items:flex-start;gap:10px;padding:11px 13px;font-size:13.5px;display:flex}.alertItem.warning{background:var(--warn-bg);color:var(--warn-ink)}.alertItem.critical{background:var(--crit-bg);color:var(--crit-ink)}.alertItem .badge{white-space:nowrap;background:#00000014;border-radius:999px;flex-shrink:0;padding:2px 8px;font-size:11px;font-weight:700}.alertItem .when{opacity:.75;margin-top:2px;font-size:11.5px}.emptyState{color:var(--muted);padding:14px 4px;font-size:13.5px}.tableWrap{overflow-x:auto}table.logsTable{border-collapse:collapse;width:100%;font-size:13.5px}table.logsTable th{text-align:left;color:var(--muted);border-bottom:1px solid var(--line);white-space:nowrap;padding:8px 10px;font-size:12px;font-weight:600}table.logsTable td{border-bottom:1px solid var(--line);white-space:nowrap;padding:9px 10px}table.logsTable tr:hover td{background:#00000005}.shapeTag{background:var(--ruler-bg);color:var(--ruler);border-radius:999px;padding:2px 8px;font-size:11.5px;font-weight:700}.linkBtn{color:var(--blue);cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;font-weight:600}.linkBtn.danger{color:var(--target)}.photoGrid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;display:grid}.photoThumb{cursor:pointer;aspect-ratio:1;border:1px solid var(--line);background:#e9e7df;border-radius:12px;position:relative;overflow:hidden}.photoThumb img{object-fit:cover;width:100%;height:100%;display:block}.photoThumb .vol{color:#fff;background:linear-gradient(#0000,#0000008c);padding:12px 8px 6px;font-size:11.5px;font-weight:700;position:absolute;bottom:0;left:0;right:0}.modalOverlay{z-index:50;background:#14181499;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modalCard{background:var(--card);border-radius:16px;width:100%;max-width:480px;max-height:90vh;overflow-y:auto}.modalCard img{border-radius:16px 16px 0 0;width:100%;display:block}.modalBody{padding:16px 18px 20px}.modalBody .rows{grid-template-columns:1fr auto;row-gap:6px;margin-top:8px;font-size:14px;display:grid}.modalBody .rows .label{color:var(--muted)}.modalBody .rows .value{text-align:right;font-weight:600}.modalClose{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:10px;width:100%;margin-top:14px;padding:9px 14px;font-size:13.5px;font-weight:600}.loadingText,.errorText{color:var(--muted);padding:8px 2px;font-size:13.5px}.errorText{color:var(--target)}@media (width<=1024px){.app{padding:16px 16px 40px}.navbar-inner{flex-direction:column;align-items:stretch}.navbar-header{width:100%}.menuToggleBtn{display:block}.controlsRow{border-top:1px solid var(--line);flex-direction:column;align-items:stretch;width:100%;margin-top:8px;padding-top:12px;display:none}.controlsRow.open{display:flex}select.viewSelect,select.buildingSelect,button.refreshBtn{width:100%;height:42px}.pillRow{justify-content:space-between;width:100%;display:flex}.pillRow button{flex:1;padding:8px 0}.kpiGrid,.kpiGrid.cols-3,.kpiGrid.cols-4,.kpiGrid.cols-5{grid-template-columns:repeat(3,1fr);gap:10px}.metricsRow{grid-template-columns:1fr 1fr;gap:12px}.metricValue{font-size:26px}}@media (width<=900px){.chartsGrid{grid-template-columns:1fr;gap:16px}.kpiGrid,.kpiGrid.cols-4{grid-template-columns:repeat(2,1fr)}}@media (width<=600px){.app{padding:12px 10px 30px}.navbar-inner{padding:12px 10px}.navbar-header h1{font-size:20px}.navbar-header .updated{font-size:11.5px}.kpiGrid,.kpiGrid.cols-4{grid-template-columns:repeat(2,1fr);gap:8px}.kpiGrid.cols-5 .kpiCard:last-child{grid-column:span 2}.card{border-radius:12px;padding:12px 12px 8px}.kpiCard{border-radius:10px;padding:12px 10px}.kpiCard .label{margin-bottom:4px;font-size:11.5px;line-height:1.2}.kpiCard .value{font-size:18px;line-height:1.2}.kpiCard .unit{font-size:10px}.sectionTitle{margin:22px 0 8px;font-size:12px}.toggleRow{gap:8px}.toggleRow label{background:var(--paper);border:1px solid var(--line);border-radius:6px;padding:4px 8px;font-size:11px}.chartFullscreenOverlay{padding:10px}.chartFullscreenCard{border-radius:12px;width:96vw;height:90vh;padding:12px}.chartFullscreenCard .toggleRow{flex-wrap:wrap;gap:6px;display:flex}.chartFullscreenCard .toggleRow label{padding:3px 6px;font-size:10.5px}table.logsTable.desktopView{display:none}.mobileLogsList{flex-direction:column;gap:10px;padding:2px 0;display:flex}.logMobileCard{background:var(--paper);border:1px solid var(--line);border-radius:12px;flex-direction:column;gap:8px;padding:12px;display:flex}.logMobileHeader{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding-bottom:6px;display:flex}.logMobileDate{color:var(--ink);font-size:13px;font-weight:700}.logMobileBody{flex-direction:column;gap:4px;font-size:12.5px;display:flex}.logMobileRow{justify-content:space-between;align-items:center;display:flex}.logMobileLabel{color:var(--muted)}.logMobileVal{color:var(--ink);font-weight:600}.logMobileVal.highlightVal{color:var(--ruler);font-size:13.5px;font-weight:700}.logMobileActions{border-top:1px solid var(--line);justify-content:space-between;align-items:center;margin-top:2px;padding-top:6px;display:flex}.logMobileActions button{background:var(--card);border:1px solid var(--line);border-radius:6px;padding:5px 10px;font-size:12px}.logMobileActions button.danger{background:var(--crit-bg);border-color:#f3c9c9}.logMobileActions .noPhoto{color:var(--muted);font-size:11.5px}.photoGrid{grid-template-columns:repeat(auto-fill,minmax(90px,1fr));gap:8px}.photoThumb{border-radius:8px}.photoThumb .vol{padding:6px 4px 4px;font-size:10px}.modalOverlay{padding:12px}.modalCard{max-width:95%}}select.viewSelect{border:2px solid var(--ruler);background:var(--ruler-bg);color:var(--ruler);cursor:pointer;border-radius:999px;outline:none;padding:8px 16px;font-size:13.5px;font-weight:700;transition:all .2s}select.viewSelect:hover{background:var(--card);border-color:var(--ruler)}.kpiCard.overall{background:linear-gradient(135deg, var(--card) 0%, #0596690d 100%);border:1px solid #05966933;transition:transform .2s,box-shadow .2s;box-shadow:0 4px 14px #0000000a}.kpiCard.overall:hover{transform:translateY(-2px);box-shadow:0 6px 18px #0596691a}.chartFullscreenOverlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1000;background:#000000a6;justify-content:center;align-items:center;width:100%;height:100%;padding:24px;animation:.2s ease-out chartFadeIn;display:flex;position:fixed;top:0;left:0}@keyframes chartFadeIn{0%{opacity:0}to{opacity:1}}.chartFullscreenCard{background:var(--card);border-radius:16px;flex-direction:column;width:90vw;max-width:1200px;height:85vh;padding:24px;display:flex;position:relative;box-shadow:0 10px 30px #0000004d}.chartHeader{justify-content:space-between;align-items:flex-start;margin-bottom:12px;display:flex}.chartExpandBtn{border:1px solid var(--line);background:var(--paper);cursor:pointer;color:var(--muted);border-radius:8px;align-items:center;gap:4px;padding:6px 12px;font-size:12.5px;font-weight:600;transition:all .2s;display:inline-flex}.chartExpandBtn:hover{background:var(--ruler-bg);color:var(--ruler);border-color:var(--ruler)}.chartFullscreenCloseBtn{border:1px solid var(--line);background:var(--paper);cursor:pointer;color:var(--ink);border-radius:8px;padding:6px 12px;font-size:12.5px;font-weight:600;transition:all .2s}.chartFullscreenCloseBtn:hover{background:var(--crit-bg);color:var(--crit-ink);border-color:var(--crit-ink)}.aiSection{margin-bottom:24px}.aiGrid{grid-template-columns:2fr 1fr 1fr;gap:16px;display:grid}.aiCard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px;box-shadow:0 4px 6px #00000005}.aiCard.recommendation{background:linear-gradient(135deg,#e74c3c0d,#0000);border-left:4px solid #e74c3c}.aiCard.prediction{text-align:center;border-left:4px solid #3498db}.aiCard.alertsPanel{border-left:4px solid #f39c12}.aiHeader{color:var(--text-main);align-items:center;gap:8px;margin-bottom:12px;font-size:1.1rem;font-weight:600;display:flex}.aiSubTitle{color:var(--text-muted);font-size:.9rem}.aiDate{color:var(--text-main);margin:8px 0;font-size:1.4rem;font-weight:700}.aiContent{color:var(--text-main);font-size:1.05rem;line-height:1.5}.alertList{color:#e67e22;flex-direction:column;gap:6px;margin:0;padding:0;font-size:.95rem;list-style:none;display:flex}.aiProgress{align-items:center;gap:10px;margin-top:10px;display:flex}.aiProgress .progressTrack{background:#eee;border-radius:10px;flex:1;height:10px;overflow:hidden}.aiProgress .progressBar{background:#3498db;height:100%}@media (width<=900px){.aiGrid{grid-template-columns:1fr}}
