:root{--available:#51cf66;--blocked:#74c0fc;--confirmed:#ffe066;--reserved:#fd7e14;--provisional:#f783ac;--unavailable:#868e96;--past-a:#f1f3f5;--past-b:#dee2e6;--past-text:#868e96;--border:#dee2e6;--text:#1a1a1a;--muted:#6b7280}*{box-sizing:border-box}body{color:var(--text);background:#fff;margin:0;font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}a{color:#1c7ed6}nav.topnav{border-bottom:1px solid var(--border);background:#f8f9fa;align-items:center;gap:1.5rem;padding:.35rem 1.5rem;display:flex}nav.topnav .brand{margin-right:auto;font-weight:700}nav.topnav a{color:var(--text);font-size:.95rem;text-decoration:none}nav.topnav a:hover{text-decoration:underline}nav.topnav .logout-link{color:var(--muted);font-size:.85rem}.login-page{text-align:center;max-width:320px;margin:4rem auto}.login-form{text-align:left;flex-direction:column;gap:1rem;margin-top:1.5rem;display:flex}.login-form label{color:var(--muted);flex-direction:column;gap:.3rem;font-size:.9rem;display:flex}.login-form input{border:1px solid var(--border);border-radius:4px;padding:.5rem .6rem;font-size:1rem}.login-form button{color:#0a4a45;cursor:pointer;background:#40e0d0;border:none;border-radius:4px;padding:.6rem;font-size:1rem;font-weight:600}.login-form button:hover{background:#33cabb}.login-error{color:#e03131;margin:0;font-size:.9rem}main{max-width:1400px;margin:0 auto;padding:1.5rem}main:has(.grid-page){max-width:100%}h1{margin-bottom:.25rem;font-size:1.4rem}.subtitle{color:var(--muted);margin-top:0;margin-bottom:1.25rem}.legend{flex-wrap:wrap;gap:1rem;margin-bottom:1.25rem;font-size:.85rem;display:flex}.grid-page .legend{margin-bottom:.4rem}.grid-page .subtitle{margin-top:0;margin-bottom:.4rem}.legend-item{align-items:center;gap:.4rem;display:flex}.legend-swatch{border-radius:3px;width:.85rem;height:.85rem;display:inline-block}.filter-form{border:1px solid var(--border);background:#f8f9fa;border-radius:8px;flex-wrap:wrap;align-items:flex-end;gap:1rem;margin-bottom:1.5rem;padding:1rem;display:flex}.filter-checkbox-stack{flex-direction:column;gap:.3rem;display:flex}.filter-form label{color:var(--muted);flex-direction:column;gap:.25rem;font-size:.8rem;display:flex}.filter-form input{border:1px solid var(--border);border-radius:4px;padding:.4rem .5rem;font-size:.9rem}.filter-form input.input-narrow{width:3.2rem;padding-left:.3rem;padding-right:.2rem}.filter-form button{color:#fff;cursor:pointer;background:#1c7ed6;border:none;border-radius:4px;height:fit-content;padding:.45rem 1rem;font-size:.9rem}.property-list{margin:0;padding:0;list-style:none}.property-list a{text-decoration:none}.property-list li{border-bottom:1px solid var(--border);padding:.6rem 0}.explainer{max-width:760px;margin-top:2rem}.explainer h2{margin-bottom:.5rem;font-size:1.15rem}.explainer h3{margin:1.5rem 0 .5rem;font-size:1rem}.explainer p,.explainer li{color:var(--text);line-height:1.6}.explainer ul,.explainer ol{padding-left:1.25rem}.explainer-steps{padding-left:1.25rem;list-style:decimal}.explainer-steps li{margin-bottom:.5rem}.status-badge{white-space:nowrap;border-radius:999px;padding:.1rem .55rem;font-size:.78rem;font-weight:600;display:inline-block}.property-picker{margin-bottom:1.25rem;position:relative}.property-picker-input-wrap{position:relative}.property-picker-input{border:1px solid var(--border);appearance:none;border-radius:6px;width:100%;padding:.6rem 2.2rem .6rem .7rem;font-size:1rem}.property-picker-input:focus{outline-offset:-1px;outline:2px solid #1c7ed6}.property-picker-clear{width:1.6rem;height:1.6rem;color:var(--muted);cursor:pointer;-webkit-tap-highlight-color:transparent;background:#f1f3f5;border:none;border-radius:50%;font-size:1.1rem;line-height:1;position:absolute;top:50%;right:.35rem;transform:translateY(-50%)}.property-picker-list{z-index:40;border:1px solid var(--border);background:#fff;border-radius:6px;max-width:360px;max-height:320px;margin:0;padding:.25rem;list-style:none;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto;box-shadow:0 4px 16px #0000001f}.property-picker-empty{color:var(--muted);padding:.6rem .7rem;font-size:.9rem}.property-picker-option{text-align:left;width:100%;color:var(--text);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;border-radius:4px;padding:.55rem .6rem;font-size:.95rem;display:block}.property-picker-option.highlighted,.property-picker-option:hover{background:#e7f5ff}.month-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:1.25rem;display:grid}.month{border:1px solid var(--border);border-radius:8px;padding:.75rem}.month h3{margin:0 0 .5rem;font-size:.95rem}.month-days{grid-template-columns:repeat(7,1fr);gap:3px;display:grid}.day-cell{aspect-ratio:1;cursor:pointer;-webkit-tap-highlight-color:transparent;border:none;border-radius:3px;justify-content:center;align-items:center;margin:0;font-family:inherit;font-size:.7rem;display:flex}.day-cell.pad{cursor:default}.day-cell.selected{outline-offset:1px;outline:2px solid #1c7ed6}.detail-sheet{z-index:50;border-top:1px solid var(--border);max-height:42vh;padding:.85rem 1rem calc(.85rem + env(safe-area-inset-bottom,0px));background:#fff;border-radius:12px 12px 0 0;position:fixed;bottom:0;left:0;right:0;overflow-y:auto;box-shadow:0 -4px 16px #00000026}.detail-sheet-header{background:#fff;justify-content:space-between;align-items:flex-start;gap:.75rem;display:flex;position:sticky;top:0}.detail-sheet-close{color:var(--text);cursor:pointer;background:#f1f3f5;border:none;border-radius:50%;flex-shrink:0;width:1.75rem;height:1.75rem;font-size:1.1rem;line-height:1}.detail-panel-date{margin-bottom:.6rem;font-weight:700}.detail-block{border-top:1px solid var(--border);padding:.5rem 0;font-size:.9rem;line-height:1.5}.detail-block:first-of-type{border-top:none;padding-top:0}.detail-block-header{margin-bottom:.1rem;font-weight:700}.day-cell.available{background:var(--available);color:#fff}.day-cell.blocked{background:var(--blocked);color:#1a1a1a}.day-cell.confirmed{background:var(--confirmed);color:#1a1a1a}.day-cell.reserved{background:var(--reserved);color:#fff}.day-cell.provisional{background:var(--provisional);color:#fff}.day-cell.unavailable{background:var(--unavailable);color:#fff}.day-cell.past{background:repeating-linear-gradient(45deg, var(--past-a), var(--past-a) 4px, var(--past-b) 4px, var(--past-b) 8px);color:var(--past-text)}.day-cell.split{color:#1a1a1a;text-shadow:0 0 3px #ffffffe6,0 0 3px #ffffffe6;font-weight:700}.day-cell.pad{background:0 0}.grid-scroll{border:1px solid var(--border);border-radius:8px;overflow-x:auto}table.timeline{border-collapse:separate;border-spacing:0;white-space:nowrap;font-size:.75rem}table.timeline th,table.timeline td{border:1px solid var(--border);text-align:center;padding:0}table.timeline th.prop-name,table.timeline td.prop-name{text-align:left;z-index:1;white-space:nowrap;background:#fff;width:30ch;max-width:30ch;padding:.05rem .4rem;position:sticky;left:0;overflow:hidden}table.timeline td.prop-name{align-items:center;display:flex}.prop-name-text{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;display:block;overflow:hidden}.prop-name-view{white-space:nowrap;flex:none;margin-left:.5em}table.timeline thead th.prop-name{z-index:2;background:#f8f9fa}table.timeline th.day-header{background:#f8f9fa;min-width:16px;padding:.1rem .05rem;font-size:.68rem;font-weight:500}table.timeline th.day-header.day-of-week{color:var(--muted);padding-bottom:0;font-size:.6rem;font-weight:400}table.timeline td.cell{cursor:pointer}table.timeline td.cell.selected{outline-offset:-2px;outline:2px solid #1c7ed6}table.timeline th.meta-header{white-space:nowrap;text-align:left;background:#f8f9fa;padding:.02rem .2rem;font-size:.72rem;font-weight:600}.column-filter{width:100%;max-width:100px;display:block;position:relative}table.timeline th.prop-name .column-filter{max-width:none}.column-filter-label{white-space:nowrap;color:var(--text);pointer-events:none;font-size:.72rem;font-weight:600;display:block}.column-filter:has(.column-filter-select option:checked:not([value=""])) .column-filter-label{color:#1c7ed6}.column-filter-select{opacity:0;cursor:pointer;border:none;width:100%;height:100%;padding:0;font-size:.7rem;position:absolute;inset:0}.range-filter{max-width:none;position:static}.grid-count-line{flex-wrap:wrap;align-items:center;gap:1rem;min-height:1.8rem;margin-bottom:0;display:flex;position:relative}.grid-count-line .subtitle{margin:0}.range-filter-inputs{gap:.2rem;display:flex}.range-filter-inputs input,.range-filter-inputs select{border:1px solid var(--border);width:3.6rem;min-width:0;color:var(--text);background:#fff;border-radius:4px;padding:.05rem .1rem;font-family:inherit;font-size:.68rem}table.timeline td.meta-cell{text-align:left;white-space:nowrap;padding:.05rem .35rem;font-size:.75rem}table.timeline td.meta-cell-center{text-align:center}table.timeline td.meta-narrow{white-space:nowrap;text-overflow:ellipsis;max-width:80px;overflow:hidden}table.timeline td.cell{width:16px;height:15px}table.timeline td.cell.available{background:var(--available)}table.timeline td.cell.blocked{background:var(--blocked)}table.timeline td.cell.confirmed{background:var(--confirmed)}table.timeline td.cell.reserved{background:var(--reserved)}table.timeline td.cell.provisional{background:var(--provisional)}table.timeline td.cell.unavailable{background:var(--unavailable)}table.timeline td.cell.past{background:repeating-linear-gradient(45deg, var(--past-a), var(--past-a) 3px, var(--past-b) 3px, var(--past-b) 6px)}table.timeline th.day-header.target-range{color:#b06000;background:#f59f0033;font-weight:700}table.timeline td.cell.target-range{box-shadow:inset 0 0 0 2px #f59f00}.result-card{border:1px solid var(--border);border-radius:8px;margin-bottom:.75rem;padding:.85rem 1rem}.result-card h4{margin:0 0 .25rem}.result-card .meta{color:var(--muted);font-size:.85rem}
