: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;--pending-bg:#dfe3e8;--hold-bg:#ede3f7;--hold-line:#7c5cad}*{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)}.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-yellow-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-yellow-bg);border-color:var(--avail-yellow-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}