:root{--bg: #f5f6f8;--panel: #ffffff;--border: #e2e5ea;--text: #1f2430;--muted: #6b7280;--accent: #2563eb;--free: #e8f5e9;--busy: #ffcdd2;--edge: #fff3c4;--closed: #d5d8de;--blocked: #d1c4e9}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px}a{color:var(--accent)}.topbar{display:flex;align-items:center;gap:1.5rem;background:var(--panel);border-bottom:1px solid var(--border);padding:0 1.25rem;height:56px}.topbar .brand{font-weight:700}.topbar nav{display:flex;gap:.25rem}.topbar nav button{background:none;border:none;padding:.5rem .9rem;border-radius:6px;cursor:pointer;color:var(--muted);font-size:14px}.topbar nav button.active{background:#eef2ff;color:var(--accent);font-weight:600}.topbar .spacer{flex:1}.topbar .user{color:var(--muted)}.topbar .logout{border:1px solid var(--border);background:var(--panel);border-radius:6px;padding:.4rem .7rem;cursor:pointer}.container{padding:1.25rem;max-width:1200px;margin:0 auto}.container.wide{max-width:100%}.panel{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:1rem 1.15rem;margin-bottom:1rem}h1{font-size:1.25rem;margin:.25rem 0 1rem}h2{font-size:1rem;margin:0 0 .6rem}.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1rem}.kpi{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:1rem}.kpi .val{font-size:1.8rem;font-weight:700}.kpi .lbl{color:var(--muted);margin-top:.25rem}table{border-collapse:collapse;width:100%}th,td{text-align:left;padding:.5rem .6rem;border-bottom:1px solid var(--border);white-space:nowrap}th{color:var(--muted);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.03em}.tbl-wrap{overflow-x:auto}table.reg th,table.reg td{padding:.35rem .45rem;font-size:13px}table.reg .badge{font-size:11px;padding:.1rem .4rem}.badge{display:inline-block;padding:.12rem .5rem;border-radius:999px;font-size:12px;font-weight:600}.st-PENDING{background:#fff3c4}.st-CONFIRMED{background:#cfe8ff}.st-CHECKED_IN{background:#c8e6c9}.st-COMPLETED{background:#e0e0e0}.st-CANCELLED,.st-EXPIRED,.st-UNPAID{background:#f0d0d0;color:#7a1f1f}.st-PARTIAL{background:#fff3c4}.st-PAID{background:#c8e6c9}.shah{border-collapse:collapse}.shah th,.shah td{border:1px solid var(--border);padding:0;text-align:center}.shah .unit-h{text-align:left;padding:.35rem .6rem;position:sticky;left:0;background:var(--panel);z-index:1;min-width:150px}.shah .date-h{font-size:11px;color:var(--muted);padding:.25rem .35rem;min-width:30px}.shah .date-h.we{color:#c0392b}.cell{width:30px;height:30px;cursor:default}.cell.FREE,.cell.EDGE{background:transparent}.cell.BUSY{background:var(--free);cursor:pointer}.cell.BUSY.OCC{background:var(--busy)}.cell.BLOCKED{background:var(--free);cursor:pointer}.cell.CLOSED{background:var(--closed)}.cell.TURNOVER{cursor:pointer;background:linear-gradient(to bottom right,var(--edge) 0 45%,#7a7a7a 45% 55%,var(--edge) 55% 100%)}.legend{display:flex;gap:1rem;margin-bottom:.75rem;flex-wrap:wrap;color:var(--muted)}.legend span{display:inline-flex;align-items:center;gap:.35rem}.legend i{width:14px;height:14px;border-radius:3px;border:1px solid var(--border);display:inline-block}.public-header{background:var(--panel);border-bottom:1px solid var(--border);padding:1rem 1.25rem;display:flex;align-items:center;gap:1rem}.public-header .brand{font-weight:700;font-size:1.1rem}.public-header .spacer{flex:1}.staff-link{color:var(--muted);text-decoration:none;border:1px solid var(--border);padding:.4rem .7rem;border-radius:6px;cursor:pointer;background:var(--panel)}.season{border-collapse:collapse}.season th,.season td{border:1px solid var(--border);padding:0;text-align:center}.season .unit-h{text-align:left;padding:.3rem .55rem;position:sticky;left:0;background:var(--panel);z-index:1;min-width:150px;font-size:13px}.season .month-h{font-size:12px;font-weight:600;padding:.2rem .3rem;background:#fafbfc;text-transform:capitalize}.season .day-h{font-size:9px;color:var(--muted);padding:0 1px;min-width:16px;line-height:1.1}.season .day-h.we{color:#c0392b}.season .unit-h{padding:0 .55rem;font-size:11px;line-height:1.1}.season td{line-height:1}.season .c{width:16px;height:11px}.season .c.FREE{background:transparent}.season .c.BOOKED{background:var(--free)}.season .c.OCCUPIED{background:var(--busy)}.season .c.CLOSED{background:var(--closed)}.season .c.TURNOVER{background:linear-gradient(to bottom right,var(--edge) 0 45%,#7a7a7a 45% 55%,var(--edge) 55% 100%)}.public{--brand: #663724;--fill: #e8dbbb;zoom:2;min-height:100vh;background:var(--fill);font-family:PT Sans,system-ui,-apple-system,Segoe UI,sans-serif;color:#3a3128}.public.embed{min-height:0;background:transparent;zoom:1}.public.embed .container{padding-top:.5rem}.public .public-header{background:var(--fill);border-bottom:1px solid rgba(102,55,36,.18);padding:1rem 1.25rem}.public .public-header .brand{color:var(--brand);font-weight:700;font-size:1.25rem}.public .public-header .muted{color:#8a7355}.public .staff-link{background:var(--brand);color:#fff;border:none;padding:.5rem .9rem;border-radius:8px;cursor:pointer;font-weight:600}.public .staff-link:hover{background:#55291b}.public .back-site{color:var(--brand);text-decoration:none;font-weight:600;border:1px solid rgba(102,55,36,.35);border-radius:8px;padding:.5rem .8rem;margin-right:.4rem;white-space:nowrap}.public .back-site:hover{background:#66372414}.public h1{color:var(--brand)}.public h1 .muted{color:#8a7355}.public .legend{color:#6b5a44}.public .panel{background:#fff;border:1px solid rgba(102,55,36,.15);border-radius:12px;box-shadow:0 2px 10px #6637240f}.public-contacts{background:var(--brand);color:#f3e9d7;margin-top:1.5rem;padding:1.75rem 0 1.25rem}.public-contacts .contacts-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1.5rem 2.5rem}.public-contacts h3{color:#fff;font-size:1.05rem;margin:0 0 .6rem}.public-contacts p{margin:.3rem 0;line-height:1.5}.public-contacts a{color:#fff;text-decoration:none;border-bottom:1px solid rgba(255,255,255,.4)}.public-contacts a:hover{border-bottom-color:#fff}.public-contacts .muted{color:#d8c4a8}.public-contacts .soc{display:flex;gap:1rem;margin-top:.6rem}.public-contacts .soc a{border:1px solid rgba(255,255,255,.5);border-radius:8px;padding:.3rem .8rem}.public-contacts .contacts-legal{margin-top:1.25rem;padding-top:1rem;border-top:1px solid rgba(255,255,255,.2);font-size:12px;color:#e5d6bd}.public-contacts .contacts-legal p{margin:.2rem 0}.login-wrap{min-height:100vh;display:grid;place-items:center}.login-card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:2rem;width:340px}.login-card h1{text-align:center}.login-card input{width:100%;padding:.6rem .7rem;border:1px solid var(--border);border-radius:8px;margin-bottom:.75rem;font-size:14px}.login-card button{width:100%;padding:.65rem;background:var(--accent);color:#fff;border:none;border-radius:8px;font-size:15px;cursor:pointer}.err{color:#c0392b;margin-bottom:.5rem}.muted{color:var(--muted)}.toolbar{display:flex;gap:.5rem;align-items:center;margin-bottom:.75rem;flex-wrap:wrap}.toolbar input,.toolbar select{padding:.4rem .5rem;border:1px solid var(--border);border-radius:7px}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem 1rem}.field{display:flex;flex-direction:column;gap:.25rem}.field label{font-size:12px;color:var(--muted)}.field input{padding:.5rem .6rem;border:1px solid var(--border);border-radius:8px;font-size:14px}.unit-picker{display:grid;grid-template-rows:repeat(2,auto);grid-auto-flow:column;gap:.4rem;justify-content:start}.unit-chip{border:1px solid var(--border);border-radius:8px;padding:.35rem .7rem;cursor:pointer;font-size:13px;-webkit-user-select:none;user-select:none;text-align:center;min-width:78px}.unit-chip.on{background:#eef2ff;border-color:var(--accent);color:var(--accent);font-weight:600}.quote-box{background:#f8fafc;border:1px solid var(--border);border-radius:10px;padding:.9rem 1rem}.quote-box .line{display:flex;justify-content:space-between;padding:.2rem 0}.quote-box .total{border-top:1px solid var(--border);margin-top:.35rem;padding-top:.45rem;font-weight:700;font-size:1.05rem}.btn-primary{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:.6rem 1.1rem;font-size:15px;cursor:pointer}.btn-primary:disabled{opacity:.5;cursor:default}.ok{color:#1e7a34}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:grid;place-items:center;z-index:50;padding:1rem}.modal{background:var(--panel);border-radius:12px;width:640px;max-width:100%;max-height:90vh;overflow-y:auto;padding:1.25rem 1.4rem}.modal h2{display:flex;align-items:center;gap:.6rem}.modal .close{margin-left:auto;border:none;background:none;font-size:1.3rem;cursor:pointer;color:var(--muted)}.kv{display:grid;grid-template-columns:140px 1fr;gap:.3rem .8rem;margin:.5rem 0}.kv .k{color:var(--muted)}.actions{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:1rem;border-top:1px solid var(--border);padding-top:1rem}.actions button{border:1px solid var(--border);background:var(--panel);border-radius:8px;padding:.5rem .9rem;cursor:pointer;font-size:14px}.actions .primary{background:var(--accent);color:#fff;border-color:var(--accent)}.actions .danger{color:#b3261e;border-color:#e6b4b0}.section-title{font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);margin:1rem 0 .4rem}
