:root{
  --bg:#F2EEE6;--glass:rgba(255,255,255,.62);--glass-strong:rgba(255,255,255,.78);--glass-line:rgba(255,255,255,.64);--border:rgba(121,108,92,.16);
  --text:#202522;--muted:#73776F;--pine:#315A4C;--pine-dark:#203E35;--pine-soft:#E4EEE9;--clay:#C87555;
  --success:#287A57;--warning:#A96C18;--danger:#B54A4A;--info:#477A91;--neutral:#68716C;
  --shadow:0 22px 70px rgba(71,58,44,.11),0 3px 14px rgba(71,58,44,.06);--r-xl:30px;--r-lg:24px;--r-md:18px;--r-sm:13px;
  --sans:Inter,-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI","Noto Sans Thai",sans-serif
}
*{box-sizing:border-box}html,body{min-height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:14px;-webkit-font-smoothing:antialiased;overflow-x:hidden}button,input,select{font:inherit}button{color:inherit}.ambient{position:fixed;z-index:-1;border-radius:50%;filter:blur(12px);opacity:.75;pointer-events:none}.ambient-a{width:62vw;height:62vw;left:-24vw;top:-28vw;background:radial-gradient(circle,#F6C580 0%,#EBA86F 30%,rgba(235,168,111,0) 70%)}.ambient-b{width:58vw;height:58vw;right:-24vw;bottom:-30vw;background:radial-gradient(circle,#D9E6D8 0%,#BCD2C5 32%,rgba(188,210,197,0) 72%)}
.glass-panel{background:var(--glass);border:1px solid var(--glass-line);backdrop-filter:blur(28px) saturate(1.18);-webkit-backdrop-filter:blur(28px) saturate(1.18);box-shadow:var(--shadow)}.glass-subtle{background:rgba(255,255,255,.4);border:1px solid rgba(255,255,255,.58);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.app-loader{position:fixed;inset:0;z-index:300;display:grid;place-items:center;background:rgba(242,238,230,.96);transition:opacity .35s ease,visibility .35s}.app-loader.hide{opacity:0;visibility:hidden;pointer-events:none}.loader-logo{position:relative;width:72px;height:72px}.loader-logo img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}.logo-bw{filter:grayscale(1) contrast(1.1);animation:bwpulse 1.35s ease-in-out infinite}.logo-color{animation:colorpulse 1.35s ease-in-out infinite}@keyframes bwpulse{0%,100%{opacity:.15;transform:translateY(3px)}50%{opacity:1;transform:none}}@keyframes colorpulse{0%,100%{opacity:1;transform:none}50%{opacity:.12;transform:translateY(-3px)}}
.offline{position:fixed;z-index:250;top:max(14px,env(safe-area-inset-top));left:50%;transform:translateX(-50%);display:none;max-width:calc(100% - 24px);padding:9px 13px;border-radius:999px;background:rgba(30,35,32,.9);color:white;font-size:11px;box-shadow:0 8px 30px rgba(0,0,0,.16);backdrop-filter:blur(16px)}.offline.show{display:block}
.login-wrap{min-height:100svh;display:grid;place-items:center;padding:28px 18px;position:relative}.login-card{width:min(430px,100%);border-radius:var(--r-xl);padding:28px}.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:28px}.login-brand img{width:42px;height:42px;object-fit:contain}.login-brand div{display:grid;gap:2px}.login-brand strong{font-size:16px;letter-spacing:-.01em}.login-brand span{font-size:11px;color:var(--muted)}.login-copy{margin-bottom:20px}.login-copy h1{margin:0 0 6px;font-size:26px;line-height:1.15;letter-spacing:-.035em;font-weight:720}.login-copy p{margin:0;color:var(--muted);font-size:13px}.stack{display:grid;gap:12px}.stack label{display:grid;gap:6px;font-size:11px;font-weight:650;color:var(--muted)}.stack input,.stack select,.field{width:100%;border:1px solid rgba(116,103,88,.16);background:rgba(255,255,255,.72);border-radius:14px;padding:12px 13px;outline:0;color:var(--text);transition:border-color .18s,box-shadow .18s,background .18s}.stack input:focus,.stack select:focus,.field:focus{border-color:rgba(49,90,76,.5);box-shadow:0 0 0 4px rgba(49,90,76,.09);background:#fff}.btn{border:0;border-radius:14px;padding:11px 14px;font-weight:700;font-size:12px;cursor:pointer;transition:transform .16s ease,background .16s ease,opacity .16s}.btn:active{transform:scale(.985)}.btn.primary{background:var(--pine);color:white}.btn.primary:hover{background:var(--pine-dark)}.btn.secondary{background:rgba(255,255,255,.68);border:1px solid rgba(110,96,80,.15)}.btn.danger{background:#F9E7E7;color:var(--danger)}.btn.wide{width:100%;min-height:44px}.btn:disabled{opacity:.42;cursor:not-allowed}.split{display:grid;grid-template-columns:1fr 1fr;gap:10px}.error{font-size:12px;color:var(--danger);min-height:4px}.bootstrap{margin-top:4px;border-radius:16px;padding:0 13px}.bootstrap summary{cursor:pointer;padding:12px 0;font-size:11px;color:var(--muted);font-weight:650}.bootstrap-body{padding:0 0 13px}.login-note{position:absolute;bottom:18px;font-size:10px;letter-spacing:.04em;color:rgba(53,58,54,.48)}
.shell{min-height:100svh;display:grid;grid-template-columns:220px minmax(0,1fr);gap:14px;padding:14px}.side{height:calc(100svh - 28px);position:sticky;top:14px;border-radius:28px;padding:16px 12px;display:flex;flex-direction:column;overflow:hidden}.brand{display:flex;align-items:center;gap:11px;padding:4px 8px 18px}.brand img{width:36px;height:36px;object-fit:contain}.brand-copy{display:grid;gap:1px}.brand-copy strong{font-size:14px}.brand-copy span{font-size:10px;color:var(--muted)}.property{margin:0 4px 14px;padding:12px;border-radius:17px;background:rgba(255,255,255,.46);border:1px solid rgba(255,255,255,.55)}.property strong{display:block;font-size:12px}.property span{font-size:10px;color:var(--muted)}.nav{display:grid;gap:4px}.nav-group{font-size:9px;letter-spacing:.12em;color:#979A92;padding:11px 10px 5px}.nav button{border:0;background:transparent;text-align:left;padding:10px 11px;border-radius:13px;color:#62675F;font-size:12px;font-weight:640;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:8px}.nav button:hover,.nav button.active{background:rgba(255,255,255,.67);color:var(--text);box-shadow:inset 0 0 0 1px rgba(255,255,255,.48)}.nav .count{min-width:20px;text-align:center;padding:2px 6px;border-radius:999px;background:var(--clay);color:#fff;font-size:9px}.side-footer{margin-top:auto;padding:10px 8px 2px;font-size:10px;color:var(--muted)}
.main{min-width:0;display:grid;grid-template-rows:auto 1fr;gap:12px}.top{height:68px;border-radius:24px;padding:0 18px;display:grid;grid-template-columns:minmax(220px,1fr) auto;align-items:center;gap:16px}.global-search{position:relative;max-width:700px}.global-search input{width:100%;height:40px;border:0;outline:0;border-radius:14px;background:rgba(255,255,255,.66);padding:0 42px 0 14px;color:var(--text);font-size:12px;box-shadow:inset 0 0 0 1px rgba(118,103,88,.09)}.global-search span{position:absolute;right:14px;top:50%;transform:translateY(-50%);font-size:11px;color:#92968E}.top-actions{display:flex;align-items:center;gap:9px}.icon-btn{width:38px;height:38px;border:0;border-radius:50%;background:rgba(255,255,255,.58);cursor:pointer;display:grid;place-items:center;position:relative}.icon-btn .dot{position:absolute;width:7px;height:7px;border-radius:50%;background:#EF5D4E;right:6px;top:5px}.profile-chip{display:flex;align-items:center;gap:9px;padding:5px 7px 5px 10px;border-radius:999px;background:rgba(255,255,255,.54)}.profile-chip .avatar{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--pine);color:white;font-size:10px;font-weight:800}.profile-text{display:grid}.profile-text strong{font-size:11px}.profile-text span{font-size:9px;color:var(--muted)}
.content{min-width:0;padding:6px 0 14px}.page{display:none}.page.active{display:block}.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:18px;margin:8px 4px 16px}.page-head h1{margin:0;font-size:24px;line-height:1.05;letter-spacing:-.035em;font-weight:730}.page-head p{margin:5px 0 0;color:var(--muted);font-size:11px}.date-chip{padding:8px 11px;border-radius:999px;background:rgba(255,255,255,.48);font-size:10px;color:var(--muted)}
.dashboard-grid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:14px}.dashboard-main{display:grid;gap:14px}.dashboard-rail{display:grid;gap:14px;align-content:start}.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.kpi{min-height:116px;padding:16px;border-radius:22px;background:rgba(255,255,255,.57);border:1px solid rgba(255,255,255,.6);backdrop-filter:blur(18px);box-shadow:0 10px 34px rgba(74,61,46,.06)}.kpi span{display:block;color:var(--muted);font-size:10px;margin-bottom:22px}.kpi b{font-size:26px;line-height:1;font-weight:720;letter-spacing:-.04em}.kpi small{display:block;margin-top:7px;font-size:9px;color:#8C9088}.panel{border-radius:25px;background:rgba(255,255,255,.59);border:1px solid rgba(255,255,255,.62);backdrop-filter:blur(22px) saturate(1.12);box-shadow:0 16px 46px rgba(74,61,46,.07);overflow:hidden}.panel-head{min-height:54px;padding:13px 16px;display:flex;justify-content:space-between;align-items:center;gap:12px;border-bottom:1px solid rgba(117,103,88,.09)}.panel-head h2{font-size:13px;margin:0;font-weight:700}.panel-sub{font-size:10px;color:var(--muted)}.attention-list,.agenda{padding:8px}.attention-item,.agenda-item{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:11px 9px;border-radius:14px}.attention-item:hover,.agenda-item:hover{background:rgba(255,255,255,.5)}.attention-icon{width:30px;height:30px;border-radius:10px;display:grid;place-items:center;background:#FFF1D9;color:var(--warning);font-size:11px;font-weight:800}.attention-copy strong,.agenda-item strong{display:block;font-size:11px}.attention-copy span,.agenda-item span{font-size:9px;color:var(--muted)}.attention-number{font-weight:750;font-size:12px}.agenda-time{font-variant-numeric:tabular-nums;color:var(--muted);font-size:10px;width:36px}.agenda-state{font-size:9px;padding:4px 7px;border-radius:999px;background:#EEF1EE;color:#666D67}.rail-card{padding:16px}.rail-card h3{font-size:12px;margin:0 0 12px}.rail-list{display:grid;gap:10px}.rail-row{display:flex;justify-content:space-between;gap:10px;padding-bottom:9px;border-bottom:1px solid rgba(117,103,88,.1);font-size:10px}.rail-row:last-child{border-bottom:0}.rail-row span{color:var(--muted)}.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.toolbar .field{width:min(330px,100%);padding:9px 11px;font-size:11px}.table-wrap{overflow:auto}.table{width:100%;border-collapse:collapse}.table th,.table td{padding:12px 14px;text-align:left;border-bottom:1px solid rgba(117,103,88,.09);font-size:11px;white-space:nowrap}.table th{font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:700;background:rgba(255,255,255,.26)}.table tr:last-child td{border-bottom:0}.badge{display:inline-flex;padding:4px 7px;border-radius:999px;font-size:9px;font-weight:750}.b-CONFIRMED,.b-READY,.b-PAID{background:#E8F4ED;color:var(--success)}.b-PAYMENT_REVIEW,.b-CLEANING,.b-INSPECTION{background:#FFF3DC;color:var(--warning)}.b-IN_HOUSE{background:#E9F2F6;color:var(--info)}.b-PENDING_PAYMENT,.b-HOLD,.b-DIRTY{background:#EFF1EF;color:var(--neutral)}.b-CANCELLED,.b-MAINTENANCE{background:#FBEAEA;color:var(--danger)}.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.task{padding:15px;border-radius:20px;background:rgba(255,255,255,.58);border:1px solid rgba(255,255,255,.62);backdrop-filter:blur(18px)}.task h3{font-size:12px;margin:0 0 5px}.task .actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}.task .actions button{padding:7px 9px;border-radius:10px;border:1px solid rgba(115,102,87,.14);background:rgba(255,255,255,.68);font-size:9px;cursor:pointer}.review{display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center;padding:14px 16px;border-bottom:1px solid rgba(117,103,88,.09)}.review:last-child{border-bottom:0}.review strong{font-size:11px}.review-meta{font-size:9px;color:var(--muted);margin-top:4px}.review-actions{display:flex;gap:6px}.empty{padding:34px;color:var(--muted);text-align:center;font-size:11px}
.calendar-board{display:grid;grid-template-columns:132px repeat(7,minmax(96px,1fr));min-width:860px;padding:8px}.calendar-board>*{min-height:46px;border-right:1px solid rgba(117,103,88,.08);border-bottom:1px solid rgba(117,103,88,.08);padding:8px}.calendar-board .cal-head{font-size:9px;color:var(--muted);text-align:center}.calendar-board .cal-room{font-size:10px;font-weight:700}.booking-pill{border-radius:10px;padding:7px;background:rgba(49,90,76,.12);color:var(--pine-dark);font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.staff-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:14px}.staff-list{display:grid;padding:8px}.staff-row{display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:11px;align-items:center;padding:10px;border-radius:15px}.staff-row:hover{background:rgba(255,255,255,.45)}.staff-avatar{width:40px;height:40px;border-radius:14px;display:grid;place-items:center;background:linear-gradient(145deg,#426C5E,#294C41);color:white;font-size:10px;font-weight:800}.staff-info strong{display:block;font-size:11px}.staff-info span{font-size:9px;color:var(--muted)}.role-pill{font-size:9px;padding:5px 7px;border-radius:999px;background:rgba(49,90,76,.1);color:var(--pine)}.create-staff{padding:17px}.create-staff h2{font-size:13px;margin:0 0 4px}.create-staff p{font-size:10px;color:var(--muted);margin:0 0 14px}.create-staff .stack{gap:10px}.success{font-size:11px;color:var(--success)}
.mobilebar{display:none}.quick-fab{display:none}
@media(max-width:1180px){.shell{grid-template-columns:82px minmax(0,1fr)}.side{padding-inline:9px}.brand-copy,.property,.nav-group,.nav button .nav-label,.side-footer{display:none}.brand{justify-content:center;padding-inline:0}.nav button{justify-content:center;padding:11px}.dashboard-grid{grid-template-columns:1fr}.dashboard-rail{grid-template-columns:1fr 1fr}.kpis{grid-template-columns:repeat(4,1fr)}.staff-grid{grid-template-columns:1fr}}
@media(max-width:820px){body{background:#F3EFE8}.ambient-a{width:120vw;height:120vw;left:-60vw;top:-50vw}.ambient-b{width:120vw;height:120vw;right:-65vw;bottom:-45vw}.shell{display:block;padding:0}.side{display:none}.main{display:block}.top{height:64px;border-radius:0;padding:calc(8px + env(safe-area-inset-top)) 12px 8px;grid-template-columns:1fr auto;position:sticky;top:0;z-index:80;background:rgba(247,244,237,.72);backdrop-filter:blur(24px);box-shadow:0 1px 0 rgba(80,67,53,.08)}.global-search input{height:38px}.profile-text{display:none}.profile-chip{padding:4px}.content{padding:12px 12px calc(92px + env(safe-area-inset-bottom))}.page-head{margin:3px 2px 14px;align-items:center}.page-head h1{font-size:22px}.date-chip{display:none}.dashboard-grid{display:block}.dashboard-main{gap:12px}.dashboard-rail{grid-template-columns:1fr;margin-top:12px}.kpis{grid-template-columns:repeat(2,1fr);gap:8px}.kpi{min-height:98px;padding:14px;border-radius:20px}.kpi span{margin-bottom:16px}.kpi b{font-size:24px}.panel{border-radius:21px}.panel-head{padding:12px 13px}.table,.table tbody,.table tr,.table td{display:block;width:100%}.table thead{display:none}.table tr{padding:11px 13px;border-bottom:1px solid rgba(117,103,88,.09)}.table td{border:0;padding:3px 0;white-space:normal}.table td[data-label]:before{content:attr(data-label) ": ";color:var(--muted);font-size:9px}.cards{grid-template-columns:1fr}.review{grid-template-columns:1fr}.review-actions{display:grid;grid-template-columns:repeat(3,1fr)}.review-actions .btn{padding:9px 7px}.mobilebar{display:grid;position:fixed;left:8px;right:8px;bottom:calc(8px + env(safe-area-inset-bottom));z-index:90;grid-template-columns:repeat(5,1fr);padding:6px;border-radius:22px;background:rgba(255,255,255,.72);border:1px solid rgba(255,255,255,.75);backdrop-filter:blur(24px) saturate(1.18);box-shadow:0 14px 38px rgba(69,58,45,.14)}.mobilebar button{border:0;background:transparent;border-radius:15px;padding:9px 3px;font-size:9px;color:var(--muted);font-weight:700}.mobilebar button.active{background:rgba(49,90,76,.11);color:var(--pine)}.mobilebar .plus{width:38px;height:38px;margin:auto;border-radius:50%;background:var(--pine);color:white;font-size:17px;padding:0}.staff-grid{display:block}.create-staff{margin-top:12px}.calendar-scroll{overflow:auto;border-radius:20px}.offline{top:72px}.login-card{padding:23px;border-radius:26px}.login-copy h1{font-size:24px}}
@media(max-width:520px){.global-search span{display:none}.top{grid-template-columns:minmax(0,1fr) auto}.top-actions .icon-btn{display:none}.page-head h1{font-size:20px}.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.kpi b{font-size:22px}.split{grid-template-columns:1fr}.review-actions{grid-template-columns:1fr 1fr}.review-actions .btn:first-child{grid-column:1/-1}.login-note{display:none}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}.logo-bw,.logo-color{animation:none}.logo-bw{opacity:0}.logo-color{opacity:1}}
/* v0.1.5 inventory board */
.inventory-toolbar{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:12px}.inv-legend{display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-size:10px;color:var(--muted)}.inv-legend span{display:flex;align-items:center;gap:6px}.inv-legend i{width:8px;height:8px;border-radius:50%}.dot-avail{background:#BFD3C8}.dot-booked{background:#6A8E7D}.dot-block{background:#C98A69}.inventory-panel{padding:0;overflow:hidden}.inventory-scroll{overflow:auto;overscroll-behavior:contain}.inventory-board{min-width:980px;display:grid;grid-template-columns:142px repeat(var(--days),minmax(72px,1fr));grid-auto-rows:54px}.inv-corner,.inv-date,.inv-room,.inv-cell{border-right:1px solid rgba(121,112,101,.12);border-bottom:1px solid rgba(121,112,101,.12)}.inv-corner,.inv-date{position:sticky;top:0;z-index:4;background:rgba(250,248,242,.95);backdrop-filter:blur(18px)}.inv-corner{left:0;z-index:6;display:flex;align-items:center;padding:0 14px;font-size:9px;letter-spacing:.11em;color:var(--muted)}.inv-date{display:grid;place-items:center;line-height:1.05}.inv-date b{font-size:12px}.inv-date span{font-size:8px;color:var(--muted)}.inv-room{position:sticky;left:0;z-index:3;background:#FBF9F4;border-left:0;border-top:0;text-align:left;padding:0 12px;display:flex;flex-direction:column;justify-content:center;gap:2px;cursor:default}.inv-room strong{font-size:11px}.inv-room span{font-size:8px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inv-cell{border-top:0;border-left:0;background:rgba(255,255,255,.48);display:grid;place-items:center;padding:4px;cursor:pointer;transition:background .18s,box-shadow .18s}.inv-cell:hover{box-shadow:inset 0 0 0 1px rgba(49,90,76,.24)}.inv-cell i{width:6px;height:6px;border-radius:50%;background:#BFD3C8}.inv-cell span{font-size:8px;line-height:1.15;text-align:center;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inv-cell.booked{background:rgba(49,90,76,.12);color:var(--pine-dark)}.inv-cell.blocked{background:rgba(200,117,85,.14);color:#8E523A}.drawer-backdrop{position:fixed;inset:0;z-index:140;background:rgba(30,34,31,.2);backdrop-filter:blur(6px);display:flex;justify-content:flex-end}.inventory-drawer{width:min(390px,100%);height:100%;background:rgba(250,248,242,.98);border-left:1px solid rgba(90,82,74,.12);padding:22px;box-shadow:-24px 0 70px rgba(32,37,34,.12);overflow:auto}.drawer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.drawer-head span{font-size:9px;letter-spacing:.1em;color:var(--muted)}.drawer-head h2{font-family:var(--display);font-size:26px;font-weight:400;margin:3px 0 0}.drawer-date{margin:22px 0 10px;font-size:11px;color:var(--muted)}.drawer-state{padding:14px;border-radius:16px;margin-bottom:16px;display:grid;gap:4px}.drawer-state b{font-size:12px}.drawer-state span{font-size:10px;color:var(--muted)}.drawer-state.available{background:#E8F0EB}.drawer-state.booked{background:#E3EAE6}.drawer-state.blocked{background:#F5E9E3}.inventory-drawer .stack{display:grid;gap:10px}.inventory-drawer label{display:grid;gap:6px;font-size:10px;font-weight:650}.inventory-drawer input,.inventory-drawer select{width:100%;border:1px solid rgba(121,112,101,.18);background:#fff;border-radius:12px;padding:11px 12px}.wide{width:100%}@media(max-width:760px){.inventory-toolbar{align-items:flex-start;flex-direction:column}.inventory-panel{margin-inline:-2px}.inventory-scroll{max-height:68vh}.inventory-board{min-width:760px;grid-template-columns:112px repeat(var(--days),64px)}.inventory-drawer{width:100%;height:auto;max-height:88vh;margin-top:auto;border-left:0;border-top-left-radius:24px;border-top-right-radius:24px;padding:18px}.drawer-backdrop{align-items:flex-end}}
