:root{--bg: #0b1220;--panel: #111a2e;--panel-2: #17223a;--border: #24314d;--text: #e2e8f0;--muted: #94a3b8;--accent: #38bdf8;--accent-strong: #0ea5e9;--warn: #fbbf24;--danger: #f87171;color-scheme:dark;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;color:var(--text);background:var(--bg)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}.app{display:flex;flex-direction:column;height:100%}.logo{font-size:20px}.modes{display:flex;gap:4px;background:var(--bg);padding:3px;border-radius:8px}.modes button{border:none;background:transparent}.modes button.active{background:var(--accent-strong);color:#fff}.modes kbd{opacity:.6;margin-left:4px}.main{flex:1;display:flex;min-height:0;position:relative}.map-wrap{flex:1;min-width:0;position:relative;display:flex}.map{flex:1;min-width:0}.imagery-control{position:absolute;top:10px;right:10px;z-index:2;flex-direction:row;align-items:center;gap:8px;padding:6px 10px;border-radius:8px;font-size:12px;color:var(--text);background:#111a2ee0;border:1px solid var(--border)}.imagery-control input{width:110px;padding:0;accent-color:var(--accent-strong)}.imagery-value{width:30px;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}.sidebar{width:360px;flex-shrink:0;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:12px;background:var(--bg);border-left:1px solid var(--border)}@media(max-width:800px){.main{flex-direction:column}.map-wrap{flex:none;height:55vh}.sidebar{width:100%;border-left:none;border-top:1px solid var(--border);flex:1}.modes kbd{display:none}}button,input,select,textarea{font:inherit;color:inherit}button{background:var(--panel-2);border:1px solid var(--border);border-radius:6px;padding:6px 10px;cursor:pointer;white-space:nowrap}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.45;cursor:default}button.primary{background:var(--accent-strong);border-color:var(--accent-strong);color:#fff;font-weight:600}button.danger{color:var(--danger);margin-top:8px}button.link{background:none;border:none;padding:0;color:var(--accent);text-align:left}button.icon{padding:2px 8px}input,select,textarea{background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:6px 8px;width:100%}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:-1px}label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}label.block{margin-top:10px}kbd{font-family:ui-monospace,monospace;font-size:11px;border:1px solid var(--border);border-radius:4px;padding:0 4px}.card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px}.card.highlight{border-color:var(--accent-strong);box-shadow:0 0 0 1px #0ea5e940}.card h3{margin:0 0 8px;font-size:14px;display:flex;align-items:center;gap:8px}.card h4{margin:12px 0 4px;font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.muted{color:var(--muted);margin:4px 0 8px}.small{font-size:12px}.warn{color:var(--warn);margin:6px 0;font-size:12px}.cap{text-transform:capitalize}.button-row{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}details.card summary{list-style:none;cursor:pointer;display:flex;align-items:baseline;justify-content:space-between}details.card summary::-webkit-details-marker{display:none}details.card summary h3{margin:0}details.card summary h3:before{content:"▸";color:var(--muted)}details.card[open] summary h3:before{content:"▾"}.kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:10px}.kpi-value{font-size:24px;font-weight:700;line-height:1.1}.kpi-label{font-size:11px;color:var(--muted)}.legend{display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:999px;font-size:12px}.chip.off{opacity:.4}.chip b{font-weight:700}.swatch{width:10px;height:10px;border-radius:3px;display:inline-block}.bars{margin-top:12px;display:flex;flex-direction:column;gap:5px}.bar-row{display:grid;grid-template-columns:18px 1fr 72px;gap:8px;align-items:center;font-size:12px}.bar-label{font-weight:700}.bar{display:flex;height:10px;border-radius:3px;overflow:hidden;background:var(--panel-2)}.bar span{height:100%}.bar-num{color:var(--muted);text-align:right}.row-inputs{display:grid;grid-template-columns:1fr 1fr auto auto;gap:6px;align-items:end}.fit-list{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:1fr 1fr;gap:4px}.fit-list button{width:100%;display:flex;justify-content:space-between;gap:6px;font-size:12px}.fit-list button span{color:var(--muted)}.boat-search{width:100%}.boat-results{list-style:none;padding:0;margin:6px 0 0;display:grid;gap:4px}.boat-results button{width:100%;display:flex;align-items:center;gap:8px;text-align:left;font-size:12px}.boat-results .swatch{flex:none}.boat-result-name{flex:1;min-width:0;display:flex;flex-direction:column}.boat-result-name>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.panel-head{display:flex;justify-content:space-between;align-items:flex-start}.status-pill{font-size:11px;color:#0b1220;font-weight:700;padding:2px 8px;border-radius:999px}.facts{display:grid;grid-template-columns:90px 1fr;gap:4px 8px;margin:6px 0;font-size:13px}.facts dt{color:var(--muted)}.facts dd{margin:0}.occupancy{background:var(--panel-2);border-radius:8px;padding:8px 10px;margin-top:8px}.boat-name{font-weight:700;font-size:15px}.layout-item{display:flex;justify-content:space-between;align-items:center;padding:4px 0;border-bottom:1px solid var(--border);gap:8px}.layout-item .actions{display:flex;gap:4px}.layout-item .actions button{padding:2px 8px;font-size:12px}.maplibregl-ctrl-scale{background:#0f172ab3;color:#e2e8f0;border-color:#e2e8f0}.history{display:flex;gap:2px}.history button{font-size:16px;padding:3px 10px;line-height:1.2}.with-suffix{position:relative;display:block}.with-suffix input{padding-right:26px}.with-suffix .suffix{position:absolute;right:8px;top:50%;transform:translateY(-50%);color:var(--muted);font-size:12px;pointer-events:none}.form-grid h4{margin:6px 0 -2px}.next-point{display:grid;grid-template-columns:1fr 1fr auto;gap:6px;align-items:end;margin-top:10px}.segments{display:flex;flex-direction:column;gap:6px}.segment{display:grid;grid-template-columns:18px 1fr 1fr;gap:6px;align-items:end}.seg-num{color:var(--muted);font-size:12px;padding-bottom:8px}input[type=number]{-moz-appearance:textfield}input[type=number]::-webkit-inner-spin-button{opacity:.5}.role{display:flex;gap:2px;background:var(--bg);padding:3px;border-radius:8px}.role button{border:none;background:transparent;padding:4px 10px;font-size:13px}.role button.active{background:#fbbf24;color:#0b1220;font-weight:700}.readonly .actions,.readonly button.danger{display:none}.admin-zone{margin-top:12px;padding-top:10px;border-top:1px dashed var(--border)}.admin-zone h4{margin:0 0 6px}.admin-zone .danger{margin-top:0}.status-pill.removed{background:transparent;color:var(--danger);box-shadow:inset 0 0 0 1px var(--danger)}button:disabled.danger{opacity:.4}.sync{position:relative;display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);white-space:nowrap}.sync-dot{width:8px;height:8px;border-radius:50%;background:#34d399;flex:none}.sync-saving .sync-dot,.sync-loading .sync-dot{background:var(--accent);animation:sync-pulse 1s ease-in-out infinite}.sync-offline .sync-dot{background:var(--warn)}.sync-error .sync-dot{background:var(--danger)}.sync-offline,.sync-error{color:var(--text)}.sync-message{position:absolute;top:calc(100% + 10px);right:0;z-index:30;width:max-content;max-width:380px;white-space:normal;line-height:1.4;padding:8px 12px;border-radius:8px;background:var(--panel-2);border:1px solid var(--border);box-shadow:0 6px 20px #00000059;color:var(--text)}.sync-error .sync-message{border-color:var(--danger)}.sync-dismiss{border:none;background:transparent;color:var(--muted);padding:0 4px;font-size:14px}@keyframes sync-pulse{50%{opacity:.35}}@media(prefers-reduced-motion:reduce){.sync-dot{animation:none!important}}.loading{position:absolute;top:0;right:0;bottom:0;left:0;z-index:20;display:grid;place-items:center;background:#0b1220b8;color:var(--text);font-size:15px}.marina-switch{background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:4px 6px;font:inherit;font-size:13px;max-width:170px}.auth{display:grid;place-items:center;min-height:100%;padding:24px 16px;background:var(--bg)}.auth-card{width:100%;max-width:380px;padding:28px 28px 24px;background:var(--panel);border:1px solid var(--border);border-radius:12px}.auth-brand{font-weight:700;font-size:16px;margin-bottom:18px}.auth h1{font-size:20px;margin:0 0 14px}.auth form{display:flex;flex-direction:column;gap:12px}.auth label{display:flex;flex-direction:column;gap:4px;color:var(--muted);font-size:13px}.auth label input,.auth label select{color:var(--text);font-size:14px;padding:8px 10px}.auth button.primary{padding:9px 12px;font-size:14px;margin-top:4px}.auth p{margin:0 0 10px;line-height:1.45}.auth-hint{color:var(--muted);font-size:12px}.auth-error{color:var(--danger);margin:0}.auth-notice{color:var(--accent);margin:0}.auth-links{display:flex;justify-content:space-between;gap:12px;margin-top:8px;flex-wrap:wrap}.user-menu{position:relative}.user-menu summary{list-style:none;cursor:pointer;width:32px;height:32px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:700;background:var(--panel-2);border:1px solid var(--border);-webkit-user-select:none;user-select:none}.user-menu summary::-webkit-details-marker{display:none}.user-menu[open] summary,.user-menu summary:hover{border-color:var(--accent)}.user-pop{position:absolute;right:0;top:calc(100% + 6px);z-index:20;min-width:220px;padding:12px;display:flex;flex-direction:column;gap:4px;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #0006}.user-name{font-weight:600}.user-email,.user-role{color:var(--muted);font-size:12px}.user-pop button{margin-top:8px}.flag-alerts{border-color:#8b5cf6}.flag-alerts.urgent{border-color:#ef4444;box-shadow:0 0 0 1px #ef444473;animation:urgent 1.4s ease-in-out infinite}@keyframes urgent{50%{box-shadow:0 0 0 4px #ef444440}}@media(prefers-reduced-motion:reduce){.flag-alerts.urgent{animation:none}}.flag-alerts h3{margin:0 0 6px}.flag-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.flag-row{width:100%;display:grid;grid-template-columns:22px 1fr auto;gap:8px;align-items:start;text-align:left}.flag-row.emergency.open{border-color:#ef4444}.flag-main{min-width:0;font-size:13px}.flag-note-line{display:block;color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flag-meta{font-size:11px;color:var(--muted);display:flex;flex-direction:column;align-items:flex-end;gap:2px;white-space:nowrap}.flag-onit{color:#22c55e;font-weight:600}.flag-dot{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;color:#fff;font-weight:800;font-size:13px;border:2px solid #fff;flex:none}.flag-dot.emergency{background:#ef4444}.flag-dot.question{background:#8b5cf6}.slip-flags{display:flex;flex-direction:column;gap:8px;margin:8px 0}.flag-card{border:1px solid var(--border);border-left:4px solid #8b5cf6;border-radius:8px;padding:8px 10px;background:var(--panel-2)}.flag-card.emergency{border-left-color:#ef4444}.flag-card.emergency.open{border-color:#ef4444}.flag-card.resolved{opacity:.7;border-left-color:var(--muted)}.flag-card header{display:flex;align-items:center;gap:6px;font-size:13px;flex-wrap:wrap}.flag-status{margin-left:auto;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.flag-card.open .flag-status{color:#fca5a5}.flag-note{margin:6px 0;white-space:pre-wrap;font-size:14px}.flag-card a{color:var(--accent)}.flag-resolve label{margin-top:6px}.kind-toggle{display:flex;gap:4px}.kind-toggle button{flex:1}.kind-toggle button.active.question{background:#8b5cf6;border-color:#8b5cf6;color:#fff;font-weight:600}.kind-toggle button.active.emergency{background:#ef4444;border-color:#ef4444;color:#fff;font-weight:600}a.button{display:inline-flex;align-items:center;background:var(--panel-2);border:1px solid var(--border);border-radius:6px;padding:6px 10px;color:inherit;text-decoration:none;white-space:nowrap}a.button:hover{border-color:var(--accent)}.berth-page{max-width:520px;margin:0 auto;padding:16px 16px 40px;min-height:100%;font-size:16px}.berth-head{margin-bottom:14px}.berth-marina{color:var(--muted);font-size:14px}.berth-head h1{margin:2px 0 0;font-size:30px}.call-emergency{display:flex;flex-direction:column;gap:4px;padding:14px 16px;border-radius:12px;margin-bottom:16px;background:#7f1d1d;border:2px solid #ef4444;color:#fff;text-decoration:none}.call-emergency strong{font-size:20px}.call-emergency span{font-size:14px;color:#fecaca}.berth-choices{display:flex;flex-direction:column;gap:12px}.choice{display:flex;align-items:center;gap:14px;padding:18px 16px;border-radius:12px;text-align:left;white-space:normal;border-width:2px;min-height:84px}.choice strong{display:block;font-size:20px}.choice small{display:block;color:var(--muted);font-size:14px;margin-top:2px}.choice.emergency{border-color:#ef4444}.choice.question{border-color:#8b5cf6}.choice-icon{flex:none;width:44px;height:44px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:26px;font-weight:800;color:#fff}.choice.emergency .choice-icon{background:#ef4444}.choice.question .choice-icon{background:#8b5cf6}.berth-card{background:var(--panel);border:2px solid var(--border);border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:12px}.berth-card.emergency{border-color:#ef4444}.berth-card.question{border-color:#8b5cf6}.berth-card.sent{border-color:#22c55e}.berth-card h2{margin:0;font-size:22px}.berth-card label{font-size:14px}.berth-card textarea,.berth-card input[type=text],.berth-card input[type=tel],.berth-card input:not([type]){font-size:16px;padding:10px;border:1px solid var(--border);border-radius:8px}.categories{border:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px}.categories legend{font-size:14px;color:var(--muted);margin-bottom:6px}.categories label{flex-direction:row;align-items:center;gap:10px;font-size:16px;color:var(--text);padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--panel-2)}.categories label.picked{border-color:var(--accent)}.categories input{width:20px;height:20px;margin:0}.contact{display:grid;grid-template-columns:1fr 1fr;gap:10px}@media(max-width:380px){.contact{grid-template-columns:1fr}}.send{font-size:18px;font-weight:700;padding:14px;color:#fff;border:none;border-radius:10px}.send.emergency{background:#ef4444}.send.question{background:#8b5cf6}.back{align-self:flex-start}.berth-error{color:#fca5a5;margin:0}.qr-sheet{padding:16px;overflow:auto;height:100%}.qr-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px;color:var(--muted)}.qr-toolbar strong{color:var(--text)}.qr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}.qr-card{margin:0;background:#fff;color:#0b1220;border:1px dashed #94a3b8;border-radius:8px;padding:12px;text-align:center;break-inside:avoid;page-break-inside:avoid}.qr-card img{width:100%;max-width:200px;height:auto;display:block;margin:6px auto;image-rendering:pixelated}.qr-berth{font-size:26px;font-weight:800}.qr-card figcaption{font-size:12px;line-height:1.4}.qr-marina{margin-top:4px;color:#475569}.billing{display:flex;flex-direction:column;height:100%}.billing-error{padding:0 16px}.billing-body{flex:1;display:flex;min-height:0}.billing-list{flex:1;min-width:0;overflow:auto;padding:16px}.billing-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;margin-bottom:12px}.filters{display:flex;gap:2px;background:var(--panel);padding:3px;border-radius:8px;border:1px solid var(--border)}.filters button{border:none;background:transparent}.filters button.active{background:var(--panel-2);color:var(--text)}.billing-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.billing-actions input[type=month]{width:auto}label.inline{flex-direction:row;align-items:center}.setup-hint{margin:0 0 12px;border-color:var(--warn)}.run-report{position:relative;margin-bottom:12px;padding-right:32px}.run-report .close{position:absolute;top:8px;right:10px}.drafts-bar{display:flex;align-items:center;gap:10px;margin:0 0 10px;color:var(--muted)}.chase-bar{flex-wrap:wrap;gap:6px 20px}.chase-bar>span{display:inline-flex;align-items:center;gap:10px}.billing-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:0 0 12px}.billing-stats .stat{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text)}.billing-stats button.stat:hover{border-color:var(--accent)}.billing-stats .stat strong{font-size:18px;font-variant-numeric:tabular-nums}.stat-label{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.stat-sub{font-size:12px;color:var(--muted)}.billing-stats .stat-warn strong{color:var(--warn)}@media(max-width:700px){.billing-stats{grid-template-columns:1fr 1fr}}.empty{padding:24px 0}.invoice-table{width:100%;border-collapse:collapse;font-size:13px}.invoice-table th{text-align:left;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;padding:6px 8px;border-bottom:1px solid var(--border)}.invoice-table td{padding:8px;border-bottom:1px solid var(--border);white-space:nowrap}.invoice-table tbody tr{cursor:pointer}.invoice-table tbody tr:hover,.invoice-table tbody tr:focus{background:var(--panel);outline:none}.invoice-table tbody tr.selected{background:var(--panel-2)}.invoice-table tfoot td{color:var(--muted);border-bottom:none}.num{text-align:right;font-variant-numeric:tabular-nums}td.overdue{color:var(--warn)}.badge{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;background:var(--panel-2);color:var(--muted)}.badge.open{background:#38bdf826;color:var(--accent)}.badge.paid{background:#34d39926;color:#34d399}.badge.overdue{background:#fbbf2426;color:var(--warn)}.badge.void,.badge.uncollectible{text-decoration:line-through}.invoice-panel{width:560px;max-width:100%;flex:none;overflow:auto;border-left:1px solid var(--border);background:var(--panel);padding:14px 16px 24px}.invoice-panel h2{margin:0;font-size:16px}.invoice-panel h3{font-size:13px;margin:16px 0 6px}.draft-editor{display:flex;flex-direction:column;gap:10px;margin-top:10px}.lines{display:flex;flex-direction:column;gap:6px}.line-head,.line{display:grid;grid-template-columns:1fr 56px 84px 52px 92px 20px;gap:6px;align-items:center}.line-head{font-size:11px;color:var(--muted)}.stay-line{font-size:12px;padding:4px 0;border-bottom:1px dashed var(--border)}.stay-line .desc{line-height:1.3}.lines>.link{align-self:flex-start}.totals{display:grid;grid-template-columns:1fr auto;gap:2px 16px;margin:4px 0 0 auto;width:max-content;min-width:220px;font-size:13px}.totals dt{color:var(--muted)}.totals dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}.totals .total{font-weight:700;color:var(--text)}.field{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}.picker{position:relative}.picker-list{position:absolute;z-index:5;left:0;right:0;top:100%;margin:2px 0 0;padding:4px;list-style:none;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;max-height:260px;overflow:auto}.picker-list button{width:100%;text-align:left;border:none;background:transparent}.picker-list button:hover{background:var(--panel)}.notice{color:#34d399;font-size:12px}.span2{grid-column:span 2}.invoice-doc{position:relative;background:#fff;color:#0f172a;border-radius:6px;padding:24px;margin-top:12px;font-size:13px}.invoice-doc header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.doc-marina{font-weight:700;font-size:16px}.doc-title{text-align:right}.doc-title h1{margin:0;font-size:22px;letter-spacing:.04em;text-transform:uppercase;color:#334155}.doc-parties{display:flex;justify-content:space-between;gap:16px;margin:20px 0}.doc-parties dl{display:grid;grid-template-columns:auto auto;gap:2px 12px;margin:0}.doc-parties dt{color:#64748b}.doc-parties dd{margin:0;text-align:right}.doc-label{color:#64748b;font-size:11px;text-transform:uppercase;letter-spacing:.04em;margin-bottom:2px}.invoice-doc table{width:100%;border-collapse:collapse;margin-bottom:12px}.invoice-doc th{font-size:11px;color:#64748b;text-align:left;border-bottom:1px solid #cbd5e1;padding:6px 4px}.invoice-doc th.num{text-align:right}.invoice-doc td{padding:6px 4px;border-bottom:1px solid #e2e8f0;vertical-align:top}.doc-period{color:#64748b;font-size:11px}.invoice-doc .totals dt{color:#64748b}.invoice-doc .totals .total{color:#0f172a}.doc-notes{margin:16px 0 0;color:#334155;white-space:pre-wrap}.doc-stamp{position:absolute;top:90px;right:32px;transform:rotate(-12deg);border:3px solid #16a34a;color:#16a34a;font-weight:800;font-size:22px;padding:2px 12px;border-radius:6px;text-transform:uppercase;opacity:.8}.doc-stamp.void{border-color:#dc2626;color:#dc2626}.issued-status{display:flex;align-items:center;gap:10px;margin:12px 0;flex-wrap:wrap}.issued-status button{margin-left:auto}.payments ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.payments li{display:grid;grid-template-columns:1fr auto auto;gap:10px;align-items:center;font-size:13px}.payments li.cancelled{color:var(--muted);text-decoration:line-through}.invoice-email{margin:12px 0}.invoice-email ul{list-style:none;margin:0 0 8px;padding:0;font-size:13px;color:var(--muted)}.invoice-email-form{display:flex;gap:6px;flex-wrap:wrap}.invoice-email-form input{flex:1 1 200px;min-width:0}.doc-pay{margin:16px 0 0}.doc-pay p{margin:2px 0 0;white-space:pre-wrap}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.payment-form{border-top:1px solid var(--border);margin-top:12px}.billing-settings{max-width:760px;padding:16px;overflow:auto;display:flex;flex-direction:column;gap:12px}.billing-settings .form-grid{grid-template-columns:repeat(3,1fr)}.billing-settings .form-grid .wide{grid-column:1 / -1}.rate-row{display:grid;grid-template-columns:110px 120px 1fr 180px;gap:8px;align-items:center;margin-top:8px}label.check{flex-direction:row;align-items:center;gap:6px;color:var(--text);font-size:13px}label.check input{width:auto}input.search{flex:1;min-width:220px;max-width:420px}.invoice-table td.wrap,td.wrap{white-space:normal}.pre{white-space:pre-wrap}.stay-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;font-size:13px}.stay-list li{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:5px 0;border-bottom:1px solid var(--border)}.stay-list li .badge,.stay-list li .stay-status,.stay-list li>.link{margin-left:auto}.stay-status{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;background:var(--panel-2);color:var(--muted)}.stay-status.active{background:#34d39926;color:#34d399}.stay-status.reserved{background:#38bdf826;color:var(--accent)}.boat-row{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:5px 0;border-bottom:1px solid var(--border);font-size:13px}.boat-form{padding:8px 0;border-bottom:1px solid var(--border)}.owed{color:var(--warn);font-weight:600}.count-badge{display:inline-block;min-width:18px;margin-left:4px;padding:0 5px;border-radius:999px;background:var(--danger);color:#0b1220;font-size:11px;font-weight:800;line-height:18px;text-align:center}.insurance-head{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}.insurance-head .filters{align-self:flex-start;flex-wrap:wrap;max-width:100%}.insurance-table td{vertical-align:top}a.small-button{padding:3px 10px;font-size:12px}.owner-fixed{color:var(--text);font-size:13px}.insurance-line{display:block;color:var(--muted);font-size:12px;margin-top:2px}.insurance-flag{display:table;font-size:11px;font-weight:700;padding:1px 8px;border-radius:999px;margin-top:3px}.insurance-flag.expired{background:#f8717126;color:var(--danger)}.insurance-flag.expiring{background:#fbbf2426;color:var(--warn)}.insurance-flag.none{background:var(--panel-2);color:var(--muted);font-weight:600}.boat-form h4{margin:6px 0 0;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.import{flex:1;overflow:auto;padding:16px;max-width:980px;display:flex;flex-direction:column;gap:12px}.import-head{display:flex;justify-content:space-between;align-items:center}.import-head h2{margin:0;font-size:18px}.import-file{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:8px 0}.import-file input[type=file]{width:auto}.import textarea{width:100%;font-family:ui-monospace,Menlo,monospace;font-size:12px;margin-bottom:6px}.column-map{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;margin-top:8px}.import-options{grid-template-columns:repeat(3,1fr);margin-top:12px}.preview-wrap{max-height:420px;overflow:auto;border:1px solid var(--border);border-radius:6px;margin:8px 0}.invoice-table.preview tbody tr{cursor:default}.invoice-table.preview tbody tr:hover{background:none}.invoice-table.preview tr.bad td:last-child{color:var(--danger)}.invoice-table.preview tr.note td:last-child{color:var(--warn)}.invoice-table.preview thead th{position:sticky;top:0;background:var(--panel)}.outcome{color:var(--muted);font-size:11px}@media(max-width:900px){.billing-body{flex-direction:column}.invoice-panel{width:100%;border-left:none;border-top:1px solid var(--border)}.rate-row,.billing-settings .form-grid{grid-template-columns:1fr 1fr}.import-options{grid-template-columns:1fr}.wide-only{display:none}}@media print{@page{margin:10mm}html,body,#root,.qr-sheet{background:#fff;height:auto;overflow:visible}.no-print{display:none}.qr-grid{grid-template-columns:repeat(2,1fr);gap:8mm}.qr-card{border-color:#64748b}body.print-invoice *{visibility:hidden}body.print-invoice,body.print-invoice #root,body.print-invoice .billing,body.print-invoice .billing-body,body.print-invoice .invoice-panel{background:#fff;height:auto;overflow:visible;border:none}body.print-invoice .invoice-doc,body.print-invoice .invoice-doc *{visibility:visible}body.print-invoice .invoice-doc{position:absolute;left:0;top:0;width:100%;margin:0;padding:0}}.found-flag{position:relative;width:4px;height:44px;pointer-events:none}.found-flag:before{content:"";position:absolute;left:0;bottom:0;width:3px;height:100%;background:#f8fafc;border-radius:2px;box-shadow:0 0 0 1px #0f172a99}.found-flag:after{content:"";position:absolute;left:-3px;bottom:-3px;width:9px;height:9px;border-radius:50%;background:#facc15;box-shadow:0 0 0 2px #0f172a}.found-flag-label{position:absolute;left:3px;top:0;padding:3px 10px 3px 8px;white-space:nowrap;font:700 12px/1.2 system-ui,sans-serif;color:#0f172a;background:#facc15;clip-path:polygon(0 0,100% 0,calc(100% - 6px) 50%,100% 100%,0 100%);box-shadow:0 1px 3px #0006;animation:found-flag-wave .5s ease-out}@keyframes found-flag-wave{0%{transform:scaleX(0);transform-origin:left}to{transform:scaleX(1)}}@media(prefers-reduced-motion:reduce){.found-flag-label{animation:none}}.calendar{flex:1;min-height:0;display:flex;flex-direction:column;padding:12px 16px 8px;gap:8px}.calendar-toolbar{margin-bottom:0}.calendar-nav{display:flex;align-items:center;gap:6px}.calendar-range{margin-left:6px;font-weight:600;white-space:nowrap}.calendar-filters{display:flex;gap:6px}.calendar-filters select{width:auto}.calendar-filters input{width:180px}.calendar-today{display:flex;flex-wrap:wrap;gap:6px 20px;font-size:13px;background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:8px 12px}.calendar-today b{color:var(--muted);font-weight:600;margin-right:4px}.calendar-today a{color:var(--accent)}.calendar-empty{padding:16px 0}.calendar-scroll{flex:1;min-height:0;overflow:auto;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.calendar-grid{--berth-w: 72px;min-width:100%;width:max-content}.calendar-head{display:flex;position:sticky;top:0;z-index:3;background:var(--panel-2);border-bottom:1px solid var(--border)}.calendar-corner{position:sticky;left:0;z-index:4;width:var(--berth-w);flex:none;background:var(--panel-2);border-right:1px solid var(--border);font-size:11px;color:var(--muted);display:flex;align-items:flex-end;padding:4px 8px}.calendar-days{display:flex;flex:1;min-width:calc(var(--days) * var(--day-w))}.calendar-day{position:relative;flex:1 1 0;min-width:0;padding:16px 0 4px;display:flex;flex-direction:column;align-items:center;font-size:11px;line-height:1.2;border-left:1px solid var(--border)}.calendar-day.weekend{background:#94a3b814}.calendar-day.today{background:#38bdf838;color:#fff;font-weight:700}.calendar-month{position:absolute;top:2px;left:4px;white-space:nowrap;font-size:10px;color:var(--accent);font-weight:600;z-index:1}.calendar-weekday{color:var(--muted)}.calendar-grid.narrow .calendar-weekday{display:none}.calendar-grid.narrow .calendar-date{font-size:9px}.calendar-row{display:flex;height:26px;border-bottom:1px solid rgba(36,49,77,.6)}.calendar-row:hover{background:#38bdf80d}.calendar-berth{position:sticky;left:0;z-index:2;width:var(--berth-w);flex:none;display:flex;align-items:center;justify-content:space-between;gap:4px;padding:0 8px;background:var(--panel);border-right:1px solid var(--border);color:var(--text);text-decoration:none;font-size:12px}.calendar-berth span{color:var(--muted);font-size:10px}.calendar-berth:hover b{color:var(--accent)}.calendar-track{position:relative;flex:1;min-width:calc(var(--days) * var(--day-w));background-image:linear-gradient(to right,transparent calc(100% - 1px),rgba(36,49,77,.55) calc(100% - 1px));background-size:calc(100% / var(--days)) 100%}.calendar-track.out{background-color:#a1a1aa14;background-size:auto;background-image:repeating-linear-gradient(135deg,rgba(161,161,170,.18) 0 4px,transparent 4px 9px)}.calendar-now{position:absolute;top:0;bottom:0;width:calc(100% / var(--days));background:#38bdf81f;pointer-events:none}.calendar-bar{position:absolute;top:4px;bottom:4px;margin-left:1px;border-radius:5px;color:#0b1220;font-size:11px;font-weight:600;text-decoration:none;display:flex;align-items:center;padding:0 6px;overflow:hidden;box-shadow:0 1px 2px #00000059}.calendar-bar span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.calendar-bar.completed{color:#e2e8f0}.calendar-bar.cut-start{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0}.calendar-bar.cut-end{border-top-right-radius:0;border-bottom-right-radius:0}.calendar-bar:hover,.calendar-bar:focus-visible{outline:2px solid #fff;outline-offset:-1px;z-index:1}.calendar-bar.dim{opacity:.3}.calendar-legend{display:flex;flex-wrap:wrap;gap:4px 16px;align-items:center;margin:0}.calendar-legend>span{display:inline-flex;align-items:center;gap:6px}.calendar-legend .swatch.out{background:repeating-linear-gradient(135deg,rgba(161,161,170,.6) 0 2px,transparent 2px 4px)}@media(max-width:760px){.calendar{padding:8px}.calendar-filters{width:100%}.calendar-filters input{flex:1;width:auto;min-width:0}.calendar-grid{--berth-w: 56px}.calendar-berth span{display:none}}.calendar{position:relative}.calendar-track.bookable{cursor:cell}.calendar-bar{border:none;cursor:pointer;text-align:left;font:inherit;font-size:11px;font-weight:600}.calendar-bar.movable{cursor:grab}.calendar-bar.previewing{outline:2px dashed #fff;outline-offset:-1px;z-index:2;opacity:.9}.calendar-bar.selected{outline:2px solid #facc15;outline-offset:-1px;z-index:1}.calendar-bar-label{pointer-events:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.calendar-handle{position:absolute;top:0;bottom:0;width:8px;cursor:ew-resize}.calendar-handle.start{left:0}.calendar-handle.end{right:0}.calendar-handle:after{content:"";position:absolute;top:25%;bottom:25%;width:2px;border-radius:1px;background:#0b122073;opacity:0}.calendar-handle.start:after{left:2px}.calendar-handle.end:after{right:2px}.calendar-bar:hover .calendar-handle:after{opacity:1}body.dragging-move,body.dragging-resize{-webkit-user-select:none;user-select:none}body.dragging-move,body.dragging-move .calendar-track,body.dragging-move .calendar-bar{cursor:grabbing}body.dragging-resize,body.dragging-resize .calendar-track,body.dragging-resize .calendar-bar,body.dragging-resize .calendar-handle{cursor:ew-resize}.calendar-panel{position:absolute;top:8px;right:16px;bottom:8px;z-index:10;width:340px;overflow:auto;background:var(--panel);border:1px solid var(--accent-strong);border-radius:10px;padding:12px 14px;box-shadow:0 12px 32px #00000080}.calendar-panel h3{margin:0;font-size:16px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.calendar-panel .icon{border:none;background:transparent;padding:2px 6px}.calendar-form{display:flex;flex-direction:column;gap:10px;margin-top:8px}.calendar-form .field{display:flex;flex-direction:column;gap:4px}.calendar-form .field-label{font-size:12px;color:var(--muted)}.calendar-form .form-grid{margin-top:0}.calendar-form .error{margin:0}.calendar-form-actions{display:flex;gap:8px;flex-wrap:wrap}.stay-pill{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;color:#0b1220}.stay-pill.active{background:#3b82f6}.stay-pill.reserved{background:#f59e0b}.stay-pill.completed{background:#64748b;color:#e2e8f0}.owner-suggestions{list-style:none;margin:0;padding:0;display:grid;gap:4px}.owner-suggestions button{width:100%;display:flex;flex-direction:column;align-items:flex-start;text-align:left}.owner-suggestions .muted{margin:0}.owner-chosen{display:flex;gap:10px;align-items:baseline}.owner-chosen a{color:var(--accent);font-weight:600}.calendar-toast{position:absolute;left:50%;bottom:40px;transform:translate(-50%);z-index:11;max-width:min(560px,calc(100% - 32px));background:#0f2a1d;border:1px solid #22c55e;color:#dcfce7;padding:8px 14px;border-radius:8px;font-size:13px;box-shadow:0 8px 24px #00000073}.calendar-toast.error{background:#2a1214;border-color:var(--danger);color:#fee2e2}@media(max-width:760px){.calendar-panel{left:8px;right:8px;width:auto;top:auto;max-height:80%}}.app-bar{display:flex;align-items:center;gap:12px;padding:6px 12px;min-height:48px;background:var(--panel);border-bottom:1px solid var(--border)}.app-brand{display:flex;align-items:center;gap:8px;min-width:0;flex:0 1 auto}.app-brand .logo{font-size:18px}.app-marina{font-weight:700;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:280px}.app-brand .marina-switch{font-weight:600;font-size:14px;max-width:360px;min-width:0;padding:5px 8px}.app-tabs{display:flex;gap:2px;margin:0 auto;background:var(--bg);padding:3px;border-radius:9px}.app-tabs a{padding:6px 14px;border-radius:7px;color:var(--muted);text-decoration:none;font-size:14px;font-weight:500;white-space:nowrap}.app-tabs a:hover{color:var(--text)}.app-tabs a.active{background:var(--accent-strong);color:#fff;font-weight:600}.app-right{display:flex;align-items:center;gap:8px;margin-left:auto}.app-tabs+.app-right{margin-left:0}.app-subbar{display:flex;align-items:center;gap:8px;padding:6px 12px;background:var(--panel);border-bottom:1px solid var(--border)}.menu{position:relative}.menu summary{list-style:none;cursor:pointer;width:32px;height:32px;border-radius:8px;display:grid;place-items:center;font-size:18px;line-height:1;border:1px solid var(--border);background:var(--panel-2);-webkit-user-select:none;user-select:none}.menu summary::-webkit-details-marker{display:none}.menu[open] summary,.menu summary:hover{border-color:var(--accent)}.menu-pop{position:absolute;right:0;top:calc(100% + 6px);z-index:20;width:280px;padding:6px;display:flex;flex-direction:column;gap:2px;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #0006}.menu-pop>a,.menu-pop>button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:8px 10px;border:none;border-radius:6px;background:transparent;color:var(--text);text-align:left;text-decoration:none;font-size:13px;font-weight:600}.menu-pop>a:hover,.menu-pop>button:hover{background:var(--panel-2)}.menu-pop span{font-weight:400;font-size:12px;color:var(--muted)}.map-toolbar{position:absolute;top:10px;left:50%;transform:translate(-50%);z-index:5;max-width:calc(100% - 120px);display:flex;align-items:center;gap:6px;padding:4px;overflow-x:auto;background:#111a2eeb;border:1px solid var(--border);border-radius:10px;box-shadow:0 4px 14px #0006}.map-toolbar .modes{background:transparent;padding:0}.map-toolbar .modes button{white-space:nowrap}.marina-name-field{margin-bottom:8px}@media(max-width:900px){.app-bar{flex-wrap:wrap;row-gap:6px}.app-brand{flex:1 1 0}.app-marina{max-width:none}.app-brand .marina-switch{width:100%;max-width:none}.app-tabs{order:3;width:100%;margin:0;overflow-x:auto}.app-tabs a{flex:1;text-align:center;padding:6px 8px}.app-right{margin-left:auto}.app-tabs+.app-right{margin-left:auto}.sync-label{display:none}}@media(max-width:800px){.map-toolbar{top:52px;left:50px;transform:none;max-width:calc(100% - 60px)}.map-toolbar kbd{display:none}}
