:root{--bg:#f7f3ed;--surface:#fff;--surface-strong:#fdfbf7;--ink:#061d36;--muted:#667085;--line:#ded5c9;--line-strong:#c8bba9;--primary:#06203b;--primary-dark:#04162a;--primary-soft:#ece6dd;--champagne:#d8cabe;--success:#1d8a5a;--success-soft:#dff3e8;--warning:#d1941c;--warning-soft:#fff1c9;--danger:#c4473d;--danger-soft:#f9dfdc;--shadow:0 18px 60px #21262c1f;--radius:8px;color:var(--ink);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}button,input,select,textarea{font:inherit}button{border:0}a{color:inherit}h1,h2,h3,p{margin:0}#root{min-height:100vh}.calendar{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.calendar-header{justify-content:space-between;align-items:center;gap:14px;margin-bottom:18px;display:flex}.calendar-header h2{color:var(--ink);text-align:center;font-size:clamp(1.35rem,3vw,1.8rem);line-height:1.1}.calendar-header button{width:42px;height:42px;color:var(--primary);background:var(--primary-soft);border-radius:var(--radius);cursor:pointer;border:1px solid #176b7424;place-items:center;font-size:1.8rem;line-height:1;display:inline-grid}.calendar-header button:hover{color:#fff;background:var(--primary)}.admin-controls{background:var(--surface-strong);border:1px solid var(--line);border-radius:var(--radius);justify-content:space-between;align-items:center;gap:14px;margin-bottom:16px;padding:14px;display:flex}.admin-cycle-help{color:var(--muted);gap:2px;font-size:.88rem;display:grid}.admin-cycle-help strong{color:var(--ink);font-size:.95rem}.preset-actions{flex-wrap:wrap;gap:8px;display:flex}.month-quick-set{align-items:center}.month-quick-set select{min-height:34px;color:var(--ink);border:1px solid var(--line);background:#fff;border-radius:6px;padding:7px 10px;font-size:.82rem;font-weight:800}.preset-actions button{min-height:34px;color:var(--primary);border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:6px;padding:7px 10px;font-size:.82rem;font-weight:800}.preset-actions button:hover{background:var(--primary-soft)}.admin-save-message{color:var(--primary);background:var(--primary-soft);border-radius:var(--radius);border:1px solid #06203b24;margin-bottom:14px;padding:10px 12px;font-size:.9rem;font-weight:800}.calendar-import-summary{background:var(--surface-strong);border:1px solid var(--line);border-radius:var(--radius);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:14px;padding:10px 12px;display:flex}.calendar-import-summary>span:first-child{color:var(--muted);font-size:.82rem;font-weight:850}.calendar-import-pill{border:1px solid var(--line);border-radius:999px;padding:5px 8px;font-size:.78rem;font-weight:850}.calendar-import-pill.source-harbor{color:#064b60;background:#dff3f7;border-color:#7ec8d6}.calendar-import-pill.source-info{color:#775007;background:#fff1c9;border-color:#e2b54d}.calendar-import-pill.source-tom{color:#4c2f87;background:#eee8ff;border-color:#b8a6e8}.calendar-import-pill.source-other{color:var(--primary);border-color:var(--line-strong);background:#ece6dd}.calendar-grid{grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;display:grid}.day-header{color:var(--muted);text-align:center;letter-spacing:.04em;text-transform:uppercase;padding:4px 0 8px;font-size:.78rem;font-weight:850}.day-cell{min-height:88px;color:var(--ink);background:var(--surface-strong);border:1px solid var(--line);border-radius:var(--radius);text-align:left;align-content:space-between;justify-items:start;padding:10px;transition:border-color .16s,box-shadow .16s,transform .16s;display:grid;position:relative}.admin-calendar .day-cell{align-content:start;gap:6px;min-height:132px;padding:10px 8px}.admin-calendar .day-cell.selected{min-height:172px}.day-cell.empty{background:0 0;border-color:#0000}.day-cell.clickable{cursor:pointer}.day-cell.clickable:hover{border-color:var(--primary);transform:translateY(-2px);box-shadow:0 10px 22px #21262c1a}.day-cell:disabled{cursor:not-allowed;opacity:.74}.day-cell.past{color:#8b8790;opacity:.7;background:#efebe4;border-color:#ddd5c9}.day-cell.past .day-status{color:#8b8790}.day-cell.selected{border-color:var(--primary);box-shadow:0 0 0 3px #176b742e}.day-cell.today .day-number:after{content:"Today";color:var(--primary);letter-spacing:.04em;text-transform:uppercase;margin-left:6px;font-size:.62rem;font-weight:800}.day-cell.status-available{background:linear-gradient(180deg, #f9fffb, var(--success-soft))}.day-cell.status-possibly{background:linear-gradient(180deg, #fffdf5, var(--warning-soft))}.day-cell.status-unavailable{background:linear-gradient(180deg, #fff8f7, var(--danger-soft))}.day-cell.status-not_open{background:linear-gradient(#fbfcff,#e5e9f0)}.day-number{font-size:1.05rem;font-weight:850}.day-status{max-width:100%;color:var(--muted);font-size:.72rem;font-weight:800;line-height:1.2}.day-actions{margin-top:4px}.day-detail-action{color:var(--primary);background:#ffffffbd;border:1px solid #06203b1f;border-radius:5px;padding:3px 6px;font-size:.66rem;font-weight:850;display:inline-flex}.day-detail-action:hover,.day-detail-action:focus{background:#fff;outline:none}.booking-count{color:#fff;background:var(--ink);text-align:center;border:2px solid #fff;border-radius:6px;min-width:42px;min-height:22px;padding:3px 7px;font-size:.68rem;font-weight:850;line-height:1.15;position:absolute;top:8px;right:8px}.calendar-event-count{min-width:42px;min-height:22px;color:var(--primary);border:2px solid var(--primary);text-align:center;background:#fff;border-radius:6px;padding:3px 7px;font-size:.68rem;font-weight:850;line-height:1.15;position:absolute;top:36px;right:8px}.calendar-event-preview-list{cursor:pointer;gap:4px;width:100%;max-height:72px;margin-top:4px;display:grid;overflow:hidden}.admin-calendar .day-cell.selected .calendar-event-preview-list{max-height:118px;padding-right:2px;overflow:auto}.calendar-event-preview,.calendar-event-more{max-width:100%;color:var(--primary);text-overflow:ellipsis;white-space:nowrap;background:#ffffffc7;border:1px solid #06203b1f;border-radius:5px;padding:4px 5px;font-size:.66rem;font-weight:850;line-height:1.15;display:block;overflow:hidden}.calendar-event-preview.source-harbor{color:#064b60;background:#dff3f7;border-color:#7ec8d6}.calendar-event-preview.source-info{color:#775007;background:#fff1c9;border-color:#e2b54d}.calendar-event-preview.source-tom{color:#4c2f87;background:#eee8ff;border-color:#b8a6e8}.calendar-event-preview.source-other{color:var(--primary);border-color:var(--line-strong);background:#ece6dd}.calendar-event-more{color:var(--muted);background:#ffffff8f}.calendar-event-preview-list:hover .calendar-event-preview,.calendar-event-preview-list:focus .calendar-event-preview,.calendar-event-preview-list:hover .calendar-event-more,.calendar-event-preview-list:focus .calendar-event-more{border-color:var(--primary);background:#fff}.calendar-legend{background:var(--surface-strong);border:1px solid var(--line);border-radius:var(--radius);flex-wrap:wrap;gap:10px;margin-top:18px;padding:14px;display:flex}.legend-item{color:var(--ink);border:1px solid var(--line);background:#fff;border-radius:6px;align-items:center;gap:8px;padding:8px 10px;font-size:.9rem;font-weight:850;display:flex}.legend-color{border:1px solid #00000014;border-radius:4px;width:18px;height:18px}.legend-color.status-available{background:var(--success)}.legend-color.status-possibly{background:var(--warning)}.legend-color.status-unavailable{background:var(--danger)}.legend-color.status-not_open{background:#7b8496}.modal-overlay{z-index:1000;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#18212f6b;place-items:center;padding:18px;display:grid;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);width:min(100%,420px);padding:22px;box-shadow:0 24px 70px #18212f40}.modal h3{color:var(--ink);margin-bottom:18px;font-size:1.25rem}.modal select{margin:8px 0 18px}.modal-buttons{justify-content:flex-end;gap:10px;display:flex}@media (width<=680px){.calendar{padding:14px}.admin-controls{flex-direction:column;align-items:stretch}.admin-cycle-help{text-align:left}.calendar-grid{gap:5px}.day-cell{min-height:66px;padding:7px}.admin-calendar .day-cell{min-height:88px}.day-status,.calendar-event-preview-list,.day-cell.today .day-number:after{display:none}}@media (width<=430px){.calendar-header button{width:36px;height:36px}.day-header{font-size:.68rem}.day-cell{min-height:54px}}.app{width:min(1180px,100% - 32px);margin:0 auto;padding:24px 0 48px}.app-header{background:var(--primary);border-radius:var(--radius);border:1px solid #ded8cce6;justify-content:space-between;align-items:center;gap:20px;margin-bottom:18px;padding:10px 12px 10px 18px;display:flex;box-shadow:0 16px 44px #06203b29}.booking-header{flex-direction:column;justify-content:center;gap:12px;padding:18px 18px 14px;position:relative}.booking-header:after{content:"";background:var(--champagne);opacity:.92;width:min(520px,72%);height:2px}.compact-header{min-height:86px}.brand{align-items:center;width:min(58vw,520px);min-width:0;display:flex;overflow:hidden}.booking-header .brand{justify-content:center;width:min(100%,690px);max-height:150px}.compact-header .brand{width:min(48vw,430px);max-height:96px}.gate-icon,.empty-icon{color:#fff;background:linear-gradient(135deg, var(--primary), #8b6f2d);border-radius:var(--radius);place-items:center;width:44px;height:44px;font-weight:800;display:inline-grid}.brand-logo{object-fit:contain;transform-origin:50%;width:100%;height:auto;max-height:112px;display:block;transform:scale(1.42)}.booking-header .brand-logo{max-height:142px;transform:scale(1.5)}.compact-header .brand-logo{max-height:96px;transform:scale(1.32)}.eyebrow{color:var(--primary);letter-spacing:.08em;text-transform:uppercase;margin-bottom:4px;font-size:.72rem;font-weight:800}nav{border-radius:var(--radius);background:#ffffff14;border:1px solid #d8cabe6b;align-items:center;gap:8px;padding:4px;display:flex}.booking-header nav{order:3}nav a,.logout-btn,.secondary-btn{color:#ffffffc7;cursor:pointer;background:0 0;border-radius:6px;min-height:38px;padding:8px 12px;font-weight:750;text-decoration:none}nav a.active,nav a:hover,.secondary-btn:hover{color:#fff;background:#d8cabe2e}.logout-btn{color:#f4d8d4}.customer-shell{gap:20px;display:grid}.intro-copy{gap:8px;display:grid}.intro-panel,.admin-summary{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);justify-content:space-between;align-items:end;gap:20px;padding:24px;display:flex}.intro-panel h2,.admin-summary h2,.gate-card h2,.login-container h2{max-width:720px;font-size:clamp(1.65rem,4vw,2.55rem);line-height:1.05}.intro-subtitle{color:var(--muted);font-size:1rem;font-weight:700}.muted,.hint,.empty-state p,.empty-admin p{color:var(--muted)}.status-key{flex-wrap:wrap;gap:10px;display:flex}.prominent-key{background:var(--surface-strong);border:1px solid var(--line);border-radius:var(--radius);min-width:min(100%,380px);padding:14px}.key-item{color:var(--ink);border:1px solid var(--line);background:#fff;border-radius:6px;align-items:center;gap:8px;padding:9px 10px;font-size:.92rem;font-weight:850;display:flex}.key-swatch{border:1px solid #0000001a;border-radius:5px;width:18px;height:18px}.key-swatch.status-available{background:var(--success)}.key-swatch.status-possibly{background:var(--warning)}.key-swatch.status-unavailable{background:var(--danger)}.key-swatch.status-not_open{background:#7b8496}.availability-note{color:var(--muted);flex-basis:100%;margin-top:2px;font-size:.9rem;font-weight:700;line-height:1.35}.customer-view{grid-template-columns:minmax(0,1.25fr) minmax(340px,.75fr);align-items:start;gap:20px;display:grid}.booking-form,.login-container,.gate-card,.empty-admin{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:24px}.booking-form{position:sticky;top:20px}.form-heading{margin-bottom:18px}.form-heading h3,.empty-state h3,.empty-admin h3{font-size:1.35rem}.form-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.form-group{text-align:left;gap:7px;margin-bottom:14px;display:grid}.form-group label,.modal label{color:#344054;font-size:.9rem;font-weight:750}.form-group input,.form-group select,.form-group textarea,.modal select{width:100%;color:var(--ink);border:1px solid var(--line-strong);border-radius:var(--radius);background:#fff;outline:none;padding:11px 12px;transition:border-color .16s,box-shadow .16s}.form-group input:focus,.form-group select:focus,.form-group textarea:focus,.modal select:focus{border-color:var(--primary);box-shadow:0 0 0 4px #176b7429}.form-group textarea{resize:vertical}.primary-btn,button[type=submit]{color:#fff;background:var(--primary);border-radius:var(--radius);cursor:pointer;justify-content:center;align-items:center;gap:8px;min-height:44px;padding:11px 16px;font-weight:800;transition:background .16s,transform .16s,box-shadow .16s;display:inline-flex}.primary-btn:hover,button[type=submit]:hover{background:var(--primary-dark);transform:translateY(-1px);box-shadow:0 10px 24px #176b743d}.primary-btn:disabled,button:disabled{cursor:not-allowed;opacity:.58;transform:none}.booking-form .primary-btn,.login-container .primary-btn,.gate-card .primary-btn{width:100%}.message{border-radius:var(--radius);text-align:left;margin-bottom:16px;padding:12px 14px;font-weight:700}.message.success,.success-message{color:#125d3c;background:var(--success-soft);border:1px solid #1d8a5a3d}.message.error,.error{color:#8f2d27;background:var(--danger-soft);border:1px solid #c4473d3d}.empty-state{align-content:center;justify-items:start;gap:10px;min-height:280px;display:grid}.confirmation-state{align-content:start;justify-items:start;gap:12px;display:grid}.empty-icon{background:var(--primary-soft);width:38px;height:38px;color:var(--primary)}.confirmation-icon{color:#fff;background:var(--success)}.unavailable-state{border-color:#c4473d42}.unavailable-icon{color:#fff;background:var(--danger)}.confirmation-copy{color:var(--muted)}.secondary-action{min-height:40px;color:var(--primary);background:var(--primary-soft);border-radius:var(--radius);cursor:pointer;border:1px solid #06203b24;padding:9px 13px;font-weight:800}.secondary-action:hover{background:#e2d8cb}.gate-shell,.login-shell{place-items:center;min-height:66vh;display:grid}.gate-card,.login-container{width:min(100%,440px)}.gate-icon{margin-bottom:18px}.gate-logo{background:var(--primary);border-radius:var(--radius);width:min(100%,320px);margin:0 auto 22px;display:block}.gate-card .muted{margin:10px 0 20px}.hint{margin-top:14px;font-size:.84rem}.admin-panel{gap:18px;display:grid}.admin-calendar-section{gap:14px;display:grid}.admin-tools-grid{grid-template-columns:minmax(0,1.25fr) minmax(320px,.75fr);gap:18px;display:grid}.admin-tool-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);align-content:start;gap:16px;padding:22px;display:grid}.tool-card-heading{justify-content:space-between;align-items:start;gap:14px;display:flex}.tool-card-heading h3{font-size:1.2rem}.health-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.health-item,.calendar-health-row{background:var(--surface-strong);border:1px solid var(--line);border-radius:7px;justify-content:space-between;align-items:center;gap:12px;padding:11px 12px;display:flex}.health-item span,.calendar-health-row span{color:var(--muted);font-size:.86rem;font-weight:750}.health-item strong,.calendar-health-row strong{text-align:right;font-size:.88rem}.status-ok{color:#125d3c}.status-alert{color:#8f2d27}.calendar-health-list,.password-form{gap:10px;display:grid}.calendar-health-row span{overflow-wrap:anywhere;min-width:0}.tool-message{color:var(--primary);font-weight:800}.date-detail-panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);gap:14px;padding:22px;display:grid}.section-heading{padding:0 4px}.section-heading h3{color:var(--ink);font-size:1.25rem}.calendar-source-controls{background:var(--surface-strong);border:1px solid var(--line);border-radius:var(--radius);flex-wrap:wrap;align-items:center;gap:10px;padding:12px;display:flex}.calendar-source-controls>span{color:var(--muted);font-size:.86rem;font-weight:800}.calendar-source-toggle{min-height:34px;color:var(--ink);border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:6px;align-items:center;gap:7px;padding:7px 10px;font-size:.88rem;font-weight:800;display:inline-flex}.calendar-source-toggle input{width:16px;height:16px;accent-color:var(--primary)}.calendar-source-dot{border-radius:999px;width:10px;height:10px}.calendar-source-dot.source-harbor{background:#2aa9bd}.calendar-source-dot.source-info{background:#d1941c}.calendar-source-dot.source-tom{background:#6f4dbf}.calendar-source-badge{border:1px solid var(--line);border-radius:999px;width:fit-content;padding:3px 7px;font-size:.74rem;font-weight:850;display:inline-flex}.calendar-source-badge.source-harbor{color:#064b60;background:#dff3f7;border-color:#7ec8d6}.calendar-source-badge.source-info{color:#775007;background:#fff1c9;border-color:#e2b54d}.calendar-source-badge.source-tom{color:#4c2f87;background:#eee8ff;border-color:#b8a6e8}.calendar-source-badge.source-other{color:var(--primary);border-color:var(--line-strong);background:#ece6dd}.summary-pill{text-align:center;background:var(--primary-soft);border-radius:var(--radius);min-width:104px;padding:12px 16px;display:grid}.summary-pill strong{color:var(--primary);font-size:1.65rem;line-height:1}.summary-pill span{color:var(--muted);font-size:.82rem;font-weight:750}.date-booking-list{gap:12px;display:grid}.calendar-event-group{gap:10px;display:grid}.calendar-event-group h4{color:var(--primary);margin:0;font-size:.95rem}.date-booking-card{background:var(--surface-strong);border:1px solid var(--line);border-radius:var(--radius);gap:10px;padding:14px;display:grid}.calendar-event-card{background:var(--primary-soft);border-color:#06203b38}.calendar-event-description{white-space:pre-line}.calendar-event-link{color:var(--primary);font-weight:800;text-decoration:none}.calendar-event-link:hover{text-decoration:underline}.date-booking-card p{color:var(--muted)}.assignment-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.calendar-color-dot{vertical-align:-1px;border:1px solid #0000001f;border-radius:999px;width:12px;height:12px;margin-right:7px;display:inline-block}.date-booking-head{justify-content:space-between;gap:14px;display:flex}.date-booking-head div{gap:3px;display:grid}.date-booking-head strong{color:var(--ink)}.date-booking-head span{color:var(--muted);font-size:.88rem;font-weight:750}.admin-note-field{margin-bottom:0}.bookings-table-wrap{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:auto}.bookings-table{border-collapse:collapse;width:100%;min-width:760px}.bookings-table th,.bookings-table td{text-align:left;border-bottom:1px solid var(--line);padding:15px}.bookings-table th{color:var(--muted);background:var(--surface-strong);letter-spacing:.05em;text-transform:uppercase;font-size:.78rem}.bookings-table tr:last-child td{border-bottom:0}.table-actions{gap:8px;display:flex}.btn-approve,.btn-reject{color:#fff;cursor:pointer;border-radius:6px;min-height:36px;padding:8px 11px;font-weight:800}.btn-approve{background:var(--success)}.btn-reject{background:var(--danger)}@media (width<=860px){.app{width:min(100% - 20px,680px);padding-top:10px}.app-header,.intro-panel,.admin-summary{flex-direction:column;align-items:stretch}.booking-header{align-items:center}.brand{justify-content:center;width:100%;max-height:122px}.booking-header .brand{max-height:138px}nav{justify-content:space-between;width:100%}.customer-view{grid-template-columns:1fr}.booking-form{position:static}.form-row{grid-template-columns:1fr;gap:0}.admin-tools-grid,.assignment-grid,.health-grid{grid-template-columns:1fr}.bookings-table,.bookings-table thead,.bookings-table tbody,.bookings-table th,.bookings-table td,.bookings-table tr{min-width:0;display:block}.bookings-table thead{display:none}.bookings-table tr{border-bottom:1px solid var(--line);padding:14px}.bookings-table tr:last-child{border-bottom:0}.bookings-table td{border:0;grid-template-columns:96px minmax(0,1fr);gap:12px;padding:8px 0;display:grid}.bookings-table td:before{content:attr(data-label);color:var(--muted);text-transform:uppercase;font-size:.78rem;font-weight:800}}@media (width<=540px){.brand-logo{width:min(100%,440px);max-height:100px;transform:scale(1.34)}.booking-header .brand-logo{max-height:126px;transform:scale(1.42)}nav a,.logout-btn{text-align:center;flex:1}}
