.calendar-page{min-height:100vh;background:var(--color-cloud)}.calendar-header{background:var(--gradient-ocean);padding:var(--space-6) 0;color:var(--color-white)}.header-top{margin-bottom:var(--space-4)}.header-top h1{display:flex;align-items:center;gap:var(--space-2);color:var(--color-white);font-size:var(--text-2xl);margin-bottom:var(--space-1)}.header-top p{color:#ffffffe6;font-size:var(--text-base)}.year-nav{display:flex;gap:var(--space-2);margin-bottom:var(--space-4)}.year-pill{padding:var(--space-2) var(--space-4);background:#ffffff26;border:1px solid rgba(255,255,255,.3);border-radius:var(--radius-full);color:var(--color-white);font-weight:var(--font-bold);font-size:var(--text-base);cursor:pointer;transition:all var(--transition-fast)}.year-pill:hover{background:#ffffff40}.year-pill.active{background:var(--color-white);color:var(--color-ocean-deep);border-color:#fff}.ship-filters,.port-filters{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)}.filter-label{display:flex;align-items:center;gap:4px;font-size:var(--text-sm);color:#fffc;min-width:60px}.ship-chip,.port-chip{display:flex;align-items:center;gap:4px;padding:4px var(--space-2);background:#ffffff26;border:2px solid rgba(255,255,255,.5);border-radius:var(--radius-full);color:#ffffffe6;font-size:var(--text-sm);cursor:pointer;transition:all var(--transition-fast)}.ship-chip:hover,.port-chip:hover{background:#ffffff40;color:#fff;border-color:#fffc}.ship-chip.active,.port-chip.active{background:#fffffff2;color:var(--color-charcoal);border-color:#fff}.chip-dot{width:8px;height:8px;border-radius:50%}.timeline-section{padding:var(--space-4) 0}.timeline-nav{display:flex;align-items:center;justify-content:center;gap:var(--space-3);margin-bottom:var(--space-3)}.timeline-nav .nav-btn{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:var(--color-white);border:1px solid var(--color-silver);border-radius:var(--radius-full);cursor:pointer;transition:all var(--transition-fast)}.timeline-nav .nav-btn:hover{background:var(--color-ocean-pale);border-color:var(--color-ocean-light)}.timeline-range{font-size:var(--text-lg);font-weight:var(--font-bold);color:var(--color-charcoal)}.timeline-container{background:var(--color-white);border-radius:var(--radius-xl);box-shadow:var(--shadow-md);overflow:visible;margin-bottom:var(--space-3);position:relative}.timeline-header{display:flex;background:var(--color-ocean-deep);color:var(--color-white);position:relative;z-index:5}.ship-label-header{width:100px;min-width:100px;padding:var(--space-2) var(--space-3);font-weight:var(--font-bold);font-size:var(--text-sm);border-right:1px solid rgba(255,255,255,.2)}.months-header{flex:1;display:flex}.month-header{padding:var(--space-2);font-weight:var(--font-semibold);font-size:var(--text-sm);text-align:center;border-right:1px solid rgba(255,255,255,.2)}.month-header:last-child{border-right:none}.day-scale{display:flex;background:var(--color-ocean-pale);border-bottom:1px solid var(--color-silver);position:relative;z-index:5}.ship-label-spacer{width:100px;min-width:100px;border-right:1px solid var(--color-silver)}.days-row{flex:1;display:flex}.month-days{position:relative;height:20px;border-right:1px solid var(--color-silver)}.month-days:last-child{border-right:none}.day-marker{position:absolute;top:2px;font-size:10px;color:var(--color-ocean-deep);font-weight:var(--font-medium);transform:translate(-50%)}.timeline-body{max-height:400px;overflow-y:auto}.calendar-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-8) 0;color:var(--color-gray);font-size:var(--text-sm);width:100%}.calendar-loading-icon{width:28px;height:28px;color:var(--color-ocean-medium);animation:calendar-spin 1s linear infinite}@keyframes calendar-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ship-row{display:flex;border-bottom:1px solid var(--color-silver)}.ship-row:last-child{border-bottom:none}.ship-label{width:100px;min-width:100px;padding:var(--space-3);font-weight:var(--font-semibold);font-size:var(--text-sm);color:var(--color-charcoal);background:var(--color-cloud);border-right:1px solid var(--color-silver);border-left:4px solid;display:flex;align-items:center}.ship-timeline{flex:1;position:relative;min-height:50px;padding:var(--space-2) 0}.grid-lines{position:absolute;inset:0;display:flex;pointer-events:none}.grid-line{border-right:1px dashed var(--color-silver)}.grid-line:last-child{border-right:none}.sailing-bar{position:absolute;top:50%;transform:translateY(-50%);height:28px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:var(--font-bold);text-decoration:none;transition:all var(--transition-fast);z-index:1;box-shadow:0 2px 4px #00000026}.sailing-bar:hover{transform:translateY(-50%) scale(1.05);box-shadow:0 4px 8px #0003;z-index:10}.bar-label{display:flex;align-items:center;gap:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 var(--space-1)}.special-star{font-size:10px}.sailing-bar.special{border:2px solid var(--gold);box-shadow:0 2px 8px #ffd70066,0 2px 4px #00000026}.sailing-bar.special:hover{box-shadow:0 4px 12px #ffd70080,0 4px 8px #0003}.tooltip-special{color:var(--gold);font-weight:var(--font-bold)}.bar-tooltip{position:absolute;top:100%;left:50%;transform:translate(-50%);background:var(--color-charcoal);color:#fff;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-size:11px;white-space:nowrap;display:none;flex-direction:column;gap:2px;z-index:1000;box-shadow:var(--shadow-lg);margin-top:8px;pointer-events:none}.bar-tooltip:after{content:"";position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:6px solid transparent;border-bottom-color:var(--color-charcoal)}.bar-tooltip strong{font-size:12px}.sailing-bar:hover .bar-tooltip{display:flex}.timeline-stats{text-align:center;font-size:var(--text-sm);color:var(--color-gray)}.sailings-section{padding:var(--space-4) 0}.sailings-section h2{margin-bottom:var(--space-3);font-size:var(--text-xl);color:var(--color-charcoal)}.sailings-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-3)}.sailing-card{background:var(--color-white);border-radius:var(--radius-lg);padding:var(--space-3);text-decoration:none;color:inherit;box-shadow:var(--shadow-sm);border-left:4px solid var(--card-color);transition:all var(--transition-fast)}.sailing-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-2)}.ship-name{display:flex;align-items:center;gap:var(--space-1);font-weight:var(--font-bold);color:var(--color-charcoal)}.ship-dot{width:10px;height:10px;border-radius:50%}.nights-badge{padding:2px var(--space-2);background:var(--color-ocean-pale);color:var(--color-ocean-deep);border-radius:var(--radius-full);font-size:var(--text-sm);font-weight:var(--font-bold)}.card-dates,.card-route{display:flex;align-items:center;gap:var(--space-1);font-size:var(--text-sm);color:var(--color-slate);margin-bottom:var(--space-1)}.card-special{display:inline-flex;align-items:center;gap:4px;margin-top:var(--space-1);padding:2px var(--space-2);background:linear-gradient(135deg,#fdf3d8,#f7e6b4);color:var(--color-charcoal);border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:var(--font-medium)}.no-sailings{grid-column:1 / -1;text-align:center;padding:var(--space-8);background:var(--color-white);border-radius:var(--radius-lg)}.no-sailings p{margin-bottom:var(--space-3);color:var(--color-gray)}.no-sailings button{padding:var(--space-2) var(--space-4);background:var(--color-ocean-medium);color:#fff;border:none;border-radius:var(--radius-md);cursor:pointer}@media(max-width:768px){.header-top h1{font-size:var(--text-xl)}.year-nav,.ship-filters,.port-filters{justify-content:center}.filter-label{width:100%;justify-content:center;margin-bottom:var(--space-1)}.ship-label-header,.ship-label{width:70px;min-width:70px;font-size:var(--text-xs);padding:var(--space-2)}.sailing-bar{height:22px;font-size:9px}.sailings-grid{grid-template-columns:1fr}}
