:root{--brand:#0f3d5c;--brand-dark:#072436;--brand-bright:#1d78ad;--accent:#b8860b;--accent-soft:#fbeed2;--ink:#16202b;--muted:#4b5768;--muted-2:#6b7686;--surface:#fff;--surface-muted:#f4f6f8;--surface-sunken:#eef1f4;--border:#dbe1e7;--border-strong:#c3ccd4;--warn-bg:#fdf3e0;--warn-border:#e8c265;--warn-text:#6b4a00;--free-bg:#e7f5ec;--free-border:#8fc9a6;--free-ink:#1b6b41;--busy-bg:#fdeee3;--busy-border:#e8b48a;--busy-ink:#8a4a18;--shut-bg:#eef1f4;--shut-border:#c3ccd4;--shut-ink:#5a6675;--danger-ink:#a12c2c;--danger-border:#e0a5a5;--radius-sm:.4rem;--radius:.7rem;--radius-lg:1rem;--shadow-sm:0 1px 2px #0f3d5c0f;--shadow:0 2px 10px #0f3d5c14;--shadow-hover:0 6px 20px #0f3d5c1f;--content-width:70rem;--slot-0-bg:#eaf2fb;--slot-0-border:#6fa8dc;--slot-0-text:#1c4e80;--slot-1-bg:#fbeed2;--slot-1-border:#d8a53d;--slot-1-text:#7a5510;--slot-2-bg:#e9f5ec;--slot-2-border:#6fbf8b;--slot-2-text:#1f6b3f;--slot-3-bg:#f3ebfa;--slot-3-border:#a888d6;--slot-3-text:#5b3a8c;--slot-4-bg:#fdecec;--slot-4-border:#e08b8b;--slot-4-text:#8c3131}*{box-sizing:border-box}html{color-scheme:light}body{min-height:100vh;color:var(--ink);background:var(--surface-muted);-webkit-font-smoothing:antialiased;flex-direction:column;margin:0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:16px;line-height:1.6;display:flex}img{max-width:100%}.site-header{background:var(--brand);background-image:linear-gradient(180deg, var(--brand) 0%, var(--brand-dark) 100%);z-index:10;box-shadow:var(--shadow);position:sticky;top:0}.site-nav{max-width:var(--content-width);flex-wrap:wrap;align-items:center;gap:1rem 1.5rem;margin:0 auto;padding:.9rem 1.5rem;display:flex}.brand{color:#fff;letter-spacing:.01em;align-items:center;gap:.45rem;margin-right:auto;font-size:1.05rem;font-weight:700;text-decoration:none;display:inline-flex}.brand-logo{flex:none;width:auto;height:2.6rem}.nav-links{flex-wrap:wrap;gap:1.25rem;margin:0;padding:0;list-style:none;display:flex}.nav-links a{color:#ffffffd1;border-bottom:2px solid #0000;padding-block:.3rem;font-size:.92rem;font-weight:500;text-decoration:none}.nav-links a:hover,.nav-links a:focus-visible{color:#fff}.nav-links a[aria-current=page]{color:#fff;border-bottom-color:var(--accent)}main{width:100%;max-width:var(--content-width);flex:1;margin:0 auto;padding:2.5rem 1.5rem 3.5rem}.site-footer{border-top:1px solid var(--border);text-align:center;padding:1.5rem}.site-footer p{max-width:var(--content-width);color:var(--muted-2);margin:0 auto;font-size:.82rem}h1{color:var(--brand-dark);letter-spacing:-.01em;margin:0 0 .4rem;font-size:1.75rem;font-weight:700}h2{color:var(--brand);margin:0 0 .9rem;font-size:1.15rem;font-weight:600}p{color:var(--muted);margin:0 0 1rem}.lede{color:var(--muted);max-width:38rem;font-size:1.02rem}a{color:var(--brand-bright)}a:hover{text-decoration-thickness:2px}.section{margin-block:2.25rem}.section:first-child{margin-top:0}.section-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem 1rem;margin-bottom:.9rem;display:flex}.section-header h2{margin:0}hr.divider{border:none;border-top:1px solid var(--border);margin-block:2.25rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:1.4rem}.status-pill,.state-pill{letter-spacing:.02em;text-transform:uppercase;white-space:nowrap;border:1px solid;border-radius:999px;align-items:center;gap:.35rem;padding:.15rem .6rem;font-size:.72rem;font-weight:700;display:inline-flex}.status-dot{background:currentColor;border-radius:50%;width:.45rem;height:.45rem}.status-pill[data-state=free],.state-pill[data-state=claimed],.state-pill[data-state=in-progress]{background:var(--free-bg);border-color:var(--free-border);color:var(--free-ink)}.status-pill[data-state=busy],.state-pill[data-state=check-in-open]{background:var(--busy-bg);border-color:var(--busy-border);color:var(--busy-ink)}.status-pill[data-state=closed],.state-pill[data-state=upcoming],.state-pill[data-state=finished]{background:var(--shut-bg);border-color:var(--shut-border);color:var(--shut-ink)}.state-pill[data-state=released]{background:var(--surface);border-color:var(--danger-border);color:var(--danger-ink)}.status-line{color:var(--muted);align-items:center;gap:.6rem;margin:0 0 1.5rem;font-size:.92rem;display:flex}.filters{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);flex-wrap:wrap;align-items:end;gap:.75rem 1rem;margin:0 0 1.5rem;padding:1rem 1.15rem;display:flex}.check{color:var(--ink);cursor:pointer;align-items:center;gap:.45rem;padding-bottom:.55rem;font-size:.9rem;font-weight:500;display:inline-flex}.check input{width:1rem;min-width:0;height:1rem;accent-color:var(--brand);cursor:pointer}.filters-clear{padding-bottom:.7rem;font-size:.88rem}.page-hint{color:var(--muted-2);margin-top:1.5rem;font-size:.9rem}.backlink{color:var(--muted-2);margin-bottom:.6rem;font-size:.86rem;font-weight:500;text-decoration:none;display:inline-block}.backlink:hover{color:var(--brand-bright)}#rooms{grid-template-columns:repeat(auto-fill,minmax(17rem,1fr));gap:.85rem;margin:0;padding:0;list-style:none;display:grid}#rooms li{height:100%;margin:0}.room-card{background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--shut-border);border-radius:var(--radius);height:100%;box-shadow:var(--shadow-sm);cursor:pointer;flex-direction:column;gap:.35rem;padding:1rem 1.15rem;text-decoration:none;transition:box-shadow .15s,transform .15s,border-color .15s;display:flex}.room-card[data-state=free]{border-left-color:var(--free-border)}.room-card[data-state=busy]{border-left-color:var(--busy-border)}.room-card:hover,.room-card:focus-visible{box-shadow:var(--shadow-hover);transform:translateY(-2px)}.room-card:focus-visible{outline:2px solid var(--brand-bright);outline-offset:2px}.room-card-top{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.room-name{color:var(--brand-dark);font-size:1.02rem;font-weight:700}.room-card:hover .room-name{color:var(--brand-bright)}.room-meta{color:var(--muted-2);font-size:.85rem}.room-status{color:var(--ink);margin-top:.15rem;font-size:.9rem;font-weight:600}.room-status-next{color:var(--muted-2);font-weight:500}.room-free-left{color:var(--muted-2);font-size:.8rem}.date-nav{scrollbar-width:thin;gap:.55rem;margin:0 0 1rem;padding:.2rem .2rem .7rem;list-style:none;display:flex;overflow-x:auto}.date-nav li{flex:none}.date-pill{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);flex-direction:column;align-items:center;gap:.15rem;width:3.75rem;padding:.6rem .3rem .55rem;text-decoration:none;transition:border-color .15s,background .15s,box-shadow .15s;display:flex}.date-pill-dow{letter-spacing:.03em;text-transform:uppercase;color:var(--muted-2);font-size:.66rem;font-weight:700}.date-pill-day{color:var(--ink);font-size:1.2rem;font-weight:700;line-height:1.15}.date-pill-month{color:var(--muted-2);font-size:.68rem;font-weight:500}.date-pill:hover{border-color:var(--brand-bright);box-shadow:var(--shadow-sm)}.date-pill:focus-visible{outline:2px solid var(--brand-bright);outline-offset:2px}.date-pill[aria-current=date]{background:var(--brand);border-color:var(--brand);box-shadow:var(--shadow-sm)}.date-pill[aria-current=date] .date-pill-dow,.date-pill[aria-current=date] .date-pill-day,.date-pill[aria-current=date] .date-pill-month{color:#fff}.timetable{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);height:44rem;box-shadow:var(--shadow-sm);padding-block:1.6rem;display:flex;overflow:hidden}.timetable-hours{border-right:1px solid var(--border);background:var(--surface-muted);flex:0 0 3.75rem;position:relative}.timetable-hour{text-align:right;color:var(--muted-2);letter-spacing:.01em;font-size:.72rem;font-weight:600;position:absolute;left:0;right:.65rem;transform:translateY(-50%)}.timetable-body{flex:1;position:relative}.timetable-gridlines{position:absolute;inset:0}.timetable-gridline{border-top:1px dashed var(--border);position:absolute;left:0;right:0}.timetable-gridline:first-child,.timetable-gridline:last-child{border-top:1px solid var(--border-strong)}.timetable-track{margin:0;padding:0;list-style:none;position:absolute;inset:0 1.1rem 0 1rem}.timetable-slot{border-radius:var(--radius-sm);min-height:1.8rem;box-shadow:var(--shadow-sm);border:1px solid;border-left-width:4px;flex-direction:column;justify-content:center;gap:.15rem;padding:.4rem .8rem;font-size:.83rem;display:flex;position:absolute;left:0;right:0}.timetable-slot-time{font-weight:600}.timetable-slot-label{opacity:.8;font-size:.78rem}.timetable-slot[data-tone="0"]{background:var(--slot-0-bg);border-color:var(--slot-0-border);color:var(--slot-0-text)}.timetable-slot[data-tone="1"]{background:var(--slot-1-bg);border-color:var(--slot-1-border);color:var(--slot-1-text)}.timetable-slot[data-tone="2"]{background:var(--slot-2-bg);border-color:var(--slot-2-border);color:var(--slot-2-text)}.timetable-slot[data-tone="3"]{background:var(--slot-3-bg);border-color:var(--slot-3-border);color:var(--slot-3-text)}.timetable-slot[data-tone="4"]{background:var(--slot-4-bg);border-color:var(--slot-4-border);color:var(--slot-4-text)}.timetable-note{color:var(--muted-2);margin-top:.6rem;font-size:.88rem}.timetable-open{border:1px dashed var(--free-border);border-radius:var(--radius-sm);background:var(--free-bg);color:var(--free-ink);font:inherit;text-align:left;cursor:pointer;flex-direction:column;justify-content:center;gap:.1rem;padding:.35rem .8rem;font-size:.8rem;transition:background .12s,border-color .12s;display:flex;position:absolute;left:0;right:0}.timetable-open.is-static{cursor:default;opacity:.75}button.timetable-open:hover{border-style:solid;border-color:var(--free-ink);background:#d9eee2}button.timetable-open:focus-visible{outline:2px solid var(--brand-bright);outline-offset:2px}.timetable-open-label{font-weight:600}.timetable-open-cta{letter-spacing:.02em;text-transform:uppercase;opacity:0;font-size:.74rem;font-weight:700;transition:opacity .12s}button.timetable-open:hover .timetable-open-cta,button.timetable-open:focus-visible .timetable-open-cta{opacity:1}.timetable-bookings{margin:0;padding:0;list-style:none;position:absolute;inset:0}.daygrid-scroll{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow-x:auto}.daygrid{min-width:46rem;padding:.9rem 1.1rem 1.1rem}.daygrid-head,.daygrid-row{align-items:stretch;gap:.8rem;display:flex}.daygrid-head{padding-bottom:.35rem}.daygrid-label{flex-direction:column;flex:0 0 9rem;justify-content:center;gap:.05rem;font-size:.86rem;display:flex}.daygrid-label a{color:var(--brand-dark);font-weight:600;text-decoration:none}.daygrid-label a:hover{color:var(--brand-bright);text-decoration:underline}.daygrid-seats{color:var(--muted-2);font-size:.76rem}.daygrid-axis{flex:1;height:1.1rem;position:relative}.daygrid-hour{color:var(--muted-2);font-size:.7rem;font-weight:600;position:absolute;transform:translate(-50%)}.daygrid-row{padding-block:.25rem}.daygrid-track{border-radius:var(--radius-sm);background:var(--surface-sunken);flex:1;height:2.6rem;position:relative;overflow:hidden}.daygrid-lines{position:absolute;inset:0}.daygrid-line{border-left:1px solid var(--border);position:absolute;top:0;bottom:0}.daygrid-gap,.daygrid-booked{white-space:nowrap;border:1px solid;border-radius:.3rem;align-items:center;padding-inline:.4rem;font-size:.72rem;font-weight:600;display:flex;position:absolute;top:.2rem;bottom:.2rem;overflow:hidden}.daygrid-gap{background:var(--free-bg);border-color:var(--free-border);color:var(--free-ink);text-decoration:none;transition:background .12s}.daygrid-gap:hover{border-color:var(--free-ink);background:#d3ebdd}.daygrid-gap:focus-visible{outline:2px solid var(--brand-bright);outline-offset:1px}.daygrid-booked{background:var(--slot-0-bg);border-color:var(--slot-0-border);color:var(--slot-0-text)}.daygrid-booked[data-tone="1"]{background:var(--slot-1-bg);border-color:var(--slot-1-border);color:var(--slot-1-text)}.daygrid-booked[data-tone="2"]{background:var(--slot-2-bg);border-color:var(--slot-2-border);color:var(--slot-2-text)}.daygrid-booked[data-tone="3"]{background:var(--slot-3-bg);border-color:var(--slot-3-border);color:var(--slot-3-text)}.daygrid-booked[data-tone="4"]{background:var(--slot-4-bg);border-color:var(--slot-4-border);color:var(--slot-4-text)}.daygrid-now{background:var(--accent);width:2px;position:absolute;top:0;bottom:0;box-shadow:0 0 0 1px #fff9}.legend{color:var(--muted-2);align-items:center;gap:.4rem;margin:0;font-size:.8rem;display:flex}.legend-key{border:1px solid;border-radius:.2rem;width:.85rem;height:.85rem;display:inline-block}.legend-key[data-kind=free]{background:var(--free-bg);border-color:var(--free-border)}.legend-key[data-kind=booked]{background:var(--slot-0-bg);border-color:var(--slot-0-border)}.legend-key+.legend-key{margin-left:.6rem}.booking-dialog{border-radius:var(--radius-lg);box-shadow:var(--shadow-hover);border:none;width:min(28rem,100vw - 2rem);padding:0}.booking-dialog::backdrop{background:#07243673}.booking-dialog-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:1rem;padding:1.25rem 1.5rem 1rem;display:flex}.booking-dialog-header h2{margin:0}.dialog-close{color:var(--muted-2);cursor:pointer;background:0 0;border:none;padding:.2rem .4rem;font-size:1.4rem;line-height:1}.dialog-close:hover{color:var(--ink)}.booking-dialog-sub{color:var(--muted-2);margin:0;padding:.9rem 1.5rem 0;font-size:.88rem;font-weight:500}.booking-form{flex-direction:column;gap:1.1rem;padding:.9rem 1.5rem 1.5rem;display:flex}.field-row{gap:1rem;display:flex}.field-row .field{flex:1}.booking-form input,.booking-form select{width:100%}.booking-dialog-actions{justify-content:flex-end;gap:.75rem;margin-top:.25rem;display:flex}.booking-list{flex-direction:column;gap:.6rem;margin:0;padding:0;list-style:none;display:flex}.booking-row{background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--shut-border);border-radius:var(--radius);box-shadow:var(--shadow-sm);flex-wrap:wrap;align-items:center;gap:.6rem 1rem;padding:.85rem 1.1rem;display:flex}.booking-row[data-state=check-in-open]{border-left-color:var(--busy-border)}.booking-row[data-state=claimed],.booking-row[data-state=in-progress]{border-left-color:var(--free-border)}.booking-row[data-state=released]{border-left-color:var(--danger-border)}.booking-row-main{flex-direction:column;gap:.1rem;min-width:12rem;margin-right:auto;display:flex}.booking-row-room{color:var(--brand-dark);font-weight:700}.booking-row-room a{color:inherit;text-decoration:none}.booking-row-room a:hover{color:var(--brand-bright);text-decoration:underline}.booking-row-when{color:var(--muted-2);font-size:.86rem}.booking-row-actions{flex-wrap:wrap;gap:.5rem;display:flex}.booking-row-actions .inline-form{margin:0}.booking-row-actions button,.booking-row-actions .btn-secondary{padding:.4rem .85rem;font-size:.85rem}.empty-state{border:1px dashed var(--border-strong);border-radius:var(--radius);text-align:center;color:var(--muted-2);background:var(--surface);padding:1.25rem}.notice{border:1px solid var(--warn-border);border-radius:var(--radius-sm);background:var(--warn-bg);color:var(--warn-text);margin:0 0 .9rem;padding:.65rem .95rem;font-size:.88rem}.form-error{border:1px solid var(--danger-border);border-radius:var(--radius-sm);color:var(--danger-ink);background:#fdf1f1;margin:0 0 .25rem;padding:.65rem .95rem;font-size:.88rem;font-weight:500}.booking-duration{min-height:1.2rem;color:var(--muted-2);margin:0;font-size:.84rem;font-weight:600}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}form{flex-wrap:wrap;align-items:end;gap:.75rem;margin-block:1rem 0;display:flex}form.auth-form{flex-direction:column;align-items:stretch}.field{flex-direction:column;gap:.3rem;display:flex}label{color:var(--muted);font-size:.82rem;font-weight:500}input{min-width:10rem;font:inherit;color:var(--ink);border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:#fff;padding:.55rem .75rem;font-size:.95rem}.auth-form input{min-width:0}select{min-width:10rem;font:inherit;color:var(--ink);border:1px solid var(--border-strong);border-radius:var(--radius-sm);appearance:none;cursor:pointer;background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M5 8l5 5 5-5' stroke='%236b7686' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right .75rem center;background-repeat:no-repeat;background-size:.8rem;padding:.55rem 2.25rem .55rem .75rem;font-size:.95rem}select:invalid{color:var(--muted-2)}select:focus-visible,input:focus-visible{outline:2px solid var(--brand-bright);outline-offset:1px;border-color:var(--brand-bright)}button{font:inherit;border-radius:var(--radius-sm);background:var(--brand);color:#fff;cursor:pointer;border:none;padding:.55rem 1.2rem;font-size:.95rem;font-weight:600;transition:background .15s}button:hover{background:var(--brand-dark)}button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn-secondary{background:var(--surface);color:var(--brand-dark);border:1px solid var(--border-strong)}.btn-secondary:hover{background:var(--surface-sunken);border-color:var(--brand-bright);color:var(--brand-bright)}.btn-danger{color:var(--danger-ink)}.btn-danger:hover{border-color:var(--danger-ink);color:var(--danger-ink);background:#fdf1f1}button:disabled{opacity:.45;cursor:not-allowed}button:disabled:hover{background:var(--brand)}.btn-primary{font:inherit;border-radius:var(--radius-sm);background:var(--brand);color:#fff;white-space:nowrap;cursor:pointer;border:none;justify-content:center;align-items:center;gap:.4rem;padding:.55rem 1.2rem;font-size:.95rem;font-weight:600;text-decoration:none;transition:background .15s;display:inline-flex}.btn-primary:hover{background:var(--brand-dark);color:#fff}.btn-primary:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.inline-form{margin:0;display:inline-flex}.auth-card{max-width:26rem;margin:0 auto}.auth-card h1,.auth-card>p{text-align:center}.auth-card form{margin-block:1.25rem}.auth-footnote{text-align:center;margin:0;font-size:.9rem}.account-line{color:var(--muted);flex-wrap:wrap;align-items:center;gap:.9rem;display:flex}[role=alert]{background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-text);border-radius:var(--radius-sm);align-items:flex-start;gap:.5rem;margin-block:0 1rem;padding:.65rem .9rem;font-size:.9rem;display:flex}.readme-lead{border-bottom:1px solid var(--border);margin-bottom:2.25rem;padding-bottom:1.75rem}.readme-lead>*{max-width:52rem}.readme-lead h1{margin-bottom:.75rem;font-size:2.1rem;line-height:1.2}.readme-lead p{margin-bottom:0;font-size:1.08rem;line-height:1.7}.readme-columns{grid-template-columns:repeat(2,1fr);gap:1.25rem;display:grid}.readme-card.is-wide{grid-column:1/-1}.readme-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:1.35rem 1.5rem 1.45rem}.readme-card>:last-child{margin-bottom:0}.readme-card h2{border-bottom:2px solid var(--accent-soft);align-items:baseline;gap:.55rem;margin:0 0 .9rem;padding-bottom:.6rem;font-size:1.05rem;display:flex}.readme-card h2:before{content:"";background:var(--accent);border-radius:50%;flex:none;width:.5rem;height:.5rem}.readme-card p{font-size:.94rem;line-height:1.65}.readme-card table{border-collapse:collapse;table-layout:fixed;width:100%;margin-bottom:1rem;font-size:.86rem}.readme-card th,.readme-card td{border-bottom:1px solid var(--border);text-align:left;vertical-align:top;padding:.5rem .6rem}.readme-card thead th{background:var(--surface-sunken);color:var(--brand-dark);letter-spacing:.03em;text-transform:uppercase;font-size:.74rem;font-weight:700}.readme-card tbody tr:last-child :is(td,th){border-bottom:none}.readme-card tbody td:first-child{color:var(--muted-2)}.readme-card strong{color:var(--brand-dark)}@media (width<=52rem){.readme-columns{grid-template-columns:1fr}}main :is(h1,h2,h3){color:var(--brand-dark)}main pre{background:var(--surface-sunken);border:1px solid var(--border);border-radius:var(--radius-sm);padding:1rem;overflow-x:auto}main code{background:var(--surface-sunken);border-radius:.3rem;padding:.1rem .35rem;font-size:.9em}main pre code{background:0 0;padding:0}
