:root{--navy:#123b4a;--teal:#0d6970;--teal2:#14a89a;--blue:#2878d8;--orange:#f08a3c;--red:#d83945;--green:#2b9a66;--yellow:#e5ad32;--ink:#17313a;--muted:#6d7e84;--surface:#fff;--bg:#f2f6f6;--line:#dfe8e8;--shadow:0 16px 40px rgba(18,59,74,.11);--radius:22px;font-family:"Leelawadee UI","Noto Sans Thai",Tahoma,sans-serif;color-scheme:light}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-size:16px}button,input,textarea{font:inherit}button{cursor:pointer}.topbar{height:76px;background:var(--surface);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 28px;position:sticky;top:0;z-index:30}.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--ink)}.brand-mark{width:44px;height:44px;border-radius:14px;display:grid;place-items:center;background:linear-gradient(135deg,var(--teal),var(--teal2));color:#fff;font-weight:800;font-size:22px;box-shadow:0 8px 20px rgba(13,105,112,.24)}.brand strong{display:block;font-size:18px}.brand small{display:block;color:var(--muted);font-size:11px}.top-actions,.role-switch{display:flex;align-items:center;gap:8px}.icon-button{border:1px solid var(--line);background:var(--surface);border-radius:12px;height:40px;min-width:40px;color:var(--ink);font-weight:700}.role-switch{background:var(--bg);padding:4px;border-radius:14px}.role-switch button{border:0;padding:8px 15px;border-radius:10px;background:transparent;color:var(--muted);font-weight:700}.role-switch button.active{background:var(--surface);color:var(--teal);box-shadow:0 3px 10px rgba(0,0,0,.07)}.view{display:none}.view.active{display:block}.resident-view{padding-bottom:88px}.resident-shell{width:min(740px,100%);margin:auto;padding:24px}.welcome-card{display:flex;align-items:center;justify-content:space-between;background:linear-gradient(135deg,var(--navy),var(--teal));border-radius:var(--radius);padding:24px;color:#fff;box-shadow:var(--shadow)}.welcome-card h1{font-size:30px;margin:4px 0}.welcome-card p{margin:0;opacity:.78}.eyebrow{text-transform:uppercase;letter-spacing:.11em;font-size:11px;font-weight:800;color:var(--teal2)}.welcome-card .eyebrow{color:#9de5dc}.avatar{width:64px;height:64px;border:3px solid rgba(255,255,255,.7);border-radius:50%;background:rgba(255,255,255,.14);color:#fff;font-size:20px;font-weight:800}.sos-button{width:100%;display:flex;align-items:center;gap:16px;text-align:left;border:0;border-radius:var(--radius);margin:18px 0 26px;padding:18px;background:linear-gradient(110deg,#b92132,var(--red));color:#fff;box-shadow:0 14px 34px rgba(216,57,69,.25)}.sos-icon{display:grid;place-items:center;width:60px;height:60px;border-radius:50%;background:white;color:var(--red);font-weight:900;font-size:18px;box-shadow:0 0 0 7px rgba(255,255,255,.15)}.sos-button strong,.sos-button small{display:block}.sos-button strong{font-size:19px}.sos-button small{opacity:.85;margin-top:4px}.chevron{font-size:32px;margin-left:auto}.section-block{margin:26px 0}.section-title{display:flex;justify-content:space-between;align-items:end;margin-bottom:14px}.section-title h2,.panel-head h1,.map-toolbar h2,.dialog h2{margin:3px 0 0;font-size:22px}.text-button{border:0;background:transparent;color:var(--teal);font-weight:700}.quick-grid,.service-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.quick-card,.service-card{border:1px solid var(--line);background:var(--surface);border-radius:18px;padding:16px 10px;text-align:center;color:var(--ink);min-height:138px;transition:.2s}.quick-card:hover,.service-card:hover{transform:translateY(-3px);box-shadow:var(--shadow);border-color:#b9d7d7}.quick-card strong,.quick-card small,.service-card strong,.service-card small{display:block}.quick-card small,.service-card small{font-size:12px;color:var(--muted);margin-top:4px}.quick-icon,.service-icon{width:48px;height:48px;border-radius:15px;display:grid;place-items:center;margin:0 auto 10px;font-size:23px}.blue{background:#e7f2ff;color:var(--blue)}.red{background:#ffe9ea;color:var(--red)}.orange{background:#fff0e4;color:var(--orange)}.teal{background:#e4f7f4;color:var(--teal)}.job-list{display:grid;gap:10px}.job-card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:14px;display:flex;gap:12px;align-items:center}.job-card .job-icon{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;background:#edf5f5;font-size:20px}.job-card .job-copy{flex:1}.job-card strong,.job-card small{display:block}.job-card small{color:var(--muted);margin-top:3px}.pill{display:inline-flex;align-items:center;border-radius:999px;padding:5px 9px;font-size:11px;font-weight:800;white-space:nowrap}.pill.urgent{background:#ffe6e8;color:#b82130}.pill.accepted{background:#fff2dc;color:#a76118}.pill.progress{background:#fff0d0;color:#9a6710}.pill.complete{background:#ddf5e9;color:#167344}.pill.info{background:#dff2ff;color:#1765a0}.announcement-card{display:flex;gap:14px;padding:18px;background:#eaf7ff;border:1px solid #cce9fa;border-radius:20px}.announcement-icon{width:42px;height:42px;border-radius:13px;background:var(--blue);color:#fff;display:grid;place-items:center;font-weight:800;font-family:serif}.announcement-card h3{margin:8px 0 2px}.announcement-card p{margin:0;color:#557078;font-size:14px}.bottom-nav{display:none}.admin-view.active{display:grid;grid-template-columns:minmax(350px,31%) 1fr;height:calc(100vh - 76px);overflow:hidden}.alert-panel{background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;min-width:0}.panel-head,.map-toolbar{padding:22px 24px;display:flex;align-items:center;justify-content:space-between}.live-badge{font-size:11px;font-weight:900;color:var(--red);background:#ffe9ea;padding:7px 10px;border-radius:99px}.live-badge i{display:inline-block;width:7px;height:7px;background:var(--red);border-radius:50%;margin-right:5px;animation:pulse 1.2s infinite}.summary-row{display:grid;grid-template-columns:repeat(3,1fr);margin:0 24px 16px;background:var(--bg);border-radius:15px;padding:12px}.summary-row div{text-align:center;border-right:1px solid var(--line)}.summary-row div:last-child{border:0}.summary-row strong,.summary-row span{display:block}.summary-row strong{font-size:22px}.summary-row span{font-size:11px;color:var(--muted)}.filter-row{display:flex;gap:7px;padding:0 24px 14px;overflow:auto}.filter-row button{border:1px solid var(--line);background:var(--surface);border-radius:99px;padding:7px 12px;color:var(--muted);white-space:nowrap;font-size:12px}.filter-row button.active{background:var(--navy);color:white;border-color:var(--navy)}.alert-list{overflow:auto;padding:0 16px 24px;display:grid;gap:10px}.alert-card{border:1px solid var(--line);border-left:4px solid var(--orange);background:var(--surface);border-radius:15px;padding:14px;transition:.2s}.alert-card.selected{box-shadow:0 0 0 2px var(--teal);border-color:var(--teal)}.alert-card[data-priority="urgent"]{border-left-color:var(--red)}.alert-meta,.alert-title-row,.alert-actions{display:flex;align-items:center;justify-content:space-between;gap:8px}.alert-meta{font-size:11px;color:var(--muted)}.alert-title-row{margin:8px 0 5px}.alert-title-row h3{font-size:15px;margin:0}.alert-card p{font-size:13px;color:var(--muted);margin:0 0 10px}.alert-actions button{flex:1;border:1px solid var(--line);background:var(--surface);border-radius:9px;padding:7px;font-size:11px;font-weight:700;color:var(--teal)}.alert-actions button.primary{background:var(--teal);border-color:var(--teal);color:#fff}.map-panel{display:flex;flex-direction:column;min-width:0;background:#eaf0f0}.map-toolbar{background:var(--surface);border-bottom:1px solid var(--line)}.map-legend{display:flex;gap:15px;font-size:12px;color:var(--muted)}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px}.dot.urgent{background:var(--red)}.dot.progress{background:var(--orange)}.dot.complete{background:var(--green)}.map-stage{position:relative;flex:1;overflow:hidden;display:flex;align-items:center;justify-content:center;background:#dfe8e8}.map-stage img{width:100%;height:100%;object-fit:contain;transition:transform .25s;transform-origin:center}.map-markers{position:absolute;inset:0;pointer-events:none;transition:transform .25s;transform-origin:center}.marker{position:absolute;transform:translate(-50%,-50%);pointer-events:auto}.marker-pin{width:30px;height:30px;border:4px solid white;border-radius:50% 50% 50% 0;transform:rotate(-45deg);background:var(--red);box-shadow:0 5px 15px rgba(0,0,0,.35);animation:markerPulse 1.25s infinite}.marker-pin span{display:grid;place-items:center;width:100%;height:100%;transform:rotate(45deg);color:white;font-size:10px;font-weight:900}.marker[data-status="progress"] .marker-pin{background:var(--orange);animation:none}.marker[data-status="complete"] .marker-pin{background:var(--green);animation:none}.marker-label{position:absolute;left:25px;top:-12px;background:var(--navy);color:white;border-radius:8px;padding:5px 8px;white-space:nowrap;font-size:11px;font-weight:700;box-shadow:0 5px 15px rgba(0,0,0,.2)}.map-controls{position:absolute;right:18px;bottom:18px;display:grid;background:var(--surface);border-radius:12px;overflow:hidden;box-shadow:var(--shadow)}.map-controls button{width:42px;height:40px;border:0;border-bottom:1px solid var(--line);background:var(--surface);font-weight:900;font-size:18px;color:var(--ink)}.map-controls button:last-child{border:0}.map-footer{background:var(--surface);border-top:1px solid var(--line);padding:10px 24px;display:flex;justify-content:space-between;color:var(--muted);font-size:12px}.map-footer strong{color:var(--ink)}.dialog{border:0;border-radius:24px;padding:0;width:min(540px,calc(100% - 28px));color:var(--ink);box-shadow:0 30px 80px rgba(0,0,0,.28);background:var(--surface)}.dialog::backdrop{background:rgba(9,36,43,.7);backdrop-filter:blur(4px)}.dialog form{padding:24px}.dialog-head{display:flex;justify-content:space-between;align-items:start}.close-button{border:0;background:var(--bg);width:38px;height:38px;border-radius:50%;font-size:25px;color:var(--ink)}.dialog>form>p{color:var(--muted)}.emergency-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:16px 0}.emergency-grid button{border:1px solid var(--line);border-radius:15px;background:var(--surface);padding:15px;text-align:left;color:var(--ink);font-weight:700}.emergency-grid button span{display:inline-grid;place-items:center;width:34px;height:34px;background:#ffe8ea;color:var(--red);border-radius:10px;margin-right:7px}.emergency-grid button.selected{border-color:var(--red);box-shadow:0 0 0 2px rgba(216,57,69,.2)}.field-label{font-size:13px;font-weight:700}.field-label textarea{width:100%;border:1px solid var(--line);background:var(--bg);border-radius:12px;padding:12px;margin-top:6px;resize:vertical;color:var(--ink)}.primary-button{width:100%;border:0;border-radius:13px;background:var(--red);color:white;padding:14px;margin-top:14px;font-weight:800}.toast{position:fixed;left:50%;bottom:30px;transform:translate(-50%,130px);z-index:80;background:var(--navy);color:#fff;padding:13px 18px;border-radius:13px;box-shadow:var(--shadow);transition:.3s;max-width:90%;text-align:center}.toast.show{transform:translate(-50%,0)}body.large-text{font-size:19px}body.dark{--ink:#e8f1f1;--muted:#9eafb4;--surface:#132c34;--bg:#0c2027;--line:#29434b;--navy:#0b4b58;color-scheme:dark}.dark .map-panel,.dark .map-stage{background:#18343c}.dark .map-stage img{filter:brightness(.8)}@keyframes pulse{50%{opacity:.25}}@keyframes markerPulse{0%{box-shadow:0 0 0 0 rgba(216,57,69,.55),0 5px 15px rgba(0,0,0,.35)}70%{box-shadow:0 0 0 20px rgba(216,57,69,0),0 5px 15px rgba(0,0,0,.35)}}
@media(max-width:900px){.admin-view.active{grid-template-columns:1fr;height:auto;overflow:visible}.alert-panel{height:auto}.alert-list{max-height:560px}.map-panel{min-height:70vh}.map-stage{min-height:520px}.map-legend{display:none}}
@media(max-width:620px){.topbar{height:68px;padding:0 14px}.brand small{display:none}.brand-mark{width:38px;height:38px}.top-actions>.icon-button{display:none}.role-switch button{padding:7px 10px}.resident-shell{padding:16px}.welcome-card{padding:20px}.welcome-card h1{font-size:26px}.quick-grid,.service-grid{grid-template-columns:repeat(2,1fr)}.quick-card{min-height:125px}.bottom-nav{position:fixed;z-index:25;bottom:0;left:0;right:0;height:72px;background:var(--surface);border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(5,1fr);padding-bottom:env(safe-area-inset-bottom)}.bottom-nav button{border:0;background:transparent;color:var(--muted);font-size:10px}.bottom-nav button span{display:block;font-size:21px;margin-bottom:3px}.bottom-nav button.active{color:var(--teal)}.admin-view.active{display:block}.panel-head,.map-toolbar{padding:18px}.summary-row{margin:0 18px 14px}.filter-row{padding-left:18px}.map-stage{min-height:430px}.map-footer{padding:10px 16px}.emergency-grid{grid-template-columns:1fr}}
.dialog-form{padding:24px}.admin-tools{display:flex;gap:8px}.admin-tools button,.admin-tools a{border:1px solid var(--line);background:var(--surface);color:var(--teal);padding:8px 11px;border-radius:10px;font-size:12px;font-weight:800;text-decoration:none}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:18px 0}.form-grid .full{grid-column:1/-1}.field-label{display:block;margin-top:12px}.field-label input,.field-label select,.field-label textarea{display:block;width:100%;border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:12px;padding:12px;margin-top:6px}.photo-placeholder{border:2px dashed var(--line);border-radius:14px;padding:20px;text-align:center;color:var(--muted)}.photo-placeholder span,.photo-placeholder strong,.photo-placeholder small{display:block}.photo-placeholder span{font-size:28px}.teal-button{background:var(--teal)}.service-summary{background:linear-gradient(135deg,var(--navy),var(--teal));color:#fff;border-radius:17px;padding:18px;margin:14px 0}.service-summary strong,.service-summary span{display:block}.service-summary strong{font-size:28px;margin:4px 0}.provider-list,.slot-grid{display:grid;gap:10px;margin:14px 0}.provider-card,.slot-card{border:1px solid var(--line);border-radius:14px;padding:13px;background:var(--surface)}.provider-card strong,.provider-card small{display:block}.provider-card small{color:var(--muted);margin-top:3px}.provider-card a{display:inline-block;color:var(--teal);font-weight:800;text-decoration:none;margin-top:8px}.slot-grid{grid-template-columns:repeat(3,1fr)}.slot-card{text-align:center;color:var(--ink)}.slot-card.selected{border-color:var(--teal);background:#e4f7f4;color:#07565d}.fee-row{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);padding:12px 0}.fee-row:last-child{border:0}.fee-row small{display:block;color:var(--muted)}.secondary-button{width:100%;border:1px solid var(--teal);background:var(--surface);color:var(--teal);padding:12px;border-radius:12px;font-weight:800;margin-top:8px}@media(max-width:900px){.admin-tools{order:3;width:100%;margin-top:10px}.map-toolbar{flex-wrap:wrap}}@media(max-width:620px){.form-grid{grid-template-columns:1fr}.form-grid .full{grid-column:auto}.slot-grid{grid-template-columns:repeat(2,1fr)}}
.demo-accounts{background:var(--bg);border:1px solid var(--line);border-radius:13px;padding:12px;margin-top:14px}.demo-accounts strong,.demo-accounts small{display:block}.demo-accounts small{color:var(--muted);margin-top:4px}
body.locked-role .role-switch{display:none}
.house-preview{display:flex;align-items:center;gap:12px;background:var(--bg);border:1px solid var(--line);border-radius:15px;padding:14px;margin-top:16px}.house-preview .preview-number{width:54px;height:54px;border-radius:15px;display:grid;place-items:center;background:var(--teal);color:#fff;font-size:18px;font-weight:900}.house-preview strong,.house-preview small{display:block}.house-preview small{color:var(--muted);margin-top:3px}
.member-manage-button{margin-top:12px;border:1px solid rgba(255,255,255,.55);border-radius:10px;padding:7px 11px;background:rgba(255,255,255,.14);color:#fff;font-weight:700}.login-gate{max-width:430px}.login-gate::backdrop{background:rgba(4,28,34,.92)}.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:22px}.login-brand strong,.login-brand small{display:block}.login-brand small{color:var(--muted);margin-top:3px}.login-gate input,.member-form input,.member-form select{width:100%;border:1px solid var(--line);background:var(--bg);border-radius:12px;padding:12px;margin:6px 0 14px;color:var(--ink)}.remember-row{display:flex;gap:9px;align-items:center;font-size:13px}.remember-row input{width:auto;margin:0}.login-help{font-size:12px;background:var(--bg);padding:10px;border-radius:10px}.form-error{min-height:20px;color:var(--red)!important;font-weight:700;font-size:13px}.member-list{display:grid;gap:9px;margin:15px 0}.member-item{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:14px;padding:12px}.member-item-copy{flex:1}.member-item strong,.member-item small{display:block}.member-item small{color:var(--muted);margin-top:3px}.member-actions{display:flex;gap:6px}.member-actions button{border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:6px 9px;color:var(--teal)}.member-actions .danger{color:var(--red)}.member-form.is-hidden{display:none}.permission-note{padding:10px 12px;border-radius:10px;background:#fff2dc;color:#875612;font-size:13px}.dialog-form{padding:24px}
/* Circular map alerts, centered on each house number. */
.marker-pin{width:38px;height:38px;border:4px solid #fff;border-radius:50%;display:grid;place-items:center;transform:none;background:var(--red);box-shadow:0 0 0 3px rgba(216,57,69,.28),0 5px 15px rgba(0,0,0,.35);animation:markerPulse 1.25s infinite}
.marker-pin span{display:grid;place-items:center;width:100%;height:100%;transform:none;color:#fff;font-size:11px;font-weight:900}
.marker[data-status="accepted"] .marker-pin{background:#d6a116;box-shadow:0 0 0 3px rgba(214,161,22,.28),0 5px 15px rgba(0,0,0,.3);animation:none}
.marker[data-status="progress"] .marker-pin{background:var(--orange);box-shadow:0 0 0 3px rgba(232,126,46,.28),0 5px 15px rgba(0,0,0,.3);animation:none}
.marker[data-status="complete"] .marker-pin{background:var(--green);box-shadow:0 0 0 3px rgba(43,154,102,.28),0 5px 15px rgba(0,0,0,.3);animation:none}
.marker-label{left:29px;top:-12px}
.map-test-popup{position:absolute;z-index:12;pointer-events:none;transform:translate(14px,-50%);min-width:150px;padding:10px 12px;border-radius:11px;background:rgba(9,36,43,.94);color:#fff;box-shadow:0 8px 24px rgba(0,0,0,.3);font-size:12px;line-height:1.45}.map-test-popup strong,.map-test-popup span{display:block}.map-test-popup strong{font-size:15px;color:#9de5dc}.map-controls button.active{background:var(--teal);color:#fff}.map-stage.testing-location{cursor:crosshair}.map-stage.testing-location::after{content:'เลื่อนเมาส์บนแผนที่เพื่อค้นหาบ้าน';position:absolute;left:16px;top:16px;z-index:10;background:rgba(255,255,255,.94);color:var(--navy);border:1px solid var(--line);border-radius:10px;padding:8px 11px;font-size:12px;font-weight:800;box-shadow:var(--shadow)}
/* Blink every status-colored alert circle on the Admin map. */
.marker .marker-pin{animation:mapAlertBlink 1s ease-in-out infinite!important}
.marker[data-status="new"] .marker-pin{background:var(--red)}
.marker[data-status="accepted"] .marker-pin{background:#d6a116}
.marker[data-status="progress"] .marker-pin{background:var(--orange)}
.marker[data-status="complete"] .marker-pin{background:var(--green)}
@keyframes mapAlertBlink{0%,100%{opacity:1;transform:scale(1);filter:brightness(1)}50%{opacity:.42;transform:scale(.82);filter:brightness(1.35)}}
.quick-grid{grid-template-columns:repeat(auto-fit,minmax(130px,1fr))}.sos-help-panel{background:linear-gradient(135deg,#a91727,var(--red));border-radius:24px;padding:20px;box-shadow:0 14px 34px rgba(216,57,69,.25)}.sos-help-panel .section-title{color:#fff}.sos-help-panel .eyebrow{color:#ffd7da}.sos-help-panel .quick-card{border-color:rgba(255,255,255,.72);box-shadow:0 6px 18px rgba(80,0,8,.18)}.job-card{flex-wrap:wrap}.job-cancel{border:1px solid #d8a0a5;background:#fff7f8;color:#b82130;border-radius:9px;padding:7px 10px;font-size:11px;font-weight:800}.dialog .field-label input{display:block;width:100%;border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:12px;padding:12px;margin-top:6px}
.map-stage{overflow:auto;display:block;scrollbar-gutter:stable;background:#dfe8e8}.map-canvas{position:relative;width:85%;height:85%;min-width:320px;min-height:320px;margin:auto;transition:width .2s,height .2s}.map-canvas #villageMap{display:block;width:100%;height:100%;object-fit:contain;transform:none!important}.map-canvas .map-markers{position:absolute;inset:0;transform:none!important}.map-controls{position:sticky;z-index:20;float:right;right:18px;bottom:18px;margin-top:-138px;margin-right:18px}.map-stage::-webkit-scrollbar{width:12px;height:12px}.map-stage::-webkit-scrollbar-thumb{background:#8ca8aa;border:3px solid #dfe8e8;border-radius:99px}.map-stage::-webkit-scrollbar-track{background:#dfe8e8}
.logout-button{border:0;border-radius:10px;padding:9px 13px;background:#d83945;color:#fff;font-weight:800}.logout-button.is-hidden{display:none}
.service-card.service-card-locked,.service-card.service-card-locked:hover{opacity:.38;filter:grayscale(1);cursor:not-allowed;transform:none;box-shadow:none;border-color:var(--line)}.service-card.service-card-locked .service-icon{background:#e2e5e5;color:#8b9698}
.member-manage-button.is-locked,.member-manage-button:disabled{opacity:.38;filter:grayscale(1);cursor:not-allowed;background:#9aa4a5;border-color:#c7cdce;color:#eef0f0}
.announcement-card{cursor:pointer;align-items:center}.announcement-copy{flex:1}.announcement-copy small{display:block;margin-top:8px;color:#39727b;font-weight:700}.acknowledge-button{border:0;border-radius:10px;padding:10px 13px;background:var(--blue);color:#fff;font-weight:800;white-space:nowrap}.acknowledge-button.is-read{background:var(--green)}.report-dialog{width:min(1050px,calc(100% - 28px));max-height:90vh}.report-dialog .dialog-form{overflow:auto;max-height:90vh}.dialog-head-actions{display:flex;align-items:center;gap:9px}.report-print-button{display:inline-flex;align-items:center;gap:7px;border:1px solid #b8d0d3;border-radius:11px;padding:10px 13px;background:#fff;color:var(--teal);font-weight:800;cursor:pointer}.report-print-button:hover{background:var(--light);border-color:var(--teal)}.report-controls{display:grid;grid-template-columns:220px 1fr;gap:12px}.report-summary{display:flex;justify-content:space-between;gap:12px;padding:14px;margin:18px 0 10px;border-radius:13px;background:linear-gradient(135deg,var(--navy),var(--teal));color:#fff}.report-summary strong,.report-summary span{display:block}.report-table-wrap{overflow:auto;border:1px solid var(--line);border-radius:13px}.report-table{width:100%;border-collapse:collapse;font-size:13px}.report-table th,.report-table td{text-align:left;padding:11px;border-bottom:1px solid var(--line);white-space:nowrap}.report-table th{background:var(--bg);color:var(--teal);position:sticky;top:0}.report-empty{text-align:center;padding:32px;border:1px dashed var(--line);border-radius:13px;color:var(--muted)}@media(max-width:620px){.announcement-card{align-items:flex-start;flex-wrap:wrap}.acknowledge-button{margin-left:56px}.report-controls{grid-template-columns:1fr}.report-summary{display:block}.report-summary span{margin-top:4px}.report-print-button{padding:9px}.report-print-button span+*{display:none}}
.announcement-card[hidden]{display:none!important}
.admin-announcement-shortcuts{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;padding:10px 12px;background:var(--surface);border-bottom:1px solid var(--line)}.admin-announcement-shortcuts button{min-width:0;min-height:52px;border:1px solid var(--line);border-radius:10px;padding:6px 4px;background:var(--bg);color:var(--ink);font-size:10px;font-weight:800;line-height:1.2;white-space:normal;overflow-wrap:anywhere}.admin-announcement-shortcuts button:hover{border-color:var(--teal);background:#e4f7f4;color:var(--teal)}.admin-announcement-shortcuts span{display:block;font-size:16px;margin-bottom:2px}@media(max-width:700px){.admin-announcement-shortcuts{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(max-width:430px){.admin-announcement-shortcuts{grid-template-columns:repeat(2,minmax(0,1fr))}}
.cctv-drawer{position:fixed;z-index:60;top:76px;right:0;width:min(760px,calc(100vw - 48px));height:calc(100vh - 76px);padding:20px;background:var(--surface);border-left:1px solid var(--line);box-shadow:-18px 0 50px rgba(7,35,43,.22);transform:translateX(100%);transition:transform .32s ease;overflow:visible}.cctv-drawer.is-open{transform:translateX(0)}.cctv-drawer-tab{position:absolute;left:-48px;top:110px;width:48px;min-height:116px;border:0;border-radius:14px 0 0 14px;padding:10px 6px;background:var(--navy);color:#fff;font-size:12px;font-weight:900;line-height:1.15;writing-mode:vertical-rl;transform:rotate(180deg);box-shadow:-6px 8px 20px rgba(7,35,43,.22)}.cctv-drawer-tab span{font-size:19px;margin-bottom:5px}.cctv-drawer-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.cctv-drawer-head h2{margin:3px 0 0}.cctv-live-badge{display:inline-flex;align-items:center;gap:6px;padding:7px 10px;border-radius:999px;background:#ffe7e9;color:var(--red);font-size:11px;font-weight:900}.cctv-live-badge i{width:7px;height:7px;border-radius:50%;background:var(--red);animation:pulse 1.2s infinite}.cctv-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;max-height:calc(100vh - 190px);overflow-y:auto;padding-right:4px}.cctv-feed{padding:8px;border:1px solid var(--line);border-radius:14px;background:var(--bg)}.cctv-screen{position:relative;display:grid;place-items:center;align-content:center;aspect-ratio:16/9;overflow:hidden;border-radius:9px;background:radial-gradient(circle at center,#173d47,#06191f);color:#fff;text-align:center}.cctv-screen::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent 0 3px,rgba(255,255,255,.025) 3px 4px);pointer-events:none}.cctv-screen span{position:absolute;left:9px;top:8px;color:#86e1d3;font-size:10px;font-weight:900}.cctv-screen strong,.cctv-screen small{display:block;position:relative;z-index:1}.cctv-screen strong{font-size:14px}.cctv-screen small{margin-top:4px;color:#8fa9ae;font-size:10px}.cctv-note{margin:14px 0 0;color:var(--muted);font-size:11px;text-align:center}@media(max-width:700px){.cctv-drawer{top:68px;height:calc(100vh - 68px);padding:14px}.cctv-grid{grid-template-columns:1fr;max-height:calc(100vh - 170px)}.cctv-drawer-tab{top:90px}.cctv-screen{aspect-ratio:16/8}}
@media print{body *{visibility:hidden!important}#reportDialog,#reportDialog *{visibility:visible!important}#reportDialog{display:block;position:absolute;inset:0;width:100%;max-width:none;max-height:none;margin:0;padding:0;border:0;box-shadow:none;background:#fff}#reportDialog::backdrop{display:none}.report-dialog .dialog-form{max-height:none;overflow:visible;padding:18px}.dialog-head-actions,.report-controls{display:none!important}.report-summary{print-color-adjust:exact;-webkit-print-color-adjust:exact}.report-table-wrap{overflow:visible}.report-table th{position:static}.report-table th,.report-table td{white-space:normal}}
.appointment-reminder-dialog{border-top:8px solid var(--orange)}.appointment-time{margin:18px 0;padding:14px;border-radius:13px;background:#fff2dc;color:#875612;font-weight:900;text-align:center}
.line-message-meta{display:flex;justify-content:space-between;gap:12px;margin-top:8px;color:var(--muted);font-size:12px}.line-message-meta span:last-child{text-align:right}.primary-button:disabled{opacity:.55;cursor:wait}
.header-brand-logo{display:block;width:220px;height:48px;object-fit:contain}.brand>span{padding-left:12px;border-left:1px solid var(--line)}.brand>span strong{font-size:12px}.brand>span small{font-size:10px}.login-brand{display:block;text-align:center}.login-brand::before{content:"";display:block;width:100%;height:86px;margin:0 auto 10px;background:#fff url("assets/moobaan-connect-logo.png") center/contain no-repeat;border-radius:12px}.login-brand>.brand-mark,.login-brand>div>strong{display:none}.login-brand>div>small{display:block;color:var(--muted)}.dark .header-brand-logo{border-radius:10px;background:#fff;padding:3px}@media(max-width:760px){.header-brand-logo{width:168px;height:42px}.brand>span{display:none}.topbar{padding-left:14px;padding-right:14px}}@media(max-width:430px){.header-brand-logo{width:142px}.logout-button{padding:8px 10px}.top-actions{gap:5px}}
