:root{--ink: #1a1a1a;--ink-light: #4a4a4a;--ink-lighter: #7a7a7a;--ink-faint: #b0b0b0;--bg: #fffff8;--bg-warm: #fafaf2;--surface: #fffff8;--rule: #e0ddd4;--rule-strong: #c8c4b8;--sidebar-bg: #f5f4ee;--accent: #8b0000;--accent-muted: #b85450;--weekend-bg: #f4f3ef;--pass-text: #4a6a4a;--pass-bg: #e8f0e8;--state-md: #5a7a9a;--state-va: #6a8a5a;--state-ct: #8a7a5a;--font-body: "Crimson Pro", Georgia, serif;--font-ui: "Source Sans 3", system-ui, sans-serif;--font-mono: "JetBrains Mono", monospace;--shadow-sm: 0 1px 2px rgba(26,26,26,.06)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-ui);background:var(--bg);color:var(--ink);line-height:1.5;-webkit-font-smoothing:antialiased}.fc{--fc-border-color: var(--rule);--fc-today-bg-color: var(--bg-warm);--fc-page-bg-color: var(--surface);--fc-neutral-bg-color: var(--bg);--fc-event-border-color: transparent;font-family:var(--font-ui)}.fc .fc-toolbar-title{font-family:var(--font-body);font-size:1.4rem;font-weight:300;color:var(--ink);letter-spacing:-.3px}.fc .fc-col-header-cell-cushion{font-family:var(--font-ui);font-size:.7rem;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:var(--ink-lighter);padding:.6em 0}.fc .fc-button{font-family:var(--font-ui);font-size:.75rem;font-weight:600;letter-spacing:.8px;text-transform:uppercase;border-radius:0;padding:.4em .9em;border:1px solid var(--rule-strong);background:var(--surface);color:var(--ink-light)}.fc .fc-button:hover{background:var(--bg-warm);color:var(--ink)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background:var(--ink);border-color:var(--ink);color:var(--bg)}.fc .fc-event{border-radius:0;border-left:3px solid;font-size:.78rem;padding:2px 6px;cursor:pointer;background:var(--bg-warm);color:var(--ink)}.fc .fc-timegrid-event .fc-event-title{font-family:var(--font-ui);font-weight:600;font-size:.78rem}.fc .fc-timegrid-event .fc-event-time{font-family:var(--font-mono);font-size:.7rem;font-weight:400;color:var(--ink-lighter)}.fc .fc-daygrid-event{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fc .fc-timegrid-slot-label-cushion{font-family:var(--font-mono);font-size:.7rem;color:var(--ink-faint)}.fc .fc-daygrid-day-number{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-lighter);padding:4px 8px}.fc .fc-day-today .fc-daygrid-day-number{color:var(--accent);font-weight:500}.fc .fc-scrollgrid{border:none}.fc .fc-day-sat,.fc .fc-day-sun{background:var(--weekend-bg)}.fc .fc-day-today.fc-day-sat,.fc .fc-day-today.fc-day-sun{background:var(--bg-warm)}.fc .fc-col-header-cell.fc-day-sat .fc-col-header-cell-cushion,.fc .fc-col-header-cell.fc-day-sun .fc-col-header-cell-cushion{color:var(--ink-faint)}.fc .fc-scrollgrid td{border-color:var(--rule)}.app{display:flex;flex-direction:column;min-height:100vh}.header{display:flex;align-items:baseline;justify-content:space-between;padding:.9rem 1.5rem .7rem;border-bottom:1px solid var(--rule)}.header-left{display:flex;align-items:baseline;gap:1rem}.header h1{font-family:var(--font-ui);font-size:.65rem;font-weight:600;letter-spacing:2.8px;text-transform:uppercase;color:var(--ink-light)}.header .subtitle{font-family:var(--font-body);font-size:.95rem;font-weight:400;font-style:italic;color:var(--ink-lighter)}.header-right{display:flex;align-items:center;gap:1rem}.sync-badge{display:flex;align-items:center;gap:.4rem;font-family:var(--font-mono);font-size:.7rem;color:var(--ink-faint)}.sync-dot{width:6px;height:6px;border-radius:50%;background:var(--pass-text)}.sync-dot.stale{background:var(--state-ct)}.sync-dot.error{background:var(--accent)}.main-content{display:flex;flex:1;overflow:hidden}.calendar-container{flex:1;padding:1rem 1.5rem;overflow-y:auto}.detail-panel{width:340px;background:var(--surface);border-left:1px solid var(--rule);padding:1.25rem;overflow-y:auto}.detail-panel h2{font-family:var(--font-ui);font-size:.65rem;font-weight:600;letter-spacing:2px;text-transform:uppercase;color:var(--ink-light);margin-bottom:1rem;padding-bottom:.5rem;border-bottom:1px solid var(--rule)}.detail-field{margin-bottom:.75rem}.detail-field label{display:block;font-family:var(--font-ui);font-size:.6rem;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:var(--ink-faint);margin-bottom:.1rem}.detail-field .value{font-family:var(--font-body);font-size:.95rem;line-height:1.4;color:var(--ink)}.detail-field .value-mono{font-family:var(--font-mono);font-size:.82rem;color:var(--ink-light)}.detail-field a{color:var(--ink-light);text-decoration:underline;text-decoration-color:var(--rule-strong);text-underline-offset:2px}.detail-field a:hover{color:var(--ink);text-decoration-color:var(--ink)}.maps-link{display:inline-flex;align-items:center;gap:.3rem;font-family:var(--font-ui);font-size:.75rem;font-weight:600;color:var(--ink-light);text-decoration:none;border-bottom:1px solid var(--rule-strong);padding-bottom:1px;margin-top:.25rem}.maps-link:hover{color:var(--ink);border-bottom-color:var(--ink)}.detail-actions{display:flex;gap:.5rem;margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--rule)}.btn{font-family:var(--font-ui);font-size:.72rem;font-weight:600;letter-spacing:.8px;text-transform:uppercase;padding:.5rem 1rem;border:1px solid var(--rule-strong);border-radius:0;background:var(--surface);color:var(--ink-light);cursor:pointer}.btn:hover{background:var(--bg-warm);color:var(--ink)}.btn-primary{background:var(--ink);border-color:var(--ink);color:var(--bg)}.btn-primary:hover{background:var(--ink-light)}.btn-muted{color:var(--ink-faint);border-color:var(--rule);cursor:not-allowed;opacity:.6}.btn-muted:hover{background:var(--surface);color:var(--ink-faint)}.btn-danger{color:var(--accent);border-color:var(--accent-muted)}.btn-danger:hover{background:#faf5f5}.close-btn{float:right;background:none;border:none;font-size:1.1rem;cursor:pointer;color:var(--ink-faint);padding:0;line-height:1}.close-btn:hover{color:var(--ink)}.modal-overlay{position:fixed;inset:0;background:#1a1a1a59;display:flex;align-items:center;justify-content:center;z-index:1000}.modal{background:var(--surface);border:1px solid var(--rule);padding:1.5rem;width:420px;max-width:95vw;max-height:80vh;overflow-y:auto}.modal h2{font-family:var(--font-ui);font-size:.65rem;font-weight:600;letter-spacing:2px;text-transform:uppercase;color:var(--ink-light);margin-bottom:1.25rem;padding-bottom:.5rem;border-bottom:1px solid var(--rule)}.form-group{margin-bottom:1rem}.form-group label{display:block;font-family:var(--font-ui);font-size:.65rem;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:var(--ink-lighter);margin-bottom:.3rem}.form-group input,.form-group select{width:100%;padding:.5rem .6rem;font-family:var(--font-body);font-size:.95rem;border:1px solid var(--rule);border-radius:0;background:var(--surface);color:var(--ink)}.form-group input:focus,.form-group select:focus{outline:none;border-color:var(--ink-light)}.search-results{max-height:200px;overflow-y:auto;border:1px solid var(--rule);margin-top:.25rem}.search-result{padding:.5rem .75rem;cursor:pointer;border-bottom:1px solid var(--rule);font-size:.85rem}.search-result:last-child{border-bottom:none}.search-result:hover{background:var(--bg-warm)}.search-result .project-id{font-family:var(--font-mono);font-size:.78rem;font-weight:500;color:var(--ink)}.search-result .address{font-family:var(--font-body);font-size:.85rem;color:var(--ink-lighter)}.search-result .jurisdiction{font-family:var(--font-ui);font-size:.7rem;color:var(--ink-faint)}.state-dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:4px}.state-dot.md{background:var(--state-md)}.state-dot.va{background:var(--state-va)}.state-dot.ct{background:var(--state-ct)}.event-md{border-left-color:var(--state-md)!important}.event-va{border-left-color:var(--state-va)!important}.event-ct{border-left-color:var(--state-ct)!important}.fc .event-cancelled{opacity:.55}.fc .event-cancelled .fc-event-title{text-decoration:line-through}@media(max-width:768px){.main-content{flex-direction:column}.detail-panel{width:100%;border-left:none;border-top:1px solid var(--rule);max-height:50vh}.header{flex-direction:column;gap:.25rem}}
