:root{--color-bg: #071a2f;--color-bg-grad: radial-gradient(1200px 600px at 50% -10%, #0e2742 0%, #071a2f 60%);--color-surface: #0e2742;--color-surface-2: #143559;--color-border: #1d4063;--color-primary: #0f4c75;--color-primary-hover: #15689e;--color-accent: #c9a227;--color-accent-hover: #e0b73a;--color-text: #eaf1f8;--color-muted: #9bb1c7;--color-danger: #e0573a;--color-danger-surface: #5a1f1f;--color-success: #4caf74;--color-success-text: #b9e7cb;--color-accent-contrast: #20180a;--font-sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-display: "Playfair Display", Georgia, "Times New Roman", serif;--radius-sm: 8px;--radius: 14px;--radius-lg: 22px;--shadow: 0 8px 30px rgba(0, 0, 0, .35);--shadow-sm: 0 2px 10px rgba(0, 0, 0, .25);--space-1: .5rem;--space-2: 1rem;--space-3: 1.5rem;--space-4: 2rem;--maxw: 720px}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/inter-latin.woff2) format("woff2")}@font-face{font-family:Playfair Display;font-style:normal;font-weight:400 900;font-display:swap;src:url(/fonts/playfair-latin.woff2) format("woff2")}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{min-height:100%}body{font-family:var(--font-sans);color:var(--color-text);background:var(--color-bg-grad),var(--color-bg);background-attachment:fixed;-webkit-font-smoothing:antialiased;line-height:1.5}a{color:var(--color-accent);text-decoration:none}a:hover{color:var(--color-accent-hover)}h1,h2,h3{font-family:var(--font-display);font-weight:700;line-height:1.15}.app{max-width:var(--maxw);margin:0 auto;padding:0 var(--space-2) calc(var(--space-4) + env(safe-area-inset-bottom));min-height:100vh}.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);padding:var(--space-2) 0;padding-top:calc(var(--space-2) + env(safe-area-inset-top));background:linear-gradient(var(--color-bg),rgba(7,26,47,.85));-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.brand{font-family:var(--font-display);font-size:1.25rem;font-weight:700;letter-spacing:.5px;color:var(--color-text);display:flex;align-items:center;gap:.5rem}.brand .dot{color:var(--color-accent)}.nav{display:flex;gap:var(--space-1);align-items:center}.nav a{color:var(--color-muted);font-size:.9rem;padding:.5rem .7rem;border-radius:var(--radius-sm);white-space:nowrap}.nav a.active{color:var(--color-text);background:var(--color-surface)}@media(max-width:620px){.topbar{flex-wrap:wrap}.nav{flex-basis:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:.25rem}.nav::-webkit-scrollbar{display:none}}.page-title{margin:var(--space-3) 0 var(--space-2);font-size:1.8rem}.subtitle{color:var(--color-muted);margin-bottom:var(--space-3)}.grid{display:grid;gap:var(--space-2)}@media(min-width:560px){.grid.two{grid-template-columns:1fr 1fr}}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm);transition:transform .15s ease,box-shadow .15s ease}.card:hover{transform:translateY(-2px);box-shadow:var(--shadow)}.card .thumb{width:100%;aspect-ratio:16 / 9;object-fit:cover;background:var(--color-surface-2);display:block}.card .thumb.placeholder{display:flex;align-items:center;justify-content:center;color:var(--color-muted);font-size:2rem}.card .body{padding:var(--space-2)}.card h3{font-size:1.15rem}.card .meta{color:var(--color-muted);font-size:.85rem;margin-top:.25rem}.countdown{display:flex;gap:var(--space-1)}.countdown .unit{background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:.5rem .6rem;text-align:center;min-width:3.4rem}.countdown .unit .num{font-size:1.5rem;font-weight:700;font-variant-numeric:tabular-nums}.countdown .unit .lbl{font-size:.65rem;text-transform:uppercase;letter-spacing:1px;color:var(--color-muted)}.countdown.small .unit{min-width:2.6rem;padding:.3rem .4rem}.countdown.small .num{font-size:1.05rem}.countdown .departed{color:var(--color-accent);font-weight:600}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font:inherit;font-weight:600;padding:.7rem 1.1rem;border-radius:var(--radius-sm);border:1px solid transparent;cursor:pointer;background:var(--color-primary);color:var(--color-text);transition:background .15s ease,opacity .15s ease;text-align:center}.btn:hover{background:var(--color-primary-hover)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.accent{background:var(--color-accent);color:var(--color-accent-contrast)}.btn.accent:hover{background:var(--color-accent-hover)}.btn.ghost{background:transparent;border-color:var(--color-border);color:var(--color-text)}.btn.ghost:hover{background:var(--color-surface)}.btn.danger{background:transparent;border-color:var(--color-danger);color:var(--color-danger)}.btn.danger:hover{background:#e0573a1f}.btn.block{width:100%}.btn:focus-visible,a.card:focus-visible,.card:focus-visible,.nav a:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}label{display:block;font-size:.85rem;color:var(--color-muted);margin-bottom:.35rem}.field{margin-bottom:var(--space-2)}input,textarea,select{width:100%;font:inherit;color:var(--color-text);background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:.65rem .75rem}input:focus,textarea:focus,select:focus{outline:2px solid var(--color-primary-hover);border-color:var(--color-primary-hover)}textarea{min-height:96px;resize:vertical}.checkbox-row{display:flex;align-items:center;gap:.5rem}.checkbox-row input{width:auto}.checkbox-row label{margin:0}.password-wrap{position:relative;display:flex;align-items:center}.password-wrap input{padding-right:4rem}.password-toggle{position:absolute;right:.4rem;background:transparent;border:none;color:var(--color-muted);font:inherit;font-size:.8rem;font-weight:600;cursor:pointer;padding:.3rem .5rem;border-radius:var(--radius-sm)}.password-toggle:hover{color:var(--color-text)}.password-toggle:focus-visible{outline:2px solid var(--color-primary-hover)}.auth-card{max-width:380px;margin:var(--space-4) auto}.error{color:var(--color-danger);font-size:.9rem;margin:var(--space-1) 0}.flash-notice{background:#4caf741f;border:1px solid var(--color-success);color:var(--color-success-text);border-radius:var(--radius-sm);padding:.5rem .8rem;margin:var(--space-1) 0;font-size:.88rem}.notice{color:var(--color-muted);padding:var(--space-3);text-align:center}.tag{display:inline-block;font-size:.7rem;padding:.15rem .5rem;border-radius:999px;background:var(--color-surface-2);color:var(--color-muted);border:1px solid var(--color-border)}.tag.draft{color:var(--color-danger);border-color:var(--color-danger)}.tag.underway{color:var(--color-success-text);border-color:var(--color-success);background:#4caf741f}.card.past{opacity:.72;filter:saturate(.7)}.card.past:hover{opacity:1;filter:none}.section-title{font-size:1.2rem;margin:var(--space-4) 0 var(--space-2);padding-top:var(--space-3);border-top:1px solid var(--color-border);color:var(--color-muted)}.row-between{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.stack{display:flex;flex-direction:column;gap:var(--space-2)}.center{text-align:center}.spacer{height:var(--space-2)}.muted{color:var(--color-muted)}.link-back{display:inline-flex;align-items:center;gap:.4rem}.session-banner{background:var(--color-danger-surface);border:1px solid var(--color-accent);color:#ffe9e0;border-radius:var(--radius-sm);padding:.7rem .9rem;margin-bottom:var(--space-3);font-size:.88rem;line-height:1.4}.session-banner strong{color:#fff}.admin-table{width:100%;border-collapse:collapse}.admin-table th,.admin-table td{text-align:left;padding:.6rem .5rem;border-bottom:1px solid var(--color-border);font-size:.9rem}.admin-table th{color:var(--color-muted);font-weight:600}.admin-actions{display:flex;gap:.4rem}@media(max-width:560px){.admin-table th,.admin-table td{font-size:.8rem;padding:.45rem .3rem}.admin-actions{flex-direction:column;align-items:stretch;gap:.25rem}}.tag.trip{color:var(--color-accent);border-color:var(--color-accent)}.tag.cruise{color:var(--color-primary-hover);border-color:var(--color-primary-hover)}.admin-tabs{display:flex;gap:var(--space-1);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-2)}.admin-tabs a{padding:.5rem .9rem;font-size:.9rem;font-weight:600;color:var(--color-muted);text-decoration:none;border-bottom:2px solid transparent;margin-bottom:-1px}.admin-tabs a:hover{color:var(--color-text)}.admin-tabs a.active{color:var(--color-accent);border-bottom-color:var(--color-accent)}.collapsible{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);margin-bottom:var(--space-2)}.collapsible>summary{cursor:pointer;padding:.7rem .9rem;font-weight:600;font-size:.9rem;color:var(--color-muted);list-style:none;display:flex;align-items:center;gap:.5rem}.collapsible>summary::-webkit-details-marker{display:none}.collapsible>summary:before{content:"▸";transition:transform .15s ease}.collapsible[open]>summary:before{transform:rotate(90deg)}.collapsible>summary:focus-visible{outline:2px solid var(--color-primary-hover);border-radius:var(--radius-sm)}.collapsible-body{padding:0 .9rem .9rem}.wx-badge{text-transform:uppercase;letter-spacing:.5px}.wx-badge.high{color:var(--color-accent);border-color:var(--color-accent)}.wx-main{display:flex;align-items:center;gap:var(--space-2);margin-top:var(--space-2)}.wx-icon{font-size:2.6rem;line-height:1}.wx-temp{font-size:1.9rem;font-weight:700;font-variant-numeric:tabular-nums}.wx-cond{font-size:.85rem;margin-top:.15rem}.wx-range{margin-top:var(--space-2);font-size:.85rem}.wx-stats{display:flex;flex-wrap:wrap;gap:.4rem var(--space-2);margin-top:var(--space-2);font-size:.9rem}.wx-source{margin-top:var(--space-2);font-size:.72rem}.coord-row{display:flex;gap:var(--space-2)}.coord-row>div{flex:1}.port-hourly{margin-top:.4rem}.port-hourly-loading{font-size:.85rem;padding:.4rem 0}.hourly-strip{display:flex;gap:.25rem;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:.35rem}.hourly-cell{flex:0 0 auto;min-width:3.4rem;text-align:center;background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:.35rem .3rem;font-variant-numeric:tabular-nums}.hourly-day{font-size:.7rem;color:var(--color-accent);font-weight:700;min-height:.9rem;white-space:nowrap}.hourly-hour{font-size:.7rem;color:var(--color-muted);white-space:nowrap}.hourly-icon{font-size:1.15rem;line-height:1.4}.hourly-temp{font-size:.85rem;font-weight:700}.hourly-rain{font-size:.7rem;color:var(--color-muted);white-space:nowrap}.hourly-precip{font-size:.7rem;color:var(--color-accent);white-space:nowrap}.radar-map{position:relative;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);aspect-ratio:1 / 1;max-width:480px;border-radius:var(--radius-sm);overflow:hidden;border:1px solid var(--color-border);background:var(--color-surface-2)}.radar-cell{position:relative}.radar-cell img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block}.radar-cell .radar-overlay{opacity:.75}.radar-marker{position:absolute;width:12px;height:12px;border-radius:50%;background:var(--color-danger);border:2px solid #fff;transform:translate(-50%,-50%);box-shadow:0 0 6px #0009;z-index:1}.radar-attribution{font-size:.7rem;color:var(--color-muted);margin-top:.3rem}@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton{border-radius:var(--radius);background:linear-gradient(100deg,var(--color-surface) 40%,var(--color-surface-2) 50%,var(--color-surface) 60%);background-size:200% 100%;animation:skeleton-shimmer 1.4s ease infinite}.skeleton-card{height:220px}.skeleton-row{height:96px}@media(prefers-reduced-motion:reduce){.skeleton{animation:none}}.hero{position:relative;border-radius:var(--radius);overflow:hidden;margin-top:var(--space-2);background:var(--color-surface-2)}.hero img{width:100%;aspect-ratio:16 / 9;max-height:340px;object-fit:cover;display:block}.hero .hero-placeholder{width:100%;aspect-ratio:16 / 9;max-height:340px;display:flex;align-items:center;justify-content:center;font-size:3rem;color:var(--color-muted)}.hero .hero-overlay{position:absolute;inset:auto 0 0 0;padding:calc(var(--space-4)) var(--space-2) var(--space-2);background:linear-gradient(transparent,#040c16e0)}.hero .hero-overlay h1{font-size:clamp(1.3rem,5vw,1.9rem);margin:0;text-shadow:0 1px 8px rgba(0,0,0,.6)}.hero .hero-overlay .hero-sub{color:#cfdceb;font-size:.9rem;margin:.15rem 0 0;text-shadow:0 1px 6px rgba(0,0,0,.6)}.itin-row{display:flex;align-items:center;gap:.6rem;padding:.55rem var(--space-2);min-height:3rem}.itin-row.clickable{cursor:pointer}.itin-row.clickable:hover{background:#14355959}.itin-marker{position:relative;align-self:stretch;width:2rem;flex-shrink:0;display:flex;align-items:center;justify-content:center}.itin-marker:before{content:"";position:absolute;top:0;bottom:0;left:50%;width:2px;margin-left:-1px;background:var(--color-border)}.itin-row:first-child .itin-marker:before{top:50%}.itin-row:last-of-type .itin-marker:before{bottom:50%}.itin-pill{position:relative;z-index:1;min-width:1.8rem;height:1.8rem;padding:0 .3rem;border-radius:999px;display:flex;align-items:center;justify-content:center;font-size:.7rem;font-weight:700;background:var(--color-accent);color:var(--color-accent-contrast);border:2px solid var(--color-surface)}.itin-pill.sea{background:var(--color-surface-2);color:var(--color-muted);border-color:var(--color-border)}.itin-date{font-size:.8rem;color:var(--color-muted);min-width:4.2rem;flex-shrink:0}.itin-port{flex:1;font-weight:600;font-size:.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.itin-port.sea{font-weight:400}.itin-port .itin-country{font-weight:400;font-size:.8rem;color:var(--color-muted)}.itin-wx{display:flex;align-items:center;gap:.4rem;flex-shrink:0;font-size:.8rem}.itin-expanded{padding:0 var(--space-2) var(--space-2) 2.6rem}.wx-row{padding:.5rem 0;border-bottom:1px solid var(--color-border);display:grid;grid-template-columns:5.5rem 1fr auto;gap:.2rem .5rem;align-items:center}.wx-row .wx-day{font-size:.85rem;font-weight:500}.wx-row .wx-main-line{display:flex;align-items:center;gap:.5rem}.wx-row .wx-desc{grid-column:2 / -1;font-size:.8rem}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.table-scroll .admin-table{min-width:560px}
