/*
 * StillworkTimeOffCalendar (STOC) stylesheet.
 *
 * Minimal, system-fonts only, no JavaScript dependencies. Color palette
 * matches the time-off request form (ABAS blue). Layout is two-section:
 * a fixed-height header bar plus a centered main content column.
 */

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

:root {
    --abas-blue: #1a4a7a;
    --abas-accent: #2c7be5;
    --pmlc-accent: #2c7be5;
    --bg: #f5f6f8;
    --card: #ffffff;
    --text: #2d3436;
    --text-muted: #636e72;
    --border: #e1e4e8;
    --pending: #f4a261;
    --approved: #2a9d8f;
    --rejected: #c0392b;
    --cancelled: #95a5a6;
}

html, body {
    height: 100%;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    background: var(--bg);
    color: var(--text);
    line-height: 1.5;
    font-size: 14px;
}

a { color: var(--abas-accent); text-decoration: none; }
a:hover { text-decoration: underline; }

/* ----- Header ----- */

.stoc-header {
    background: var(--abas-blue);
    color: #fff;
    padding: 0.5rem 0;
    box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.stoc-header-inner {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 1rem;
    display: flex;
    align-items: center;
    gap: 1rem;
}
.stoc-logo {
    font-weight: 800;
    font-size: 1.1rem;
    color: #fff;
    letter-spacing: 0.05em;
}
.stoc-logo:hover { text-decoration: none; }
.stoc-tagline {
    color: rgba(255,255,255,0.7);
    font-size: 0.85rem;
}
.stoc-nav {
    display: flex;
    gap: 0.25rem;
    margin-left: 1.5rem;
}
.stoc-nav-link {
    color: rgba(255,255,255,0.85);
    padding: 0.4rem 0.85rem;
    border-radius: 4px;
    font-size: 0.88rem;
    font-weight: 600;
}
.stoc-nav-link:hover {
    background: rgba(255,255,255,0.1);
    text-decoration: none;
}
.stoc-nav-link.active {
    background: rgba(255,255,255,0.2);
    color: #fff;
}
.stoc-user {
    margin-left: auto;
    color: rgba(255,255,255,0.8);
    font-size: 0.85rem;
    padding: 0.4rem 0.65rem;
    border-radius: 4px;
}
.stoc-user:hover {
    background: rgba(255,255,255,0.1);
    color: #fff;
    text-decoration: none;
}
.stoc-nav-logout {
    color: rgba(255,255,255,0.85);
    padding: 0.4rem 0.85rem;
    font-size: 0.85rem;
}
.stoc-nav-logout:hover { color: #fff; }

/* ----- Main content ----- */

.stoc-main {
    max-width: 1200px;
    margin: 0 auto;
    padding: 1.5rem 1rem;
}

.stoc-page-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 1rem;
}
.stoc-page-header h2 {
    font-size: 1.3rem;
    font-weight: 700;
}
.stoc-page-sub {
    color: var(--text-muted);
    font-size: 0.85rem;
    font-weight: 400;
}

.stoc-filter-bar { display: flex; gap: 0.5rem; }
.stoc-filter-form {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.85rem;
}
.stoc-filter-form select {
    padding: 0.35rem 0.5rem;
    border: 1px solid var(--border);
    border-radius: 4px;
    font-family: inherit;
    font-size: 0.85rem;
    background: #fff;
}

.stoc-counts {
    display: flex;
    gap: 0.75rem;
    margin-bottom: 1rem;
    font-size: 0.85rem;
    color: var(--text-muted);
}
.stoc-count {
    padding: 0.25rem 0.6rem;
    border-radius: 4px;
    background: #fff;
    border: 1px solid var(--border);
}
.stoc-count strong { color: var(--text); }

/* ----- Tables ----- */

.stoc-table {
    width: 100%;
    background: var(--card);
    border-collapse: collapse;
    border: 1px solid var(--border);
    border-radius: 6px;
    overflow: hidden;
    font-size: 0.88rem;
}
.stoc-table thead th {
    background: #f8f9fa;
    color: var(--text-muted);
    font-weight: 600;
    text-align: left;
    padding: 0.6rem 0.75rem;
    border-bottom: 1px solid var(--border);
    font-size: 0.78rem;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}
.stoc-table tbody td {
    padding: 0.7rem 0.75rem;
    border-bottom: 1px solid var(--border);
    vertical-align: top;
}
.stoc-table tbody tr:last-child td { border-bottom: none; }
.stoc-table tbody tr:hover { background: #fafbfc; }

.stoc-table-compact td, .stoc-table-compact th { padding: 0.4rem 0.6rem; font-size: 0.82rem; }

.stoc-cell-num { font-weight: 600; color: var(--text-muted); width: 3rem; }
.stoc-cell-meta { color: var(--text-muted); font-size: 0.82rem; white-space: nowrap; }
.stoc-cell-mono { font-family: ui-monospace, "SF Mono", Menlo, monospace; font-size: 0.78rem; color: var(--text-muted); }

.stoc-employee-name { font-weight: 600; }
.stoc-employee-email { color: var(--text-muted); font-size: 0.8rem; }

/* ----- Account pill ----- */

.stoc-account-pill {
    display: inline-block;
    color: #fff;
    padding: 0.15rem 0.55rem;
    border-radius: 10px;
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.04em;
}
.stoc-account-pill-large { padding: 0.35rem 0.85rem; font-size: 0.85rem; }

/* ----- Status badge ----- */

.stoc-status {
    display: inline-block;
    padding: 0.15rem 0.55rem;
    border-radius: 10px;
    font-size: 0.72rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: #fff;
}
.stoc-status-pending { background: var(--pending); }
.stoc-status-approved { background: var(--approved); }
.stoc-status-rejected { background: var(--rejected); }
.stoc-status-cancelled { background: var(--cancelled); }
.stoc-status-verified { background: var(--approved); }
.stoc-status-superseded { background: #888; }

/* ----- Buttons ----- */

.stoc-button {
    display: inline-block;
    padding: 0.45rem 0.9rem;
    border: 1px solid var(--border);
    border-radius: 4px;
    background: #fff;
    color: var(--text);
    font-family: inherit;
    font-size: 0.85rem;
    font-weight: 600;
    cursor: pointer;
    text-decoration: none;
}
.stoc-button:hover {
    background: #f0f2f5;
    text-decoration: none;
}
.stoc-button-small { padding: 0.3rem 0.65rem; font-size: 0.78rem; }
.stoc-button-primary {
    background: var(--abas-blue);
    color: #fff;
    border-color: var(--abas-blue);
}
.stoc-button-primary:hover { background: #143962; }
.stoc-button-danger {
    background: var(--rejected);
    color: #fff;
    border-color: var(--rejected);
}
.stoc-button-danger:hover { background: #962d22; }

/* ----- Decision form (request detail page) ----- */
.stoc-decision-form label {
    display: block;
    font-weight: 600;
    font-size: 0.85rem;
    margin-bottom: 0.4rem;
    color: var(--text-muted);
}
.stoc-decision-form textarea {
    width: 100%;
    box-sizing: border-box;
    padding: 0.6rem 0.75rem;
    border: 1px solid var(--border);
    border-radius: 4px;
    font-family: inherit;
    font-size: 0.9rem;
    resize: vertical;
}
.stoc-decision-actions {
    display: flex;
    gap: 0.6rem;
    margin-top: 0.85rem;
}

/* ----- Reports page (Stage 3c) ----- */

.stoc-reports-filter-form { display: block; }
.stoc-reports-filter-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 0.75rem 1rem;
    margin-bottom: 0.85rem;
}
.stoc-reports-filter-grid label {
    display: block;
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-weight: 700;
    color: var(--text-muted);
    margin-bottom: 0.2rem;
}
.stoc-reports-filter-grid input,
.stoc-reports-filter-grid select {
    width: 100%;
    padding: 0.5rem 0.6rem;
    border: 1px solid var(--border);
    border-radius: 4px;
    font-family: inherit;
    font-size: 0.9rem;
    background: #fff;
}
.stoc-reports-filter-grid input:focus,
.stoc-reports-filter-grid select:focus {
    outline: none;
    border-color: var(--abas-accent);
    box-shadow: 0 0 0 2px rgba(44,123,229,0.15);
}
.stoc-reports-filter-actions {
    display: flex;
    gap: 0.5rem;
    align-items: center;
    margin-top: 0.25rem;
}
.stoc-reports-summary {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.6rem;
    margin: 0.85rem 0;
    font-size: 0.88rem;
    color: var(--text-muted);
}
.stoc-reports-summary strong { color: var(--text); }
.stoc-reports-cap { color: var(--rejected); font-weight: 600; }
.stoc-reports-exports { display: flex; gap: 0.5rem; }

/* ----- Detail page ----- */

.stoc-detail-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 1.25rem;
}
.stoc-detail-title h2 {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    margin-top: 0.25rem;
    font-size: 1.4rem;
}
.stoc-back-link {
    font-size: 0.82rem;
    color: var(--text-muted);
}

.stoc-detail-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 1rem;
    margin-bottom: 1rem;
}

.stoc-card {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 1rem 1.1rem;
    margin-bottom: 1rem;
}
.stoc-card h3 {
    font-size: 0.85rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--text-muted);
    margin-bottom: 0.6rem;
    font-weight: 700;
}
.stoc-card-disabled { background: #fafbfc; opacity: 0.85; }
.stoc-card-narrow { max-width: 480px; margin-left: auto; margin-right: auto; }
.stoc-card-collapsed summary {
    cursor: pointer;
    font-size: 0.82rem;
    color: var(--text-muted);
    font-weight: 600;
}

.stoc-card dl {
    display: grid;
    grid-template-columns: 7rem 1fr;
    row-gap: 0.4rem;
    font-size: 0.88rem;
}
.stoc-card dt {
    color: var(--text-muted);
    font-weight: 600;
    font-size: 0.78rem;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    padding-top: 0.1rem;
}
.stoc-card dd { word-break: break-word; }

.stoc-note {
    color: var(--text-muted);
    font-size: 0.85rem;
    font-style: italic;
}

/* ----- Generic form layout (used by Change Password and Stage 3b) ----- */

.stoc-form {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}
.stoc-form label {
    font-size: 0.78rem;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    font-weight: 700;
    color: var(--text-muted);
    margin-top: 0.5rem;
}
.stoc-form input,
.stoc-form textarea,
.stoc-form select {
    padding: 0.65rem 0.75rem;
    border: 1px solid var(--border);
    border-radius: 4px;
    font-family: inherit;
    font-size: 0.95rem;
    background: #fff;
}
.stoc-form input:focus,
.stoc-form textarea:focus,
.stoc-form select:focus {
    outline: none;
    border-color: var(--abas-accent);
    box-shadow: 0 0 0 2px rgba(44,123,229,0.15);
}
.stoc-form-hint {
    font-size: 0.78rem;
    color: var(--text-muted);
    margin-top: -0.25rem;
}
.stoc-form-actions {
    display: flex;
    gap: 0.5rem;
    margin-top: 1.25rem;
    justify-content: flex-end;
}

.stoc-raw {
    margin-top: 0.6rem;
    background: #f8f9fa;
    border: 1px solid var(--border);
    padding: 0.75rem;
    font-family: ui-monospace, "SF Mono", Menlo, monospace;
    font-size: 0.78rem;
    overflow-x: auto;
    white-space: pre-wrap;
    max-height: 400px;
    overflow-y: auto;
}

/* ----- Empty state ----- */

.stoc-empty {
    background: #fff;
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 2rem 1rem;
    text-align: center;
    color: var(--text-muted);
    font-size: 0.95rem;
}

/* ----- Flash ----- */

.stoc-flash {
    padding: 0.75rem 1rem;
    border-radius: 4px;
    margin-bottom: 1rem;
    font-size: 0.88rem;
    font-weight: 600;
}
.stoc-flash-info { background: #d1ecf1; color: #0c5460; }
.stoc-flash-success { background: #d4edda; color: #155724; }
.stoc-flash-error { background: #f8d7da; color: #721c24; }
.stoc-flash-warning { background: #fff3cd; color: #856404; }

/* ----- Footer ----- */

.stoc-footer {
    text-align: center;
    color: var(--text-muted);
    font-size: 0.78rem;
    padding: 1.5rem 0 2rem;
}
.stoc-footer p { margin: 0.15rem 0; }

.stoc-version {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.72rem;
    opacity: 0.7;
    user-select: all;
}

/* ----- Login page ----- */

.stoc-login-body {
    background: var(--abas-blue);
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
}
.stoc-login-card {
    background: #fff;
    padding: 2.5rem 2rem;
    border-radius: 8px;
    box-shadow: 0 8px 32px rgba(0,0,0,0.15);
    max-width: 380px;
    width: 100%;
}
.stoc-login-title {
    font-size: 1.6rem;
    font-weight: 800;
    color: var(--abas-blue);
    text-align: center;
    letter-spacing: 0.05em;
}
.stoc-login-tagline {
    text-align: center;
    color: var(--text-muted);
    font-size: 0.85rem;
    margin-bottom: 1.5rem;
}
.stoc-login-form {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}
.stoc-login-form label {
    font-size: 0.78rem;
    font-weight: 700;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    margin-top: 0.5rem;
}
.stoc-login-form input {
    padding: 0.6rem 0.75rem;
    border: 1px solid var(--border);
    border-radius: 4px;
    font-size: 0.95rem;
    font-family: inherit;
}
.stoc-login-form input:focus {
    outline: none;
    border-color: var(--abas-accent);
    box-shadow: 0 0 0 2px rgba(44,123,229,0.15);
}
.stoc-login-form button {
    margin-top: 1rem;
    padding: 0.7rem;
    width: 100%;
    font-size: 0.95rem;
}
.stoc-login-footnote {
    text-align: center;
    color: var(--text-muted);
    font-size: 0.75rem;
    margin-top: 1.5rem;
}

/* ============================================================
 * Mobile responsive (phones and small tablets)
 * Breakpoint: 720px. Below this, the layout collapses to a
 * single-column card-based view. Tables become stacked cards
 * via the data-label trick. Tap targets are at least 44px.
 * ============================================================ */

@media (max-width: 720px) {
    body { font-size: 15px; }

    /* Header: wrap nav onto its own row, hide tagline */
    .stoc-header-inner {
        flex-wrap: wrap;
        gap: 0.4rem;
        padding: 0 0.75rem;
    }
    .stoc-tagline { display: none; }
    .stoc-user {
        font-size: 0.78rem;
        margin-left: auto;
    }
    .stoc-nav-logout {
        font-size: 0.78rem;
        padding: 0.4rem 0.5rem;
    }
    .stoc-nav {
        order: 3;
        width: 100%;
        margin-left: 0;
        margin-top: 0.3rem;
        gap: 0;
        border-top: 1px solid rgba(255,255,255,0.15);
        padding-top: 0.4rem;
    }
    .stoc-nav-link {
        flex: 1;
        text-align: center;
        font-size: 0.85rem;
        padding: 0.55rem 0.4rem;
    }

    /* Main content padding */
    .stoc-main { padding: 1rem 0.75rem; }

    /* Page header: stack title and filter bar */
    .stoc-page-header {
        flex-direction: column;
        align-items: stretch;
        gap: 0.65rem;
    }
    .stoc-page-header h2 { font-size: 1.15rem; }

    .stoc-filter-bar { width: 100%; }
    .stoc-filter-form {
        flex-wrap: wrap;
        gap: 0.35rem 0.6rem;
    }
    .stoc-filter-form label {
        font-size: 0.78rem;
        text-transform: uppercase;
        font-weight: 700;
        color: var(--text-muted);
        letter-spacing: 0.03em;
    }
    .stoc-filter-form select {
        flex: 1;
        min-width: 130px;
        padding: 0.6rem 0.6rem;
        font-size: 0.95rem;
    }

    /* Counts strip: wrap */
    .stoc-counts { flex-wrap: wrap; }
    .stoc-count {
        flex: 1 1 auto;
        text-align: center;
        font-size: 0.82rem;
    }

    /* Tables -> stacked cards */
    .stoc-table {
        border: none;
        background: transparent;
        border-radius: 0;
    }
    .stoc-table thead { display: none; }
    .stoc-table tbody { display: block; }
    .stoc-table tbody tr {
        display: block;
        background: var(--card);
        border: 1px solid var(--border);
        border-radius: 6px;
        margin-bottom: 0.75rem;
        padding: 0.25rem 0;
        box-shadow: 0 1px 2px rgba(0,0,0,0.04);
    }
    .stoc-table tbody tr:hover { background: var(--card); }
    .stoc-table tbody td {
        display: flex;
        justify-content: space-between;
        align-items: center;
        gap: 0.75rem;
        padding: 0.55rem 0.9rem;
        border-bottom: 1px solid #f0f1f3;
        text-align: right;
        white-space: normal;
    }
    .stoc-table tbody tr td:last-child { border-bottom: none; }
    .stoc-table tbody td::before {
        content: attr(data-label);
        font-weight: 700;
        color: var(--text-muted);
        font-size: 0.7rem;
        text-transform: uppercase;
        letter-spacing: 0.04em;
        text-align: left;
        flex-shrink: 0;
    }
    .stoc-table tbody td.stoc-cell-num {
        background: #f8f9fa;
        font-weight: 700;
        color: var(--text);
    }
    .stoc-table tbody td.stoc-cell-meta {
        font-size: 0.82rem;
        white-space: normal;
    }
    .stoc-employee-name,
    .stoc-employee-email { text-align: right; }
    .stoc-table tbody td.stoc-cell-action {
        justify-content: center;
        padding: 0.75rem 0.9rem 0.6rem;
        border-bottom: none;
    }
    .stoc-table tbody td.stoc-cell-action::before { display: none; }
    .stoc-table tbody td.stoc-cell-action .stoc-button {
        width: 100%;
        text-align: center;
    }

    /* Detail page */
    .stoc-detail-header {
        flex-direction: column;
        gap: 0.7rem;
        align-items: stretch;
    }
    .stoc-detail-title h2 { font-size: 1.2rem; flex-wrap: wrap; }
    .stoc-detail-grid {
        grid-template-columns: 1fr;
        gap: 0.6rem;
    }
    .stoc-card { padding: 0.85rem 1rem; }
    .stoc-card dl {
        grid-template-columns: 5.5rem 1fr;
        row-gap: 0.5rem;
        font-size: 0.92rem;
    }

    /* Tap targets: minimum 44px height */
    .stoc-button {
        min-height: 44px;
        padding: 0.7rem 1rem;
        font-size: 0.95rem;
    }
    .stoc-button-small {
        min-height: 40px;
        padding: 0.55rem 0.85rem;
        font-size: 0.88rem;
    }

    /* Login card uses full screen edge padding */
    .stoc-login-body { padding: 1rem; }
    .stoc-login-card { padding: 2rem 1.5rem; }
    .stoc-login-form input { font-size: 16px; /* prevent iOS zoom-on-focus */ }
}

/* Extra-narrow phones (under 380px): stack dl labels above values */
@media (max-width: 380px) {
    .stoc-card dl {
        grid-template-columns: 1fr;
    }
    .stoc-card dt { padding-top: 0.5rem; }
    .stoc-table tbody td {
        flex-direction: column;
        align-items: flex-start;
        gap: 0.2rem;
        text-align: left;
    }
    .stoc-employee-name,
    .stoc-employee-email { text-align: left; }
}

/* ============================================================
 * Calendar (Phase 4 Stage 4a)
 * Month view: 7-column CSS Grid + per-event pill classes.
 * Approved pills are solid; pending pills are dashed-outline in the
 * same account color so HR can plan against asks-not-yet-decided.
 * Mobile (<=720px) collapses the grid to a single-column day list,
 * hiding empty days and out-of-month cells via :has().
 * ============================================================ */

.stoc-calendar-month-nav {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.6rem;
    margin-bottom: 0.85rem;
}
.stoc-calendar-month-nav-buttons {
    display: flex;
    gap: 0.4rem;
}

.stoc-calendar-legend {
    display: flex;
    gap: 0.85rem;
    font-size: 0.78rem;
    color: var(--text-muted);
}
.stoc-calendar-legend-item {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
}
.stoc-calendar-legend-swatch {
    display: inline-block;
    width: 14px;
    height: 14px;
    border-radius: 3px;
    box-sizing: border-box;
}
.stoc-calendar-legend-account {
    --account-color: var(--abas-blue);
    background: var(--account-color);
    border: 1px solid var(--account-color);
}
.stoc-calendar-legend-divider {
    width: 1px;
    height: 14px;
    background: var(--border);
    margin: 0 0.2rem;
    border-radius: 0;
}
.stoc-calendar-legend-approved {
    background: #6c757d;
    border: 2px solid #6c757d;
}
.stoc-calendar-legend-pending {
    background: #fff;
    border: 2px dashed #6c757d;
}

.stoc-calendar-grid {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 1px;
    background: var(--border);
    border: 1px solid var(--border);
    border-radius: 6px;
    overflow: hidden;
}

.stoc-calendar-day-header {
    background: #f8f9fa;
    padding: 0.5rem 0.6rem;
    font-size: 0.72rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--text-muted);
    text-align: center;
}

.stoc-calendar-day {
    background: var(--card);
    min-height: 110px;
    padding: 0.4rem;
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    overflow: hidden;
}
.stoc-calendar-day-out-of-month {
    background: #fafbfc;
}
.stoc-calendar-day-out-of-month .stoc-calendar-day-number,
.stoc-calendar-day-out-of-month .stoc-calendar-event {
    opacity: 0.55;
}
.stoc-calendar-day-weekend {
    background: #f6f8fa;
}
.stoc-calendar-day-out-of-month.stoc-calendar-day-weekend {
    background: #f2f4f7;
}
.stoc-calendar-day-today {
    box-shadow: inset 0 0 0 2px var(--abas-accent);
}

.stoc-calendar-day-number {
    display: flex;
    align-items: baseline;
    justify-content: flex-end;
    gap: 0.3rem;
    font-size: 0.78rem;
    font-weight: 700;
    color: var(--text-muted);
    padding: 0 0.15rem;
    flex-shrink: 0;
}
.stoc-calendar-day-num {
    font-size: 0.85rem;
}
.stoc-calendar-day-weekday {
    display: none; /* Desktop hides; mobile reveals via media query below */
}
.stoc-calendar-day-month {
    font-size: 0.7rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--abas-accent);
}
.stoc-calendar-day-today .stoc-calendar-day-num {
    color: var(--abas-accent);
}

.stoc-calendar-day-events {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    overflow: hidden;
}

.stoc-calendar-event {
    --account-color: var(--abas-blue);
    display: block;
    padding: 0.18rem 0.45rem;
    border-radius: 3px;
    font-size: 0.74rem;
    font-weight: 600;
    line-height: 1.3;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    text-decoration: none;
    border: 2px solid transparent;
}
.stoc-calendar-event:hover {
    text-decoration: none;
    filter: brightness(1.08);
}
.stoc-calendar-event-approved {
    background: var(--account-color);
    color: #fff;
    border-color: var(--account-color);
}
.stoc-calendar-event-pending {
    background: #fff;
    color: var(--account-color);
    border: 2px dashed var(--account-color);
}
/* Gusto overlay event (Phase 6 item 7, DEC-019). Per-account hue at
   reduced opacity, cursor: default since these are informational (no link). */
.stoc-calendar-event-gusto {
    background: var(--account-color);
    color: #fff;
    border: 1px solid var(--account-color);
    opacity: 0.42;
    cursor: default;
    font-weight: 500;
}
.stoc-calendar-event-gusto:hover {
    opacity: 0.62;
    filter: none;
}
.stoc-calendar-legend-gusto {
    --account-color: #6c757d;
    background: var(--account-color);
    border: 1px solid var(--account-color);
    opacity: 0.42;
}
/* Phase 7 callout layer (DEC-021). Red bordered pill at full opacity, sits
   on top of the account-colored layer so callouts are unmistakable. */
.stoc-calendar-event-callout {
    background: #dc3545;
    color: #fff;
    border-color: #dc3545;
}
.stoc-calendar-event-callout:hover {
    background: #b02a37;
    border-color: #b02a37;
}
.stoc-calendar-legend-callout {
    background: #dc3545;
    border: 2px solid #dc3545;
}
.stoc-tg-allday-banner.stoc-calendar-event-callout,
.stoc-tg-event.stoc-calendar-event-callout {
    background: #dc3545;
    color: #fff;
    border: 1px solid #dc3545;
}
.stoc-calendar-toggle-on {
    background: #e9f5ff;
}

.stoc-calendar-empty {
    margin-top: 1rem;
}

/* Calendar mobile: single-column day list, hide empty and out-of-month */
@media (max-width: 720px) {
    .stoc-calendar-month-nav {
        flex-direction: column;
        align-items: stretch;
    }
    .stoc-calendar-month-nav-buttons {
        justify-content: space-between;
        gap: 0.35rem;
    }
    .stoc-calendar-month-nav-buttons .stoc-button {
        flex: 1;
        text-align: center;
    }
    .stoc-calendar-legend {
        justify-content: center;
    }

    .stoc-calendar-grid {
        display: block;
        background: transparent;
        border: none;
        border-radius: 0;
        gap: 0;
    }
    .stoc-calendar-day-header {
        display: none;
    }
    .stoc-calendar-day {
        display: flex;
        flex-direction: row;
        align-items: flex-start;
        gap: 0.7rem;
        min-height: auto;
        padding: 0.7rem 0.85rem;
        margin-bottom: 0.5rem;
        background: var(--card);
        border: 1px solid var(--border);
        border-radius: 6px;
        box-shadow: 0 1px 2px rgba(0,0,0,0.04);
    }
    /* Hide noise: out-of-month days and any cell with no events. The
     * grid still emits 42 cells but mobile only surfaces the ones that
     * matter for planning. Uses :has() for the empty-day predicate
     * (Safari 15.4+, Chrome 105+, Firefox 121+). */
    .stoc-calendar-day-out-of-month {
        display: none;
    }
    .stoc-calendar-day:not(:has(.stoc-calendar-day-events)) {
        display: none;
    }
    .stoc-calendar-day-weekend {
        background: #f8f9fa;
    }
    .stoc-calendar-day-today {
        box-shadow: 0 0 0 2px var(--abas-accent);
    }

    .stoc-calendar-day-number {
        flex-direction: row;
        justify-content: flex-start;
        align-items: baseline;
        flex-shrink: 0;
        min-width: 4.5rem;
        font-size: 0.95rem;
        gap: 0.35rem;
        padding: 0;
    }
    .stoc-calendar-day-weekday {
        display: inline;
        font-size: 0.72rem;
        text-transform: uppercase;
        letter-spacing: 0.04em;
        color: var(--text-muted);
    }
    .stoc-calendar-day-num {
        font-size: 1.1rem;
        color: var(--text);
    }
    .stoc-calendar-day-today .stoc-calendar-day-num {
        color: var(--abas-accent);
    }

    .stoc-calendar-day-events {
        flex: 1;
        min-width: 0;
        gap: 0.35rem;
    }
    .stoc-calendar-event {
        font-size: 0.88rem;
        padding: 0.55rem 0.75rem;
        white-space: normal;
        min-height: 40px;
        display: flex;
        align-items: center;
    }
}

/* ============================================================
 * Calendar Stage 4b: view subnav, week view, day view.
 *
 * Time-grid views (week and day) share the same layout: a hour-axis
 * column on the left and 1 (day view) or 7 (week view) day columns
 * on the right. Hour rows are 48px tall. Events render as absolute-
 * positioned blocks inside relative-positioned day columns. Late-
 * arrival, early-release, and unavailability blocks use the per-
 * account workday hours from migration_002 (DEC-016) for their time
 * bounds. Full-day and multi-day events render as horizontal banners
 * in the all-day section above the time grid. Approved blocks are
 * solid in the per-account display color; pending blocks are dashed-
 * outline in the same color (DEC-017), reusing the .stoc-calendar-
 * event-approved/pending classes from Stage 4a.
 * ============================================================ */

.stoc-calendar-view-subnav {
    display: inline-flex;
    background: #eef1f5;
    border-radius: 6px;
    padding: 2px;
    gap: 2px;
}
.stoc-calendar-view-link {
    display: inline-block;
    padding: 0.32rem 0.85rem;
    font-size: 0.82rem;
    font-weight: 600;
    color: var(--text-muted);
    border-radius: 4px;
    text-decoration: none;
    line-height: 1.3;
}
.stoc-calendar-view-link:hover {
    text-decoration: none;
    background: rgba(255,255,255,0.7);
    color: var(--text);
}
.stoc-calendar-view-link.active {
    background: var(--card);
    color: var(--abas-blue);
    box-shadow: 0 1px 2px rgba(0,0,0,0.08);
}

/* Time-grid container */
.stoc-tg {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 6px;
    overflow: hidden;
}

.stoc-tg-header {
    display: grid;
    background: #f8f9fa;
    border-bottom: 1px solid var(--border);
}
.stoc-tg-header-corner {
    border-right: 1px solid var(--border);
}
.stoc-tg-header-day {
    padding: 0.55rem 0.6rem;
    text-align: center;
    border-right: 1px solid var(--border);
    font-size: 0.78rem;
    color: var(--text-muted);
    line-height: 1.2;
}
.stoc-tg-header-day:last-child {
    border-right: none;
}
.stoc-tg-header-dow {
    display: block;
    font-size: 0.7rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    font-weight: 700;
}
.stoc-tg-header-num {
    display: block;
    font-size: 1.1rem;
    font-weight: 700;
    color: var(--text);
    margin-top: 0.1rem;
}
.stoc-tg-header-day-today .stoc-tg-header-num {
    color: var(--abas-accent);
}
.stoc-tg-header-day-today {
    background: rgba(44, 123, 229, 0.06);
}
.stoc-tg-header-day-nonwork {
    background: #f1f3f5;
}
.stoc-tg-header-day-nonwork .stoc-tg-header-num {
    color: var(--text-muted);
    font-weight: 600;
}

/* All-day banner section */
.stoc-tg-allday {
    display: grid;
    grid-auto-rows: 26px;
    gap: 3px;
    padding: 6px 0;
    background: #fbfbfd;
    border-bottom: 1px solid var(--border);
    max-height: 130px;
    overflow-y: auto;
}
.stoc-tg-allday-label {
    grid-column: 1;
    grid-row: 1 / -1;
    font-size: 0.7rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--text-muted);
    text-align: right;
    padding-right: 0.55rem;
    align-self: start;
    border-right: 1px solid var(--border);
    height: 100%;
    display: flex;
    align-items: flex-start;
    justify-content: flex-end;
    padding-top: 0.25rem;
}
.stoc-tg-allday-banner {
    --account-color: var(--abas-blue);
    display: flex;
    align-items: center;
    padding: 0 0.55rem;
    margin: 0 2px;
    font-size: 0.76rem;
    font-weight: 600;
    line-height: 1.2;
    border-radius: 3px;
    text-decoration: none;
    border: 2px solid transparent;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.stoc-tg-allday-banner:hover {
    text-decoration: none;
    filter: brightness(1.08);
}
.stoc-tg-allday-banner.stoc-calendar-event-approved {
    background: var(--account-color);
    color: #fff;
    border-color: var(--account-color);
}
.stoc-tg-allday-banner.stoc-calendar-event-pending {
    background: #fff;
    color: var(--account-color);
    border: 2px dashed var(--account-color);
}
.stoc-tg-allday-banner.stoc-calendar-event-gusto {
    background: var(--account-color);
    color: #fff;
    border-color: var(--account-color);
    opacity: 0.42;
    cursor: default;
    font-weight: 500;
}
.stoc-tg-allday-banner.stoc-calendar-event-gusto:hover {
    opacity: 0.62;
    filter: none;
}

/* Time-grid body: hour axis + day columns */
.stoc-tg-grid {
    display: grid;
    --tg-axis-height: 432px;
}

.stoc-tg-axis {
    position: relative;
    border-right: 1px solid var(--border);
    background: #f8f9fa;
}
.stoc-tg-axis-hour {
    height: 48px;
    padding: 2px 0.45rem 0 0;
    text-align: right;
    font-size: 0.7rem;
    color: var(--text-muted);
    font-weight: 600;
    border-bottom: 1px dotted transparent;
    line-height: 1;
}

.stoc-tg-day-col {
    position: relative;
    border-right: 1px solid var(--border);
    /*
     * Hour gridlines as a repeating linear gradient: a 1px solid line
     * at the top of each 48px hour row. Cheap and consistent across
     * all visible day columns without needing 24 child elements.
     */
    background-image: linear-gradient(
        to bottom,
        var(--border) 0,
        var(--border) 1px,
        transparent 1px,
        transparent 48px
    );
    background-size: 100% 48px;
}
.stoc-tg-day-col:last-child {
    border-right: none;
}
.stoc-tg-day-col-today {
    background-color: rgba(44, 123, 229, 0.04);
}
.stoc-tg-day-col-nonwork {
    background-color: #f5f6f8;
}

/* Event blocks (positioned absolutely inside their day column) */
.stoc-tg-event {
    --account-color: var(--abas-blue);
    position: absolute;
    box-sizing: border-box;
    padding: 0.25rem 0.4rem;
    border-radius: 3px;
    font-size: 0.74rem;
    font-weight: 600;
    line-height: 1.2;
    text-decoration: none;
    overflow: hidden;
    border: 2px solid transparent;
    display: flex;
    flex-direction: column;
    gap: 1px;
}
.stoc-tg-event:hover {
    text-decoration: none;
    filter: brightness(1.08);
    z-index: 5;
}
.stoc-tg-event.stoc-calendar-event-approved {
    background: var(--account-color);
    color: #fff;
    border-color: var(--account-color);
}
.stoc-tg-event.stoc-calendar-event-pending {
    background: #fff;
    color: var(--account-color);
    border: 2px dashed var(--account-color);
}
.stoc-tg-event-title {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.stoc-tg-event-sub {
    display: block;
    font-size: 0.66rem;
    font-weight: 500;
    opacity: 0.85;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Mobile collapse for the week view: stack day columns vertically as
 * separate cards, each card showing the hour axis + a single day's
 * events. Day view already has a single column, so the only change is
 * shrinking the hour-axis width and tightening padding. */
@media (max-width: 720px) {
    .stoc-calendar-view-subnav {
        align-self: center;
    }
    .stoc-calendar-view-link {
        padding: 0.4rem 1rem;
        font-size: 0.85rem;
    }

    .stoc-tg[data-view="week"] .stoc-tg-header,
    .stoc-tg[data-view="week"] .stoc-tg-grid,
    .stoc-tg[data-view="week"] .stoc-tg-allday {
        grid-template-columns: 48px 1fr !important;
    }
    /*
     * Week view on mobile: render only the first day's column. The
     * other day columns and headers are visually hidden via :nth-child
     * selectors that target their grid position. Users navigate to
     * other days using the day view + prev/next nav.
     *
     * Practically: for HR planning on a phone, day view + the prev/
     * next nav is the natural shape. Week view collapses gracefully
     * by acting like a wide single-column day view of its first day.
     */
    .stoc-tg[data-view="week"] .stoc-tg-header-day:not(:nth-child(2)),
    .stoc-tg[data-view="week"] .stoc-tg-day-col:not(:nth-child(2)) {
        display: none;
    }
    .stoc-tg[data-view="week"] .stoc-tg-allday-banner {
        /*
         * Banners that span multiple days collapse to spanning column 2
         * only since the other day columns are hidden. CSS Grid auto-
         * clamps grid-column overflows, so this is mostly a safety net.
         */
        grid-column: 2 !important;
    }

    .stoc-tg-axis {
        font-size: 0.62rem;
    }
    .stoc-tg-axis-hour {
        padding-right: 0.25rem;
    }
    .stoc-tg-event {
        font-size: 0.78rem;
        padding: 0.3rem 0.45rem;
    }
    .stoc-tg-event-sub {
        font-size: 0.7rem;
    }
    .stoc-tg-allday-label {
        font-size: 0.62rem;
        padding-right: 0.25rem;
    }
    .stoc-tg-allday-banner {
        font-size: 0.8rem;
    }
}

/* ============================================================
 * Phase 5: iCal subscription tokens page
 * Styles for ?page=tokens (web/pages/tokens.php).
 * ============================================================ */
.stoc-page-title {
    margin: 0 0 0.5rem 0;
    font-size: 1.5rem;
    color: #1f2d3d;
}
.stoc-page-intro {
    margin: 0 0 1.5rem 0;
    color: #5a6473;
    max-width: 60ch;
    line-height: 1.5;
}
.stoc-token-issued {
    background: #fff8db;
    border: 2px solid #f0c419;
    border-radius: 6px;
    padding: 1rem 1.25rem;
    margin-bottom: 1.5rem;
}
.stoc-token-issued h2 {
    margin: 0 0 0.5rem 0;
    font-size: 1.1rem;
    color: #6b4e00;
}
.stoc-token-warning {
    margin: 0 0 0.75rem 0;
    color: #6b4e00;
    font-size: 0.92rem;
}
.stoc-token-label {
    display: block;
    font-size: 0.78rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: #6b4e00;
    margin-bottom: 0.25rem;
}
.stoc-token-url {
    width: 100%;
    padding: 0.6rem 0.75rem;
    font-family: ui-monospace, "SF Mono", Menlo, monospace;
    font-size: 0.85rem;
    border: 1px solid #d4b54f;
    border-radius: 4px;
    background: #fff;
    color: #1f2d3d;
}
.stoc-token-hint {
    margin: 0.75rem 0 0 0;
    font-size: 0.88rem;
    color: #6b4e00;
}
.stoc-token-issue {
    background: #f7f9fc;
    border: 1px solid #e1e7ef;
    border-radius: 6px;
    padding: 1.25rem 1.5rem;
    margin-bottom: 2rem;
}
.stoc-token-issue h2 {
    margin: 0 0 1rem 0;
    font-size: 1.1rem;
    color: #1f2d3d;
}
.stoc-token-form {
    display: grid;
    grid-template-columns: max-content 1fr;
    gap: 0.75rem 1rem;
    align-items: center;
    max-width: 640px;
}
.stoc-token-form label {
    font-weight: 500;
    color: #3a4453;
    font-size: 0.92rem;
}
.stoc-token-form input[type="text"],
.stoc-token-form select {
    padding: 0.5rem 0.7rem;
    border: 1px solid #c8d1dc;
    border-radius: 4px;
    font-size: 0.95rem;
    background: #fff;
}
.stoc-token-form button {
    grid-column: 2;
    justify-self: start;
    margin-top: 0.25rem;
}
.stoc-token-list h2 {
    margin: 0 0 1rem 0;
    font-size: 1.1rem;
    color: #1f2d3d;
}
.stoc-token-counts {
    font-size: 0.85rem;
    font-weight: normal;
    color: #6b7587;
}
.stoc-token-table {
    width: 100%;
}
.stoc-token-table .stoc-row-revoked {
    opacity: 0.55;
}
.stoc-empty-state {
    padding: 1.5rem;
    text-align: center;
    color: #6b7587;
    background: #f7f9fc;
    border: 1px dashed #c8d1dc;
    border-radius: 6px;
}
.stoc-text-muted {
    color: #9aa3b0;
}
.stoc-inline-form {
    display: inline;
    margin: 0;
}

@media (max-width: 720px) {
    .stoc-token-form {
        grid-template-columns: 1fr;
    }
    .stoc-token-form button {
        grid-column: 1;
    }
}

/* ── SMS Alert Settings ─────────────────────────────────────────── */

.stoc-sms-section {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 1.25rem;
    margin-bottom: 1rem;
}
.stoc-sms-section h2 {
    font-size: 1rem;
    font-weight: 700;
    color: var(--abas-blue);
    margin-bottom: 0.75rem;
}
.stoc-sms-phone-row {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
}
.stoc-sms-phone-input {
    flex: 0 1 280px;
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--border);
    border-radius: 6px;
    font-size: 0.9rem;
    font-family: inherit;
}
.stoc-sms-phone-input:focus {
    outline: none;
    border-color: var(--abas-accent);
    box-shadow: 0 0 0 2px rgba(44,123,229,0.15);
}
.stoc-sms-phone-hint {
    font-size: 0.8rem;
    color: var(--text-muted);
}
.stoc-sms-sub-hint {
    font-size: 0.85rem;
    color: var(--text-muted);
    margin-bottom: 0.75rem;
}
.stoc-sms-table {
    width: 100%;
}
.stoc-sms-alert-col {
    text-align: center;
    width: 140px;
}
.stoc-sms-check-cell {
    text-align: center;
}
.stoc-sms-check-cell input[type="checkbox"] {
    width: 18px;
    height: 18px;
    cursor: pointer;
    accent-color: var(--abas-accent);
}
.stoc-sms-check-label {
    display: none; /* visible only on mobile via data-label */
}
.stoc-sms-actions {
    margin-top: 0.5rem;
    margin-bottom: 1rem;
}
.stoc-sms-test {
    border-left: 3px solid var(--abas-accent);
}
.stoc-sms-test p {
    font-size: 0.9rem;
    margin-bottom: 0.75rem;
}
.stoc-button-secondary {
    display: inline-block;
    padding: 0.5rem 1.25rem;
    background: #fff;
    color: var(--abas-blue);
    border: 1px solid var(--abas-blue);
    border-radius: 6px;
    font-size: 0.85rem;
    font-weight: 600;
    cursor: pointer;
    text-decoration: none;
}
.stoc-button-secondary:hover {
    background: rgba(26,74,122,0.05);
}

@media (max-width: 720px) {
    .stoc-sms-table thead { display: none; }
    .stoc-sms-table tr {
        display: block;
        margin-bottom: 0.75rem;
        border: 1px solid var(--border);
        border-radius: 6px;
        padding: 0.75rem;
    }
    .stoc-sms-table td {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 0.35rem 0;
        border: none;
    }
    .stoc-sms-table td::before {
        content: attr(data-label);
        font-weight: 600;
        font-size: 0.8rem;
        color: var(--text-muted);
    }
    .stoc-sms-check-label { display: none; }
    .stoc-sms-check-cell { text-align: right; }
}

/* ----- Gusto upload (Phase 6, DEC-019) ----- */

.stoc-gusto-counts table th {
    text-align: left;
    font-weight: 500;
}
.stoc-gusto-counts table td {
    text-align: right;
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    width: 6rem;
}
.stoc-gusto-sha {
    font-family: ui-monospace, "SF Mono", Menlo, monospace;
    font-size: 0.72rem;
    word-break: break-all;
}
.stoc-gusto-actions {
    justify-content: space-between;
}
.stoc-gusto-policy-form {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
    margin-top: 0.5rem;
    padding: 0.5rem;
    background: #fff;
    border: 1px solid var(--border);
    border-radius: 4px;
}
.stoc-gusto-policy-name {
    flex: 1 1 14rem;
    font-size: 0.88rem;
}
.stoc-gusto-policy-label {
    flex: 1 1 10rem;
    padding: 0.3rem 0.5rem;
    font-size: 0.85rem;
    border: 1px solid var(--border);
    border-radius: 4px;
}
