:root{--navy:#1f3a5f;--navy-dark:#16293f;--gold:#b98d4f;--bg:#f4f6f9;--card:#ffffff;--line:#dde3ec;--text:#24303f;--muted:#6b7788;--green:#1e7d4f;--green-bg:#e5f4ec;--amber:#9a6a12;--amber-bg:#fbf1dc;--red:#b03030;--red-bg:#fbe7e7;--gray-bg:#ececec;--skyline-blue:#2f66c9;--avail-green-bg:#baf7d0;--avail-green-line:#17a34a;--avail-blue-bg:#bfdbfe;--avail-blue-line:#2563eb;--avail-red-bg:#fecaca;--avail-red-line:#dc2626;--avail-yellow-bg:#fde68a;--avail-yellow-line:#ca8a04;--avail-orange-bg:#fdba74;--avail-orange-line:#ea580c;--pending-bg:#dfe3e8;--hold-bg:#ede3f7;--hold-line:#7c5cad;--deposit-bg:#dcf1f1;--deposit-line:#0f6e6e;--hudson-tint:#f7eee0;--skyline-tint:#e3ebfa}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--text);font-size:15px;line-height:1.45}a{color:var(--navy);text-decoration:none}a:hover{text-decoration:underline}.topbar{background:var(--navy);color:#fff;display:flex;align-items:center;gap:22px;padding:0 20px;height:52px;position:-webkit-sticky;position:sticky;top:0;z-index:20}.topbar .brand{font-weight:700;letter-spacing:.04em;font-size:15px;color:#fff}.topbar .brand span{color:var(--gold)}.topbar nav{display:flex;gap:4px;flex:1 1}.topbar nav a{color:#cfd9e6;padding:6px 11px;border-radius:6px;font-size:14px}.topbar nav a:hover{background:rgba(255,255,255,.1);text-decoration:none;color:#fff}.topbar nav a.active{background:rgba(255,255,255,.16);color:#fff}.topbar .who{color:#cfd9e6;font-size:13px}.topbar .who a{color:var(--gold);margin-left:8px}.wrap{max-width:1180px;margin:0 auto;padding:22px 20px 60px}.page-head{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin:4px 0 18px}.page-head h1{font-size:22px;margin:0;color:var(--navy)}.page-head .spacer{flex:1 1}.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:18px;margin-bottom:16px}.card h2{margin:0 0 12px;font-size:16px;color:var(--navy)}.btn{display:inline-block;background:var(--navy);color:#fff;border:none;border-radius:7px;padding:8px 14px;font-size:14px;cursor:pointer;font-weight:600}.btn:hover{background:var(--navy-dark);text-decoration:none}.btn.secondary{background:#fff;color:var(--navy);border:1px solid var(--line)}.btn.secondary:hover{background:var(--bg)}.btn.small{padding:4px 10px;font-size:13px}.btn.danger{background:var(--red)}.btn.green{background:var(--green)}.btn:disabled{opacity:.5;cursor:default}table.grid{width:100%;border-collapse:collapse}table.grid th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:8px 10px;border-bottom:2px solid var(--line)}table.grid td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:top}table.grid tr:last-child td{border-bottom:none}label.fl{display:block;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:12px 0 4px}input[type=date],input[type=number],input[type=password],input[type=tel],input[type=text],input[type=time],select,textarea{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:7px;font-size:14px;background:#fff;color:var(--text)}textarea{min-height:70px}.row{display:flex;gap:14px}.row>*{flex:1 1}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:600}.badge.green{background:var(--green-bg);color:var(--green)}.badge.amber{background:var(--amber-bg);color:var(--amber)}.badge.red{background:var(--red-bg);color:var(--red)}.badge.gray{background:var(--gray-bg);color:#666}.badge.navy{background:#e7edf5;color:var(--navy)}.badge.gold{background:#f5eddf;color:#8a6a33}.badge.vip{background:var(--gold);color:#fff;letter-spacing:.02em}.badge.pending{background:var(--pending-bg);color:var(--muted)}.badge.hold{background:var(--hold-bg);color:var(--hold-line)}.badge.deposit{background:var(--deposit-bg);color:var(--deposit-line)}.badge.booked{background:#efe6f5;color:#5b3478}.badge.booked-mismatch{background:#fff;color:var(--red);box-shadow:inset 0 0 0 1px var(--red)}.warnbox{background:var(--amber-bg);border:1px solid #e8d3a5;color:var(--amber);border-radius:8px}.okbox,.warnbox{padding:10px 14px;margin:10px 0;font-size:14px}.okbox{background:var(--green-bg);border:1px solid #bfe3cf;color:var(--green);border-radius:8px}.errbox{background:var(--red-bg);border:1px solid #eec3c3;color:var(--red);border-radius:8px;padding:10px 14px;margin:10px 0;font-size:14px}.muted{color:var(--muted)}.small{font-size:13px}.board-day{margin-bottom:22px}.board-day h3{margin:0 0 10px;font-size:15px;color:var(--navy);border-bottom:2px solid var(--line);padding-bottom:6px}.charter-card{border:1px solid var(--line);border-left:5px solid var(--muted);border-radius:9px;background:#fff;padding:12px 15px;margin-bottom:10px;display:block;color:var(--text)}.charter-card:hover{text-decoration:none;box-shadow:0 2px 8px rgba(31,58,95,.12)}.charter-card.green{border-left-color:var(--green)}.charter-card.amber{border-left-color:#d9a53a}.charter-card.red{border-left-color:var(--red)}.charter-card.gray{border-left-color:#aaa;opacity:.65}.charter-card.unassigned{border-left-color:var(--muted)}.charter-card.status-pending{background:var(--pending-bg)}.charter-card.status-hold{background:var(--hold-bg);border-left-color:var(--hold-line)}.charter-card .top{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}.charter-card .top .time{font-weight:700;color:var(--navy)}.charter-card .top .vessel{font-weight:600}.charter-card .top .v-hudson{color:var(--gold)}.charter-card .top .v-mermaid{color:var(--green)}.charter-card .top .v-skyline{color:var(--skyline-blue)}.charter-card .crewline{margin-top:6px;font-size:13.5px;color:var(--muted)}.charter-card .crewline b{color:var(--text);font-weight:600}.charter-card .top .addonsline{flex:1 1;min-width:0;text-align:center;font-size:13.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.charter-card .top .addonsline b{color:var(--navy);font-weight:600}.charter-card .top .addonsline .addon-chip+.addon-chip{margin-left:2px}.avgrid{border-collapse:collapse;width:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none}.avgrid th{font-size:11px;color:var(--muted);padding:4px}.avgrid td{border:1px solid var(--line);height:22px;text-align:center;cursor:pointer;font-size:11px;color:transparent;background:#fff}.avgrid td:not(.rowlabel){width:calc((100% - 70px) / 14)}.avgrid td.on{background:var(--avail-green-bg)}.avgrid td.off{background:var(--avail-red-bg)}.avgrid td.assigned{background:var(--avail-blue-bg);cursor:default}.avgrid td.tentative{background:var(--avail-orange-bg);cursor:default}.avgrid td.available{background:var(--avail-green-bg)}.avgrid td.maybe{background:var(--avail-yellow-bg)}.avgrid td.unavailable{background:var(--avail-red-bg)}.avgrid td:hover{outline:2px solid var(--navy);outline-offset:-2px}.avgrid td.rowlabel{color:var(--text);cursor:default;width:70px;white-space:nowrap;text-align:right;padding:0 8px;font-size:12px;border:none}.avgrid td.rowlabel:hover{outline:none}.covgrid td.off,.covgrid td.on{color:var(--text);font-size:10.5px;font-weight:600;cursor:default}.covgrid td.off:hover,.covgrid td.on:hover{outline:none}.avgrid td.partial{background:var(--amber-bg)}.covgrid td.partial{color:var(--amber);font-size:10.5px;font-weight:600;cursor:default}.covgrid td.partial:hover{outline:none}.lookahead td.rowlabel.person{width:220px;text-align:left;cursor:default}.lookahead td{cursor:default}.legend{display:flex;gap:16px;flex-wrap:wrap;align-items:center;margin:4px 0 10px;font-size:13px}.legend-item{display:inline-flex;align-items:center;gap:6px}.swatch{width:13px;height:13px;border-radius:3px;display:inline-block;border:1px solid var(--line)}.swatch.on{background:var(--avail-green-bg);border-color:var(--avail-green-line)}.swatch.off{background:var(--avail-red-bg);border-color:var(--avail-red-line)}.swatch.partial{background:var(--amber-bg);border-color:#e8d3a5}.swatch.blank{background:#fff}.swatch.assigned{background:var(--avail-blue-bg);border-color:var(--avail-blue-line)}.swatch.tentative{background:var(--avail-orange-bg);border-color:var(--avail-orange-line)}.swatch.available{background:var(--avail-green-bg);border-color:var(--avail-green-line)}.swatch.maybe{background:var(--avail-yellow-bg);border-color:var(--avail-yellow-line)}.swatch.unavailable{background:var(--avail-red-bg);border-color:var(--avail-red-line)}.gap-cell{color:var(--red);font-weight:700}.pen-select{display:flex;gap:8px;flex-wrap:wrap;margin:4px 0 14px}.pen,.pen-select{align-items:center}.pen{display:inline-flex;gap:6px;padding:6px 12px;border-radius:7px;border:1px solid var(--line);background:#fff;font-size:13.5px;color:var(--text);cursor:pointer}.pen:hover{background:var(--bg)}.pen.active{border-color:var(--navy);box-shadow:inset 0 0 0 1px var(--navy);font-weight:600}.pen .swatch{pointer-events:none}.tabs{display:flex;gap:4px}.tabs .tab{padding:6px 12px;border-radius:7px;font-size:13.5px;color:var(--navy);border:1px solid transparent}.tabs .tab:hover{background:var(--bg);text-decoration:none}.tabs .tab.active{color:#fff}.tabs .tab.active,.tabs .tab.active:hover{background:var(--navy)}.slot{border:1px solid var(--line);border-radius:8px;padding:10px 14px;margin-bottom:10px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}.slot .role{min-width:90px;font-weight:700;color:var(--navy);text-transform:capitalize}.slot .name{font-weight:600}.slot .grow{flex:1 1}.slot.empty{background:var(--red-bg);border-color:#eec3c3}.slot.offered{background:var(--amber-bg);border-color:#e8d3a5}.slot.confirmed{background:var(--green-bg);border-color:#bfe3cf}.ranklist{list-style:none;margin:0;padding:0}.ranklist li{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:8px 12px;margin-bottom:6px}.ranklist .num{font-weight:700;color:var(--gold);min-width:24px}.ranklist form{display:inline}.arrows button{background:none;border:1px solid var(--line);border-radius:5px;cursor:pointer;padding:1px 7px;font-size:13px;margin-left:4px}.arrows button:hover{background:var(--bg)}.login-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--navy)}.login-card{background:#fff;border-radius:12px;padding:34px 36px;width:360px}.login-card h1{color:var(--navy);font-size:19px;margin:0 0 2px}.login-card .sub{color:var(--muted);font-size:13px;margin-bottom:14px}.print-only{display:none}@media print{body{background:#fff;font-size:12.5px}.no-print,.topbar{display:none!important}.print-only{display:block}.wrap{max-width:none;padding:0}.card{border:none;padding:0}.report-day{page-break-inside:avoid;margin-bottom:18px}table.report td,table.report th{padding:5px 8px}}table.report{width:100%;border-collapse:collapse;margin-bottom:8px}table.report th{background:var(--navy);color:#fff;font-size:12px;text-align:left;padding:7px 10px}table.report td{border:1px solid #ccd4de;padding:7px 10px;font-size:13.5px;vertical-align:top}.report-title{display:flex;align-items:baseline;gap:12px;margin-bottom:4px}.report-title h2{color:var(--navy);margin:0;font-size:17px}.legend-item .swatch.v-hudson-sw{background:var(--hudson-tint);border-color:var(--gold)}.legend-item .swatch.v-mermaid-sw{background:var(--green-bg);border-color:var(--green)}.legend-item .swatch.v-skyline-sw{background:var(--skyline-tint);border-color:var(--skyline-blue)}.mycal-layout{display:flex;flex-direction:column;gap:16px}.mycal-main{min-width:0}.mycal-dow{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:6px;gap:6px;margin-bottom:6px}.mycal-dow span{text-align:center;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.mycal-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:6px;gap:6px}.mycal-day{-moz-appearance:none;appearance:none;-webkit-appearance:none;text-align:left;font:inherit;color:inherit;min-height:84px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:6px;display:flex;flex-direction:column;gap:3px;cursor:default}.mycal-day.outside{opacity:.45}.mycal-day.working{cursor:pointer}.mycal-day.working:hover{border-color:var(--navy)}.mycal-day .num{font-size:13px;font-weight:600}.mycal-day.today .num{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--navy);color:#fff}.mycal-bar{font-size:11px;font-weight:600;padding:1px 5px;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mycal-bar.v-hudson{background:var(--hudson-tint);color:var(--gold)}.mycal-bar.v-mermaid{background:var(--green-bg);color:var(--green)}.mycal-bar.v-skyline{background:var(--skyline-tint);color:var(--skyline-blue)}@media (max-width:640px){.mycal-day{min-height:56px;padding:4px;gap:4px}.mycal-bar{font-size:0;padding:0;width:8px;height:8px;border-radius:50%}}.mycal-backdrop{position:fixed;inset:0;background:rgba(22,41,63,.35);opacity:0;pointer-events:none;transition:opacity .2s ease;z-index:30}.mycal-backdrop.open{opacity:1;pointer-events:auto}.mycal-panel{position:fixed;left:0;right:0;bottom:0;max-height:80vh;background:#fff;border-radius:14px 14px 0 0;box-shadow:0 -6px 24px rgba(22,41,63,.2);transform:translateY(100%);transition:transform .25s ease;z-index:31;display:flex;flex-direction:column;overflow:hidden}.mycal-panel.open{transform:translateY(0)}.mycal-panel-head{display:flex;align-items:baseline;justify-content:space-between;padding:16px 18px 12px;border-bottom:1px solid var(--line);flex:none}.mycal-panel-head h3{margin:0;font-size:17px;color:var(--navy)}.mycal-panel-body{overflow-y:auto;padding:14px 18px 22px;display:flex;flex-direction:column;gap:14px}.mycal-charter{border:1px solid var(--line);border-left:4px solid var(--muted);border-radius:8px;padding:12px 14px}.mycal-charter.v-hudson{border-left-color:var(--gold)}.mycal-charter.v-mermaid{border-left-color:var(--green)}.mycal-charter.v-skyline{border-left-color:var(--skyline-blue)}.mycal-roster{margin-top:8px}.mycal-roster .label{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:4px}.mycal-roster-row{display:flex;justify-content:space-between;gap:10px;padding:2px 0;font-size:13.5px}@media (prefers-reduced-motion:reduce){.mycal-backdrop,.mycal-panel{transition:none}}@media (min-width:860px){.mycal-backdrop{display:none}.mycal-layout{flex-direction:row;align-items:flex-start;gap:20px}.mycal-main{flex:1 1}.mycal-panel{position:-webkit-sticky;position:sticky;top:20px;left:auto;right:auto;bottom:auto;width:320px;flex:none;max-height:calc(100vh - 60px);border-radius:10px;box-shadow:none;border:1px solid var(--line);transform:none}}.board-row{display:grid;grid-template-columns:95px 150px 140px 130px minmax(140px,1fr);grid-gap:10px;gap:10px;align-items:center;border:1px solid var(--line);border-left:10px solid var(--muted);border-radius:9px;background:#fff;padding:10px 14px 10px 12px;margin-bottom:10px;color:var(--text)}.board-row:hover{text-decoration:none;box-shadow:0 2px 8px rgba(31,58,95,.12)}.board-row.green{border-left-color:var(--green)}.board-row.amber{border-left-color:#d9a53a}.board-row.red{border-left-color:var(--red)}.board-row.gray{border-left-color:#aaa;opacity:.65}.board-row.unassigned{border-left-color:var(--muted)}.board-row.status-pending{background:var(--pending-bg)}.board-row.status-hold{background:var(--hold-bg);border-left-color:var(--hold-line)}.board-row .col{display:flex;flex-direction:column;justify-content:center;min-width:0}.board-row .col-time .time{font-weight:700;color:var(--navy);font-size:14.5px}.board-row .col-time .vessel{font-weight:600;font-size:13.5px;margin-top:2px}.board-row .col-time .v-hudson{color:var(--gold)}.board-row .col-time .v-mermaid{color:var(--green)}.board-row .col-time .v-skyline{color:var(--skyline-blue)}.board-row .col-customer .name{font-weight:700;color:var(--text);font-size:14.5px;overflow-wrap:anywhere}.board-row .col-customer .guests{color:var(--muted);font-size:13px;margin-top:3px}.board-row .col-crew .crew-line{font-size:13.5px;margin-bottom:2px}.board-row .col-crew .crew-line:last-child{margin-bottom:0}.board-row .col-crew b{font-weight:600}.board-row .col-crew .muted-note{color:var(--muted);font-size:12.5px;line-height:1.35}.board-row .col-status{gap:5px}.board-row .col-status .badge{margin-bottom:0}.board-row .col-addons{justify-content:center}.board-row .col-addons .addon-line{font-size:13px;color:var(--text);margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.board-row .col-addons .addon-line b{color:var(--navy);font-weight:600}.board-row .col-addons .addon-more{font-size:12px;color:var(--muted);font-weight:600}.board-row .col-addons .muted{color:var(--muted);font-size:13px}@media (max-width:560px){.board-row{grid-template-columns:1fr 1fr;grid-auto-rows:auto;row-gap:8px}.board-row .col-status{grid-column:1/-1;flex-direction:row;justify-content:flex-start;align-items:center;flex-wrap:wrap}.board-row .col-addons{grid-column:1/-1}}