@font-face{font-family:Work Sans;src:url(/fonts/work-sans-400.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:Work Sans;src:url(/fonts/work-sans-500.woff2) format("woff2");font-weight:500;font-display:swap}@font-face{font-family:Work Sans;src:url(/fonts/work-sans-600.woff2) format("woff2");font-weight:600;font-display:swap}@font-face{font-family:Work Sans;src:url(/fonts/work-sans-700.woff2) format("woff2");font-weight:700;font-display:swap}@font-face{font-family:Work Sans;src:url(/fonts/work-sans-800.woff2) format("woff2");font-weight:800;font-display:swap}:root{--primary: #2563eb;--primary-soft: color-mix(in srgb, var(--primary) 12%, white);--text: #1a1d23;--muted: #70757e;--border: #e7e9ec;--bg: #f7f8fa;--surface: #ffffff;--danger: #dc2626;--warn: #b06a12;--ok: #1c7a41;--radius-sm: 8px;--radius-md: 10px;--radius-lg: 16px;--shadow-sm: 0 1px 2px rgba(20, 22, 26, .04);--shadow-md: 0 4px 16px rgba(20, 22, 26, .06);--shadow-lg: 0 20px 60px rgba(20, 22, 26, .18);--space-page-x: 2.5rem;--space-page-y: 2rem}*{box-sizing:border-box}body{margin:0;font-family:Work Sans,system-ui,-apple-system,Segoe UI,sans-serif;color:var(--text);background:var(--bg)}button{font:inherit;cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}input,select{font:inherit;padding:.6rem .8rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);transition:border-color .15s ease,box-shadow .15s ease}input:focus,select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 18%,transparent)}.login-page{display:grid;place-items:center;min-height:100vh}.login-card{display:flex;flex-direction:column;gap:.6rem;width:min(22rem,90vw);padding:2rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}.login-card button{margin-top:.75rem;padding:.65rem;border:none;border-radius:var(--radius-sm);background:var(--primary);color:#fff;font-weight:600;transition:transform .15s ease,box-shadow .15s ease}.login-card button:hover:not(:disabled){transform:translateY(-1px);box-shadow:var(--shadow-md)}.form-error{color:var(--danger);margin:0;font-size:.9rem}.page-loading{padding:2rem;text-align:center;color:var(--muted)}.layout{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:1.5rem;padding:.9rem var(--space-page-x);background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap}.brand{display:flex;align-items:center;gap:.5rem;font-weight:800;letter-spacing:-.01em}.brand-logo{height:1.6rem}.topbar nav{display:flex;gap:1.4rem}.topbar nav a{color:var(--muted);text-decoration:none;padding:.3rem 0;border-bottom:2px solid transparent;transition:color .15s ease,border-color .15s ease}.topbar nav a.active{color:var(--text);font-weight:600;border-bottom-color:var(--primary)}.topbar-user{margin-left:auto;display:flex;align-items:center;gap:.75rem;color:var(--muted);font-size:.9rem}.topbar-user button{background:none;border:1px solid var(--border);border-radius:var(--radius-sm);padding:.4rem .9rem;color:var(--text);font-weight:600;font-size:.88rem;transition:background-color .15s ease}.topbar-user button:hover:not(:disabled){background:var(--bg)}.content{flex:1;padding:var(--space-page-y) var(--space-page-x)}@keyframes modal-backdrop-in{0%{opacity:0}to{opacity:1}}@keyframes modal-card-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#14161a73;display:grid;place-items:center;z-index:20;padding:1rem;animation:modal-backdrop-in .15s ease-out}.modal{background:var(--surface);border-radius:var(--radius-lg);padding:1.75rem 2rem;width:min(28rem,100%);max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-lg);animation:modal-card-in .18s ease-out}.modal-title{margin-top:0;font-size:1.15rem;font-weight:700;letter-spacing:-.01em}.booking-form{display:flex;flex-direction:column;gap:.7rem}.booking-form .row{display:flex;gap:.9rem}.booking-form .row>label{flex:1;display:flex;flex-direction:column;gap:.3rem}.booking-form>label{display:flex;flex-direction:column;gap:.3rem}.actions{display:flex;justify-content:flex-end;gap:.6rem;margin-top:1rem}.actions .primary{background:var(--primary);color:#fff;border:none;border-radius:var(--radius-sm);padding:.6rem 1.2rem;font-weight:600;transition:transform .15s ease,box-shadow .15s ease}.actions .primary:hover:not(:disabled){transform:translateY(-1px);box-shadow:var(--shadow-md)}.actions .secondary{background:none;border:1px solid var(--border);color:var(--text);border-radius:var(--radius-sm);padding:.6rem 1.2rem;font-weight:600;transition:background-color .15s ease}.actions .secondary:hover:not(:disabled){background:var(--bg)}.weekday-picker{display:flex;gap:.3rem;flex-wrap:wrap}.weekday-picker label{display:inline-flex;align-items:center;gap:.25rem;font-size:.85rem}.notice{background:color-mix(in srgb,var(--warn) 12%,white);border:1px solid var(--warn);border-radius:var(--radius-sm);padding:.6rem .9rem;color:var(--text)}.calendar-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:1.4rem}.primary-btn{background:var(--primary);color:#fff;border:none;border-radius:var(--radius-sm);padding:.6rem 1.2rem;font-weight:600;transition:transform .15s ease,box-shadow .15s ease}.primary-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:var(--shadow-md)}.closed-banner{color:var(--muted);padding:2rem;text-align:center}.daygrid{display:grid;position:relative;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);overflow-x:auto}.daygrid-room-head,.daygrid-gutter-head{padding:.75rem .5rem;font-weight:600;border-bottom:1px solid var(--border);text-align:center;position:sticky;top:0;background:var(--surface)}.daygrid-gutter{display:flex;flex-direction:column}.daygrid-gutter-slot{height:2.2rem;font-size:.7rem;color:var(--muted);padding:0 .3rem}.daygrid-col{position:relative;display:flex;flex-direction:column;border-left:1px solid var(--border)}.daygrid-slot{height:2.2rem;border:none;border-bottom:1px dotted var(--border);background:transparent;transition:background-color .15s ease}.daygrid-slot:hover,.daygrid-slot:focus-visible{background:var(--primary-soft)}.booking-block{position:absolute;left:3px;right:3px;overflow:hidden;border-radius:6px;padding:.2rem .4rem;font-size:.75rem;display:flex;flex-direction:column;pointer-events:none;box-shadow:var(--shadow-sm)}.booking-block.status-confirmed{background:var(--primary);color:#fff}.booking-block.status-checked_in{background:var(--ok);color:#fff}.booking-block.status-pending_approval{background:color-mix(in srgb,var(--warn) 15%,white);color:var(--warn);border:1px dashed var(--warn)}.booking-block-title{font-weight:600;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.booking-block-meta{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;opacity:.85}.booking-block-conflict{background:var(--danger);color:#fff;border-radius:4px;padding:0 .3rem;align-self:flex-start}.calendar-nav{display:flex;align-items:center;gap:.5rem}.calendar-nav button{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-sm);padding:.4rem .7rem;transition:background-color .15s ease}.calendar-nav button:hover{background:var(--bg)}.calendar-nav h1{font-size:1.25rem;font-weight:700;letter-spacing:-.01em;margin:0 0 0 .6rem}.calendar-controls{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.view-toggle{display:inline-flex;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.view-toggle button{border:none;background:var(--surface);padding:.4rem .9rem;transition:background-color .15s ease,color .15s ease}.view-toggle button[aria-pressed=true]{background:var(--primary);color:#fff}.week-room-picker{display:flex;align-items:center;gap:.4rem}.weekgrid-closed{display:grid;place-items:center;color:var(--muted);font-size:.85rem;min-height:8rem}.search-form{display:flex;gap:.9rem;align-items:flex-end;flex-wrap:wrap;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);padding:1.1rem 1.3rem;margin-bottom:1.5rem}.search-form>label{display:flex;flex-direction:column;gap:.3rem;font-size:.85rem;font-weight:500;color:var(--text)}.room-results{list-style:none;padding:0;display:flex;flex-direction:column;gap:.6rem}.room-card{display:flex;justify-content:space-between;align-items:center;gap:1rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);padding:.9rem 1.2rem;transition:transform .15s ease,box-shadow .15s ease}.room-card:hover{transform:translateY(-1px);box-shadow:var(--shadow-md)}.room-card>div{display:flex;flex-direction:column;gap:.2rem}.room-meta{color:var(--muted);font-size:.85rem}.room-card>button{border:1px solid var(--primary);color:var(--primary);background:none;border-radius:var(--radius-sm);padding:.5rem 1.2rem;font-weight:600;transition:background-color .15s ease}.room-card>button:hover{background:var(--primary-soft)}.mybooking-list{list-style:none;padding:0;display:flex;flex-direction:column;gap:.6rem}.mybooking-row{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);padding:.85rem 1.2rem;transition:transform .15s ease,box-shadow .15s ease}.mybooking-row:hover{transform:translateY(-1px);box-shadow:var(--shadow-md)}.mybooking-info{display:flex;flex-direction:column;gap:.2rem}.mybooking-actions{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.mybooking-actions button{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-sm);padding:.4rem .9rem;transition:background-color .15s ease}.mybooking-actions button:hover{background:var(--bg)}.mybooking-actions .primary-btn{border:none}.status-badge{border-radius:999px;padding:.2rem .7rem;font-size:.78rem;font-weight:600}.status-badge.status-confirmed{background:color-mix(in srgb,var(--primary) 15%,white);color:var(--primary)}.status-badge.status-checked_in{background:color-mix(in srgb,var(--ok) 15%,white);color:var(--ok)}.status-badge.status-pending_approval{background:color-mix(in srgb,var(--warn) 15%,white);color:var(--warn)}.status-badge.status-auto_released{background:color-mix(in srgb,var(--danger) 15%,white);color:var(--danger)}.admin-layout{display:flex;gap:1.75rem;align-items:flex-start;flex-wrap:wrap}.admin-nav{display:flex;flex-direction:column;gap:.25rem;min-width:11rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);padding:.6rem}.admin-nav a{color:var(--muted);text-decoration:none;padding:.5rem .7rem;border-radius:var(--radius-sm);transition:background-color .15s ease,color .15s ease}.admin-nav a:hover{background:var(--bg);color:var(--text)}.admin-nav a.active{background:var(--primary);color:#fff}.admin-content{flex:1;min-width:0}.admin-table{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);overflow:hidden}.admin-table th,.admin-table td{text-align:left;padding:.75rem 1rem;border-bottom:1px solid var(--border)}.admin-table th{color:var(--muted);font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;font-weight:600}.admin-table tbody tr{transition:background-color .12s ease}.admin-table tbody tr:hover{background:var(--bg)}.admin-toolbar{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}.tag{display:inline-block;border:1px solid var(--border);border-radius:999px;padding:.1rem .6rem;font-size:.75rem;color:var(--muted);margin-right:.3rem}.row-actions{display:flex;gap:.4rem;flex-wrap:wrap}.row-actions button{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-sm);padding:.3rem .7rem;transition:background-color .15s ease}.row-actions button:hover{background:var(--bg)}.amenity-admin{margin-top:2rem}.amenity-list{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:.6rem}.amenity-list li{display:inline-flex;align-items:center;gap:.5rem;background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:.3rem .5rem .3rem .9rem}.amenity-list button{border:none;background:none;color:var(--danger)}.amenity-add{display:flex;align-items:flex-end;gap:.6rem;margin-top:.6rem}.amenity-add label{display:flex;flex-direction:column;gap:.3rem}.amenity-add button{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-sm);padding:.5rem 1rem;transition:background-color .15s ease}.amenity-add button:hover{background:var(--bg)}.room-groups-hint{color:var(--muted);font-size:.82rem;margin:.3rem 0 0;width:100%}.link-output{width:100%;font-family:ui-monospace,monospace;font-size:.85rem;padding:.6rem .8rem}.decline-comment{display:flex;flex-direction:column;gap:.3rem;margin-top:.6rem}.decline-comment textarea{font:inherit;padding:.6rem .8rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);transition:border-color .15s ease,box-shadow .15s ease}.decline-comment textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 18%,transparent)}.settings-form{display:flex;flex-direction:column;gap:.7rem;max-width:38rem}.settings-form h2{margin:1.4rem 0 .3rem;font-size:1.05rem;font-weight:700;letter-spacing:-.01em}.settings-form label{display:flex;flex-direction:column;gap:.3rem}.settings-form .check{flex-direction:row;align-items:center;gap:.5rem}.hours-table td,.hours-table th{padding:.5rem .75rem}.settings-section{margin-top:2.5rem}.time-range-field{display:flex;flex-direction:column;gap:.3rem}.time-range-field-label{font-size:.85rem;font-weight:500;color:var(--text)}.time-range-box{display:flex;align-items:center;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);overflow:hidden;transition:border-color .15s ease,box-shadow .15s ease}.time-range-box:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 18%,transparent)}.time-range-box input{border:none;background:none;box-shadow:none;flex:1;text-align:center;min-width:0}.time-range-box input:focus{box-shadow:none}.time-range-sep{color:var(--muted);padding:0 .3rem;font-size:.85rem}.pairing-code{font-family:ui-monospace,monospace;font-size:2rem;font-weight:700;letter-spacing:.15em;text-align:center;background:var(--bg);border-radius:var(--radius-sm);padding:.8rem}.tag.device-status-online{background:color-mix(in srgb,var(--ok) 15%,white);color:var(--ok);border-color:transparent}.tag.device-status-offline{background:var(--bg);color:var(--muted);border-color:transparent}.tag.device-status-unpaired{background:color-mix(in srgb,var(--warn) 15%,white);color:var(--warn);border-color:transparent}.tag.calendar-connection-status-active,.tag.calendar-integration-status-active{background:color-mix(in srgb,var(--ok) 15%,white);color:var(--ok);border-color:transparent}.tag.calendar-connection-status-resyncing{background:color-mix(in srgb,var(--primary) 15%,white);color:var(--primary);border-color:transparent}.tag.calendar-connection-status-paused{background:var(--bg);color:var(--muted);border-color:transparent}.tag.calendar-connection-status-error,.tag.calendar-integration-status-error{background:color-mix(in srgb,var(--danger) 15%,white);color:var(--danger);border-color:transparent}.tag.calendar-connection-status-disconnected,.tag.calendar-integration-status-disabled,.tag.calendar-integration-status-revoked{background:var(--bg);color:var(--muted);border-color:transparent}.tag.calendar-integration-status-needs_reconnect{background:color-mix(in srgb,var(--warn) 15%,white);color:var(--warn);border-color:transparent}
