.page-title{margin:0 0 16px;font-size:1.5rem}.section-heading{margin:24px 0 12px;font-size:1rem;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.page .welcome{margin:0 0 16px;color:var(--text-muted)}.sync-note{margin-top:20px;font-size:.85rem;color:var(--text-muted)}.app-summary{margin-top:8px}.app-summary-header{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.app-summary-header .section-heading{margin-bottom:0}.app-summary-link{font-size:.9rem;font-weight:600;text-decoration:none}.subsection-heading{margin:16px 0 8px;font-size:.95rem;font-weight:600}.page-header-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.page-header-row .page-title{margin:0}.admin-form .form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media(max-width:600px){.admin-form .form-row{grid-template-columns:1fr}}.form-actions{display:flex;gap:10px;margin-top:8px}.user-table-wrap{overflow-x:auto}.user-table{width:100%;border-collapse:collapse;font-size:.9rem}.user-table th,.user-table td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--border);vertical-align:middle}.user-table th{font-size:.8rem;color:var(--text-muted);font-weight:600}.user-table tr.inactive{opacity:.55}.user-cell{display:flex;align-items:center;gap:10px}.user-avatar{width:36px;height:36px;border-radius:50%;object-fit:cover;flex-shrink:0}.user-avatar.placeholder{display:inline-flex;align-items:center;justify-content:center;background:var(--magenta);color:#fff;font-weight:700;font-size:.9rem}.user-id{display:block;font-size:.8rem}.role-badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:.75rem;font-weight:600;text-transform:uppercase;background:var(--border);color:var(--text-muted)}.role-badge.admin{background:var(--navy);color:#fff}.role-badge.inline{margin-left:8px;vertical-align:middle}.table-actions{display:flex;gap:6px}.btn-secondary.sm{padding:6px 10px;font-size:.8rem}.btn-secondary.danger{color:var(--danger);border-color:var(--danger)}.welcome-row{display:flex;align-items:center;gap:12px;margin-bottom:16px}.welcome-avatar{width:48px;height:48px;border-radius:50%;object-fit:cover}.welcome-row .welcome{margin:0}.duty-card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:18px;margin-top:12px}.duty-card header{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:8px}.duty-card-label{font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-weight:700}.duty-card-date{font-size:.9rem;color:var(--text-muted)}.duty-code{font-size:1.5rem;font-weight:800;margin:0 0 8px}.duty-meta{margin:0 0 8px;color:var(--text-muted);font-size:.9rem}.duty-legs{margin:0;padding-left:18px;font-size:.9rem}.duty-legs li{margin-bottom:4px}.duty-detail-panel{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:18px;margin-top:16px}.duty-detail-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:8px}.duty-detail-label{margin:0;font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-weight:700}.duty-detail-date{margin:4px 0 0;font-size:1rem;font-weight:600}.duty-detail-close{flex-shrink:0;width:32px;height:32px;border:1px solid var(--border);border-radius:8px;background:transparent;color:var(--text-muted);font-size:1.25rem;line-height:1;cursor:pointer}.duty-detail-close:hover{color:var(--text);border-color:var(--text-muted)}.duty-detail-code{font-size:1.25rem;font-weight:800;margin:0 0 12px}.duty-detail-times{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:0 0 16px;font-size:.9rem}.duty-detail-times dt{color:var(--text-muted);font-weight:600}.duty-detail-times dd{margin:0;font-weight:700}.duty-time-suffix{font-size:.78rem;font-weight:600}.duty-detail-section{margin-bottom:14px}.duty-detail-section:last-child{margin-bottom:0}.duty-detail-section h4{margin:0 0 8px;font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}.duty-detail-legs,.duty-detail-crew{margin:0;padding:0;list-style:none;font-size:.9rem}.duty-detail-legs li,.duty-detail-crew li{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 12px;padding:8px 0;border-bottom:1px solid var(--border)}.duty-detail-legs li:last-child,.duty-detail-crew li:last-child{border-bottom:none;padding-bottom:0}.leg-meta,.crew-rank{color:var(--text-muted);font-size:.85rem}.duty-detail-indicators{margin:0;font-size:.9rem;color:var(--magenta);font-weight:600}.duty-detail-loading,.duty-detail-empty,.duty-detail-error{margin:0 0 12px;font-size:.9rem}.time-display-toggle{border:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.time-display-legend{font-weight:700;font-size:1rem;margin-bottom:4px;padding:0}.time-display-option{display:flex;align-items:flex-start;gap:8px;cursor:pointer;line-height:1.4}.time-display-option input{margin-top:3px}.time-display-toggle.compact{flex-direction:row;gap:0;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--card)}.time-display-toggle.compact button{border:none;background:transparent;color:var(--text-muted);font-size:.72rem;font-weight:700;padding:6px 10px;cursor:pointer}.time-display-toggle.compact button.active{background:var(--navy);color:#fff}.time-display-toggle.compact button:not(.active):hover{background:color-mix(in srgb,var(--border) 50%,transparent)}.roster-grid-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}.roster-grid-toolbar .section-title{margin:0}.roster-time-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.roster-time-legend{font-size:.72rem;font-weight:600}.section-title{font-size:1.25rem;margin:0 0 12px}.weekday-row{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:4px;font-size:.7rem;font-weight:700;text-align:center;color:var(--text-muted)}.roster-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.roster-cell{min-height:72px;border-radius:8px;padding:3px 4px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;border:1px solid var(--border)}.roster-cell.empty{background:transparent;border-color:transparent}.roster-cell.clickable{cursor:pointer}.roster-cell.clickable:hover{filter:brightness(.97)}.roster-cell.today{box-shadow:inset 0 0 0 2px var(--magenta)}.roster-cell.selected{outline:2px solid var(--navy);outline-offset:-2px}.cell-day{font-size:.65rem;color:var(--text-muted);align-self:flex-end;line-height:1}.roster-cell.today .cell-day{color:var(--magenta);font-weight:800}.cell-time{font-size:.5rem;font-weight:600;color:var(--text-muted);line-height:1.1}.cell-code{font-size:.55rem;font-weight:700;text-align:center;line-height:1.15;word-break:break-word;max-width:100%}.cell-indicator{font-size:.5rem;color:var(--magenta);font-weight:700;line-height:1}.cell-time-utc{color:var(--navy);font-variant-numeric:tabular-nums}.cell-time-local{font-variant-numeric:tabular-nums}.cell-time-utc:after{content:"Z";font-size:.42rem;margin-left:1px;opacity:.75}@media(prefers-color-scheme:dark){.cell-time-utc{color:#93c5fd}}@media(min-width:640px){.roster-cell{min-height:80px}.cell-code{font-size:.6rem}.cell-time{font-size:.52rem}}@media(prefers-color-scheme:dark){.roster-cell.clickable:hover{filter:brightness(1.08)}}.month-nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:12px}.month-nav button{padding:8px 14px;border-radius:8px;border:1px solid var(--border);background:var(--card);color:var(--text);cursor:pointer;font-weight:600}.month-nav span{font-weight:700}.settings-section{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:18px;margin-bottom:16px}.sync-pref-toggle{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:600}.settings-section h2{margin:0 0 12px;font-size:1rem}.module-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px;margin:20px 0}.module-card{display:flex;flex-direction:column;gap:8px;padding:20px;background:var(--card);border:1px solid var(--border);border-radius:14px;text-decoration:none;color:inherit;transition:border-color .15s,box-shadow .15s}.module-card h3{margin:0;font-size:1.05rem}.module-card p{margin:0;font-size:.9rem;line-height:1.4}.module-card-icon{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;background:var(--navy);color:#fff;font-weight:800;font-size:.85rem}.module-card-link:hover{border-color:var(--magenta);box-shadow:0 4px 16px #0000000f}.module-card-disabled{opacity:.65;cursor:default}.module-badge{align-self:flex-start;margin-top:4px;padding:2px 10px;border-radius:999px;font-size:.75rem;font-weight:600;background:var(--border);color:var(--text-muted)}.layout{min-height:100dvh;display:flex;flex-direction:column}.layout-header{display:flex;align-items:center;gap:16px;padding:12px 20px;background:var(--navy);color:#fff;flex-wrap:wrap}.layout-brand{display:flex;align-items:center;gap:10px;font-weight:700}.layout-nav{display:flex;gap:8px;flex:1;flex-wrap:wrap}.layout-nav a{color:#ffffffbf;text-decoration:none;padding:6px 12px;border-radius:8px;font-weight:600;font-size:.9rem}.layout-nav a.active,.layout-nav a:hover{color:#fff;background:#ffffff1f}.logout-btn{background:transparent;border:1px solid rgba(255,255,255,.35);color:#fff;padding:6px 12px;border-radius:8px;cursor:pointer;font-size:.85rem}.layout-main{flex:1;padding:20px;max-width:960px;width:100%;margin:0 auto}.layout-footer{padding:12px 20px;text-align:center;font-size:.8rem;border-top:1px solid var(--border)}.footer-user{display:inline-flex;align-items:center;gap:8px}.footer-avatar{width:22px;height:22px;border-radius:50%;object-fit:cover}:root{--navy: #0a1f44;--magenta: #c6007e;--bg: #f1f5f9;--card: #ffffff;--text: #0f172a;--text-muted: #64748b;--border: #e2e8f0;--danger: #dc2626;font-family:Segoe UI,system-ui,-apple-system,sans-serif;line-height:1.5}@media(prefers-color-scheme:dark){:root{--bg: #0b1220;--card: #1f2937;--text: #f8fafc;--text-muted: #94a3b8;--border: #334155}}*{box-sizing:border-box}body{margin:0;min-height:100dvh;background:var(--bg);color:var(--text)}.loading-screen{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:var(--navy);color:#fff}.brand-mark{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:16px;background:var(--magenta);font-weight:800;font-size:1.1rem;color:#fff}.brand-mark.sm{width:36px;height:36px;border-radius:10px;font-size:.85rem}.muted{color:var(--text-muted)}.error{color:var(--danger)}.btn-primary,.btn-secondary{display:inline-flex;align-items:center;justify-content:center;padding:10px 18px;border-radius:10px;border:none;font-size:1rem;font-weight:600;cursor:pointer}.btn-primary{background:var(--magenta);color:#fff}.btn-primary:disabled,.btn-secondary:disabled{opacity:.6;cursor:not-allowed}.btn-secondary{background:var(--card);color:var(--text);border:1px solid var(--border)}.btn-with-spinner{gap:8px}.btn-spinner{display:inline-block;width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:btn-spin .7s linear infinite;flex-shrink:0}.sync-progress{display:flex;align-items:center;gap:8px}@keyframes btn-spin{to{transform:rotate(360deg)}}.form-field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.form-field label{font-size:.875rem;font-weight:600}.form-field input{padding:10px 12px;border-radius:8px;border:1px solid var(--border);background:var(--card);color:var(--text);font-size:1rem}.auth-card{width:min(420px,100%);margin:0 auto;padding:28px;background:var(--card);border-radius:16px;border:1px solid var(--border);box-shadow:0 8px 24px #0000000f}.auth-page{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;background:linear-gradient(160deg,var(--navy) 0%,#1e3a5f 100%)}.auth-header{text-align:center;color:#fff;margin-bottom:24px}.auth-header h1{margin:12px 0 4px;font-size:1.75rem}.auth-header p{margin:0;opacity:.85}.banner-error{padding:10px 14px;border-radius:8px;background:#dc26261a;color:var(--danger);font-size:.9rem;margin-bottom:14px}.banner-info{padding:10px 14px;border-radius:8px;background:#2563eb1a;color:#2563eb;font-size:.9rem;margin-bottom:14px}
