@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Thai:wght@400;500;600;700&display=swap');
:root{--ink:#203840;--muted:#71828b;--green:#087f76;--line:#e3e9e9;--bg:#f3f6f5;--red:#cc5261;--amber:#a97720}*{box-sizing:border-box}body{margin:0;font:14px 'Noto Sans Thai',Tahoma,sans-serif;color:var(--ink);background:var(--bg)}button,input,select,textarea{font:inherit}button,a,select{touch-action:manipulation}button{cursor:pointer;border:1px solid var(--line);border-radius:8px;padding:10px 15px;background:white;color:var(--ink);font-weight:500}button:hover{border-color:var(--green);background:#eff8f5}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--green);color:white;border-color:var(--green)}button.danger{background:#fff2f3;color:#ae3242;border-color:#eab9c0}button.quiet{background:transparent;border:0;padding:6px 10px}a{color:var(--green)}:focus-visible{outline:3px solid #78b8e5;outline-offset:3px}aside{position:fixed;inset:0 auto 0 0;width:246px;background:#112d37;color:#c2d2d6;padding:32px 22px;display:flex;flex-direction:column}.brand{display:flex;gap:12px;align-items:center;text-decoration:none;color:white;font-size:22px;font-weight:700;line-height:1.2}.logo{background:#21a392;color:white;border-radius:13px;width:42px;height:45px;display:grid;place-items:center;font-size:32px}.brand-light{display:block;font-size:11px;letter-spacing:1px;font-weight:400;margin-top:6px;color:#91b9bb}.workspace{margin:38px 0 24px}.workspace small{display:block;color:#8ba7af;margin-bottom:9px}select,input,textarea{background:white;border:1px solid #d7e0e1;border-radius:7px;padding:10px 12px;color:var(--ink);max-width:100%}.workspace select{width:100%;background:#203c47;border-color:#36505a;color:white;font-size:12px}nav{display:grid;gap:6px}nav a{display:flex;align-items:center;gap:13px;text-decoration:none;color:#aec1c8;padding:12px 14px;border-radius:7px}nav a.active{background:#20514f;color:#ccfff3;box-shadow:inset 3px 0 #55ceae}nav a:hover{background:#24444e}nav b{font:20px sans-serif;width:20px;text-align:center}.aside-bottom{margin-top:auto;font-size:11px}.aside-bottom small{display:block;margin-top:19px;line-height:1.9;color:#79959f}.dot{display:inline-block;width:7px;height:7px;background:#3dbea3;border-radius:50%;margin-right:5px}.shell{margin-left:246px}header{height:91px;background:#fff;border-bottom:1px solid var(--line);padding:20px 36px;display:flex;justify-content:space-between;align-items:center}.eyebrow{font-size:10px;letter-spacing:2px;color:var(--muted);font-weight:600}#breadcrumb{margin-top:5px;font-size:13px}.header-right{display:flex;align-items:center;gap:18px}#clock{color:var(--muted);font-size:12px}.avatar{border-radius:50%;background:#e4f1ec;padding:10px;color:var(--green);font-weight:700;font-size:12px}.mode{padding:9px 36px;background:#fcf5df;color:#896823;font-size:12px;border-bottom:1px solid #efe4be}main{padding:30px 36px;min-height:calc(100vh - 190px);max-width:1700px;margin:auto}.page-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:27px}h1{font-size:27px;letter-spacing:-.7px;margin:5px 0}h2{font-size:16px;margin:0 0 5px}h3{font-size:14px;margin:0}p{line-height:1.8}.sub{color:var(--muted);font-size:12px;margin:4px 0}.actions{display:flex;gap:9px;align-items:center;flex-wrap:wrap}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:22px}.stat{background:white;border:1px solid var(--line);border-radius:12px;padding:19px;position:relative;overflow:hidden}.stat .stat-icon{float:right;background:var(--tint);color:var(--tone);width:36px;height:36px;border-radius:10px;display:grid;place-items:center;font-size:19px}.stat strong{font-size:35px;font-weight:600;display:block;line-height:1.4;margin:8px 0}.stat small{font-size:11px;color:var(--muted)}.stat label{font-size:12px}.stat:after{content:'';position:absolute;bottom:0;left:0;right:0;height:3px;background:var(--tone);opacity:.6}.grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(280px,1fr);gap:22px;margin-bottom:22px}.panel{background:white;border:1px solid var(--line);border-radius:12px;overflow:hidden}.panel-head{padding:20px 22px;display:flex;align-items:center;justify-content:space-between;gap:12px}.panel-body{padding:0 22px 22px}.badge{display:inline-block;font-size:11px;font-weight:500;padding:4px 9px;border-radius:5px;background:#eef3f4;color:#667a83;white-space:nowrap}.badge.red{background:#fff0f0;color:#bd4957}.badge.green{background:#e8f5ef;color:#168367}.badge.amber{background:#fff5db;color:#9c741d}.badge.blue{background:#eaf2fe;color:#4673af}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;text-align:left;font-size:12px}th{background:#f7f9f9;font-size:11px;color:#71828b;font-weight:500;white-space:nowrap}td,th{padding:14px 20px;border-bottom:1px solid #edf0f0}td strong{font-weight:600}td small{display:block;color:var(--muted);font-size:10px;margin-top:4px}tr:last-child td{border-bottom:0}tbody tr:hover{background:#fafcfb}.link-button{color:var(--green);border:0;background:none;padding:4px;white-space:nowrap}.module-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:13px}.module{padding:16px;border:1px solid var(--line);border-radius:8px}.module-top{display:flex;gap:10px;align-items:center;margin-bottom:12px}.module-icon{width:35px;height:35px;border-radius:9px;background:var(--tint);color:var(--tone);display:grid;place-items:center;font-size:20px}.module small{color:var(--muted);font-size:11px;display:block}.module-bottom{display:flex;align-items:center;justify-content:space-between;margin-top:13px}.map{height:220px;background:#eef3ec;position:relative;overflow:hidden;border-radius:8px}.map svg{width:100%;height:100%}.map-label{position:absolute;bottom:10px;left:10px;background:#ffffffed;padding:5px 8px;border-radius:4px;font-size:10px;color:#6e817b}.map-pin{position:absolute;background:#188878;color:white;border:3px solid white;box-shadow:0 2px 5px #24544940;border-radius:50%;width:31px;height:31px;padding:0;font-size:10px}.mini-row{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--line);font-size:12px;gap:12px}.mini-row:last-child{border:0}.chart{height:125px;width:100%;display:block}.chart-labels{display:flex;justify-content:space-between;color:var(--muted);font-size:10px}.empty{padding:35px;text-align:center;color:var(--muted);font-size:13px}.toolbar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:18px}.toolbar input{flex:1;min-width:180px}.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.device{padding:22px}.device h2{margin:15px 0 5px}.device dl{display:grid;grid-template-columns:95px 1fr;font-size:12px;gap:10px;margin:20px 0}dt{color:var(--muted)}dd{margin:0;overflow-wrap:anywhere}.device .actions{border-top:1px solid var(--line);padding-top:16px}.big-icon{font-size:25px;background:#e9f4f1;border-radius:12px;width:49px;height:49px;display:grid;place-items:center;color:var(--green)}.info{background:#edf5f4;padding:16px;border-radius:8px;font-size:12px;line-height:1.9;margin:15px 0}.warning{background:#fff5df;color:#876b32}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px}label.field{display:grid;gap:6px;font-size:12px}label.field.wide{grid-column:1/-1}textarea{min-height:85px;resize:vertical}.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}dialog{border:0;border-radius:14px;max-width:640px;width:calc(100% - 30px);padding:25px;color:var(--ink);box-shadow:0 20px 90px #112d3750}dialog::backdrop{background:#1029328c;backdrop-filter:blur(3px)}.dialog-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.timeline{border-left:2px solid #cfe1dc;margin:17px 0;padding-left:18px}.timeline div{margin:12px 0;font-size:12px}.timeline small{display:block;color:var(--muted)}#toast{position:fixed;right:24px;bottom:24px;max-width:400px;background:#173d40;color:white;padding:14px 22px;border-radius:9px;box-shadow:0 6px 30px #173d4030;display:none;z-index:10}footer{display:flex;justify-content:space-between;padding:18px 36px;font-size:10px;color:#8a9a9e;border-top:1px solid var(--line)}.progress{height:7px;background:#edf1f0;border-radius:5px;margin:10px 0;overflow:hidden}.progress div{height:100%;background:#2c9c88}.metric{font-size:32px;color:var(--green)}.camera-placeholder{height:140px;background:#203a43;color:#a5bec6;border-radius:7px;display:grid;place-items:center;text-align:center;font-size:12px;line-height:2}.sos{background:#c84657;color:white;border-color:#c84657}.error{color:#ba3e50;font-size:12px}code,pre{font:12px Consolas,monospace}pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#eff3f3;padding:15px;border-radius:8px}.switch{accent-color:var(--green)}@media(min-width:1600px){main{padding-top:40px}}@media(max-width:1150px){aside{width:215px;padding:28px 16px}.shell{margin-left:215px}main{padding:25px 22px}.cards{grid-template-columns:repeat(2,1fr)}.grid{grid-template-columns:1fr}.header-right #clock{display:none}.stat{padding:15px}}@media(max-width:760px){aside{position:static;width:100%;padding:16px}.brand{font-size:18px}.workspace{margin:15px 0}.aside-bottom{display:none}nav{display:flex;overflow:auto;gap:3px}nav a{white-space:nowrap;padding:10px;font-size:12px}nav b{display:none}.shell{margin:0}header{height:74px;padding:15px 20px}.header-right{gap:5px}.header-right button{font-size:11px}.avatar{display:none}.mode{padding:10px 20px}main{padding:22px 16px}h1{font-size:22px}.page-heading{align-items:flex-start;flex-direction:column;gap:10px}.stats{grid-template-columns:repeat(2,1fr);gap:10px}.stat strong{font-size:29px}.stat label{font-size:11px}.cards{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr}.field{grid-column:1/-1}footer span{display:none}.module-grid{gap:8px}.module{padding:12px}.module h3{font-size:12px}.panel-head{padding:17px}.panel-body{padding:0 17px 17px}}@media print{aside,header,.mode,.actions,footer,.toolbar{display:none}.shell{margin:0}.panel{break-inside:avoid}main{padding:10px}.stats{grid-template-columns:repeat(4,1fr)}}

/* Authentication gate is active before JavaScript loads. */
body.auth-locked>aside,body.auth-locked>.shell{display:none!important}
.login-screen{display:none;min-height:100vh;padding:36px 18px;background:linear-gradient(140deg,#102e38,#237b70);align-items:center;justify-content:center}
.auth-locked .login-screen{display:flex}
.login-card{background:#fff;border-radius:22px;padding:32px;width:100%;max-width:480px;box-shadow:0 20px 70px #0003}
.login-brand{font-weight:700;color:#176b60;font-size:20px;margin-bottom:24px}
.login-tabs{display:flex;gap:8px;border-bottom:1px solid #dce6e3;margin-bottom:24px}
.login-tabs a{flex:1;text-align:center;padding:13px 8px;color:#49615c;text-decoration:none}
.login-tabs a[aria-current]{color:#147868;border-bottom:3px solid #147868;font-weight:700}
.login-card h1{font-size:26px}.login-card .field{margin-top:18px}.login-card form>button{width:100%;margin:8px 0 18px}
@media(max-width:520px){.login-card{padding:24px 20px}.login-brand{font-size:18px}}
