@import url("https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap");

/* ================================================================== */
/* Operari — Client Portal Stylesheet                                */
/* Self-contained, consumer-friendly design. Does NOT depend on        */
/* the admin portal's style.css.                                       */
/* ================================================================== */

/* ── Design Tokens ─────────────────────────────────────────────────── */

:root {
    --cp-primary: #1e3a5f;
    --cp-primary-light: #264b7a;
    --cp-action: #2563eb;
    --cp-action-hover: #1d4ed8;
    --cp-bg: #f8fafc;
    --cp-surface: #ffffff;
    --cp-text: #1e293b;
    --cp-text-secondary: #475569;
    --cp-text-muted: #94a3b8;
    --cp-border: #e2e8f0;
    --cp-border-light: #f1f5f9;
    --cp-success: #16a34a;
    --cp-success-bg: #f0fdf4;
    --cp-success-border: #bbf7d0;
    --cp-error: #dc2626;
    --cp-error-bg: #fef2f2;
    --cp-error-border: #fecaca;
    --cp-warning: #d97706;
    --cp-warning-bg: #fffbeb;
    --cp-warning-border: #fde68a;
    --cp-info-bg: #eff6ff;
    --cp-info-border: #bfdbfe;
    --cp-radius: 12px;
    --cp-radius-sm: 8px;
    --cp-radius-xs: 6px;
    --cp-shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
    --cp-shadow-lg:
        0 4px 16px rgba(0, 0, 0, 0.08), 0 2px 6px rgba(0, 0, 0, 0.04);
    --cp-shadow-xl:
        0 12px 32px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06);
    --cp-font:
        "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
        "Helvetica Neue", Arial, sans-serif;
    --cp-font-brand:
        "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;
    --cp-transition: 150ms ease;
}

/* ── Reset ─────────────────────────────────────────────────────────── */

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

html {
    font-size: 16px;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

body {
    font-family: var(--cp-font);
    font-size: 1rem;
    line-height: 1.6;
    color: var(--cp-text);
    background: var(--cp-bg);
}

a {
    color: var(--cp-action);
    text-decoration: none;
    transition: color var(--cp-transition);
}

a:hover {
    color: var(--cp-action-hover);
}

img,
svg {
    display: block;
    max-width: 100%;
}

/* ── Header ────────────────────────────────────────────────────────── */

.cp-header {
    background: var(--cp-primary);
    color: #fff;
    padding: 0 1.5rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 64px;
    position: sticky;
    top: 0;
    z-index: 100;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}

.cp-brand {
    font-family: var(--cp-font-brand);
    font-weight: 700;
    font-size: 1.15rem;
    letter-spacing: 0.15em;
    text-transform: uppercase;
    color: #fff;
    text-decoration: none;
}

.cp-nav {
    display: flex;
    gap: 0.25rem;
    align-items: center;
}

.cp-nav-link {
    color: rgba(255, 255, 255, 0.75);
    text-decoration: none;
    font-size: 0.95rem;
    font-weight: 500;
    padding: 0.5rem 0.75rem;
    border-radius: var(--cp-radius-xs);
    transition:
        color var(--cp-transition),
        background var(--cp-transition);
}

.cp-nav-link:hover {
    color: #fff;
    background: rgba(255, 255, 255, 0.1);
}

.cp-nav-link.active {
    color: #fff;
    background: rgba(255, 255, 255, 0.15);
}

.cp-nav-logout {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    background: rgba(255, 255, 255, 0.1);
    border: 1px solid rgba(255, 255, 255, 0.15);
    color: rgba(255, 255, 255, 0.85);
    padding: 0.4rem 0.85rem;
    border-radius: var(--cp-radius-xs);
    cursor: pointer;
    font-size: 0.875rem;
    font-weight: 500;
    font-family: inherit;
    margin-left: 0.5rem;
    transition:
        color var(--cp-transition),
        background var(--cp-transition);
}

.cp-nav-logout:hover {
    background: rgba(255, 255, 255, 0.2);
    color: #fff;
}

.cp-nav-form {
    display: inline;
    margin: 0;
    padding: 0;
}

/* ── Main Content ──────────────────────────────────────────────────── */

.cp-main {
    max-width: 720px;
    margin: 0 auto;
    padding: 2.5rem 1.5rem 4rem;
}

/* ── Page Header ───────────────────────────────────────────────────── */

.cp-page-title {
    font-size: 1.75rem;
    font-weight: 700;
    color: var(--cp-primary);
    line-height: 1.3;
    margin-bottom: 0.25rem;
}

.cp-page-subtitle {
    font-size: 1rem;
    color: var(--cp-text-secondary);
    margin-bottom: 2rem;
}

/* ── Callout / Info Banner ─────────────────────────────────────────── */

.cp-callout {
    background: var(--cp-info-bg);
    border: 1px solid var(--cp-info-border);
    border-radius: var(--cp-radius);
    padding: 1rem 1.25rem;
    margin-bottom: 2rem;
    display: flex;
    align-items: center;
    gap: 0.75rem;
    font-size: 0.95rem;
    color: var(--cp-text);
}

.cp-callout svg {
    flex-shrink: 0;
    color: var(--cp-action);
}

.cp-callout a {
    font-weight: 600;
}

/* ── Card Stack ────────────────────────────────────────────────────── */

.cp-card-stack {
    display: flex;
    flex-direction: column;
    gap: 1.25rem;
}

/* ── Cards ─────────────────────────────────────────────────────────── */

.cp-card {
    background: var(--cp-surface);
    border: 1px solid var(--cp-border);
    border-radius: var(--cp-radius);
    padding: 1.5rem;
    box-shadow: var(--cp-shadow);
    transition: box-shadow var(--cp-transition);
}

.cp-card:hover {
    box-shadow: var(--cp-shadow-lg);
}

.cp-card-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 1rem;
}

.cp-card-title {
    font-weight: 600;
    font-size: 1.1rem;
    color: var(--cp-primary);
}

.cp-card-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.75rem;
    font-size: 0.95rem;
    color: var(--cp-text-secondary);
    line-height: 1.5;
}

.cp-card-label {
    color: var(--cp-text-muted);
    font-size: 0.85rem;
    display: block;
    margin-bottom: 0.1rem;
}

.cp-card-value {
    color: var(--cp-text);
    font-weight: 500;
}

.cp-card-full {
    grid-column: 1 / -1;
}

/* ── Invoice Card (specialized) ────────────────────────────────────── */

.cp-invoice-card {
    background: var(--cp-surface);
    border: 1px solid var(--cp-border);
    border-radius: var(--cp-radius);
    padding: 1.25rem 1.5rem;
    box-shadow: var(--cp-shadow);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    transition: box-shadow var(--cp-transition);
}

.cp-invoice-card:hover {
    box-shadow: var(--cp-shadow-lg);
}

.cp-invoice-amount {
    font-size: 1.35rem;
    font-weight: 700;
    color: var(--cp-primary);
    white-space: nowrap;
}

.cp-invoice-meta {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
}

.cp-invoice-dates {
    font-size: 0.875rem;
    color: var(--cp-text-muted);
}

/* ── Badges ────────────────────────────────────────────────────────── */

.cp-badge {
    display: inline-flex;
    align-items: center;
    padding: 0.3rem 0.75rem;
    border-radius: 999px;
    font-size: 0.8rem;
    font-weight: 600;
    letter-spacing: 0.02em;
    white-space: nowrap;
    line-height: 1;
}

.cp-badge-scheduled {
    background: var(--cp-info-bg);
    color: var(--cp-action);
    border: 1px solid var(--cp-info-border);
}

.cp-badge-in_progress,
.cp-badge-in-progress,
.cp-badge-en-route {
    background: var(--cp-warning-bg);
    color: var(--cp-warning);
    border: 1px solid var(--cp-warning-border);
}

.cp-badge-completed,
.cp-badge-paid {
    background: var(--cp-success-bg);
    color: var(--cp-success);
    border: 1px solid var(--cp-success-border);
}

.cp-badge-cancelled,
.cp-badge-overdue,
.cp-badge-void {
    background: var(--cp-error-bg);
    color: var(--cp-error);
    border: 1px solid var(--cp-error-border);
}

.cp-badge-draft,
.cp-badge-sent {
    background: #f8fafc;
    color: var(--cp-text-secondary);
    border: 1px solid var(--cp-border);
}

/* ── Empty State ───────────────────────────────────────────────────── */

.cp-empty {
    text-align: center;
    padding: 4rem 1.5rem;
}

.cp-empty-icon {
    width: 64px;
    height: 64px;
    margin: 0 auto 1.5rem;
    color: var(--cp-text-muted);
    opacity: 0.6;
}

.cp-empty-title {
    font-size: 1.2rem;
    font-weight: 600;
    color: var(--cp-text);
    margin-bottom: 0.5rem;
}

.cp-empty-text {
    font-size: 1rem;
    color: var(--cp-text-secondary);
    max-width: 360px;
    margin: 0 auto;
    line-height: 1.6;
}

/* ── Materials Toggle ──────────────────────────────────────────────── */

.cp-materials {
    margin-top: 1rem;
    border-top: 1px solid var(--cp-border-light);
    padding-top: 0.75rem;
}

.cp-materials summary {
    cursor: pointer;
    font-weight: 600;
    font-size: 0.9rem;
    color: var(--cp-action);
    padding: 0.25rem 0;
    list-style: none;
    display: flex;
    align-items: center;
    gap: 0.35rem;
}

.cp-materials summary::-webkit-details-marker {
    display: none;
}

.cp-materials summary::before {
    content: "▸";
    display: inline-block;
    transition: transform var(--cp-transition);
}

.cp-materials[open] summary::before {
    transform: rotate(90deg);
}

.cp-materials-list {
    margin-top: 0.75rem;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.cp-material-item {
    background: var(--cp-bg);
    border-radius: var(--cp-radius-sm);
    padding: 0.75rem 1rem;
    font-size: 0.875rem;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.35rem;
}

.cp-material-name {
    font-weight: 600;
    color: var(--cp-text);
    grid-column: 1 / -1;
    margin-bottom: 0.15rem;
}

.cp-material-detail {
    color: var(--cp-text-secondary);
}

.cp-material-detail span {
    color: var(--cp-text-muted);
    font-size: 0.8rem;
}

/* ── Login Page ────────────────────────────────────────────────────── */

.cp-login-page {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1.5rem;
    overflow-y: auto;
    background: linear-gradient(135deg, #1e3a5f 0%, #2563eb 100%);
}

.cp-login-card {
    background: var(--cp-surface);
    border-radius: 16px;
    box-shadow: var(--cp-shadow-xl);
    padding: 3rem 2.5rem;
    width: 100%;
    max-width: 420px;
}

.cp-login-brand {
    font-family: var(--cp-font-brand);
    text-align: center;
    font-size: 1.6rem;
    font-weight: 700;
    letter-spacing: 0.15em;
    text-transform: uppercase;
    color: var(--cp-primary);
    margin-bottom: 0.35rem;
}

.cp-login-subtitle {
    text-align: center;
    color: var(--cp-text-muted);
    font-size: 0.95rem;
    margin-bottom: 2.25rem;
}

.cp-login-error {
    background: var(--cp-error-bg);
    border: 1px solid var(--cp-error-border);
    color: var(--cp-error);
    padding: 0.85rem 1rem;
    border-radius: var(--cp-radius-sm);
    margin-bottom: 1.5rem;
    font-size: 0.9rem;
    font-weight: 500;
}

/* ── Form Elements ─────────────────────────────────────────────────── */

.cp-form-group {
    margin-bottom: 1.5rem;
}

.cp-form-label {
    display: block;
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--cp-text);
    margin-bottom: 0.4rem;
}

.cp-form-input {
    width: 100%;
    padding: 0.75rem 1rem;
    font-size: 1rem;
    font-family: inherit;
    border: 1px solid var(--cp-border);
    border-radius: var(--cp-radius-sm);
    background: var(--cp-surface);
    color: var(--cp-text);
    transition:
        border-color var(--cp-transition),
        box-shadow var(--cp-transition);
    -webkit-appearance: none;
    appearance: none;
}

.cp-form-input:focus {
    outline: none;
    border-color: var(--cp-action);
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
}

.cp-form-input::placeholder {
    color: var(--cp-text-muted);
}

.cp-login-btn {
    display: block;
    width: 100%;
    padding: 0.85rem 1rem;
    font-size: 1rem;
    font-weight: 600;
    font-family: inherit;
    color: #fff;
    background: var(--cp-action);
    border: none;
    border-radius: var(--cp-radius-sm);
    cursor: pointer;
    transition: background var(--cp-transition);
    margin-top: 0.5rem;
}

.cp-login-btn:hover {
    background: var(--cp-action-hover);
}

/* ── Responsive ────────────────────────────────────────────────────── */

@media (max-width: 768px) {
    .cp-header {
        padding: 0 1rem;
        height: 56px;
    }

    .cp-brand {
        font-size: 1rem;
    }

    .cp-nav {
        gap: 0.15rem;
    }

    .cp-nav-link {
        font-size: 0.85rem;
        padding: 0.4rem 0.5rem;
    }

    .cp-nav-logout {
        font-size: 0.8rem;
        padding: 0.35rem 0.6rem;
        margin-left: 0.25rem;
    }

    .cp-main {
        padding: 1.75rem 1rem 3rem;
    }

    .cp-page-title {
        font-size: 1.4rem;
    }

    .cp-card {
        padding: 1.25rem;
    }

    .cp-card-grid {
        grid-template-columns: 1fr;
    }

    .cp-invoice-card {
        flex-direction: column;
        align-items: flex-start;
    }

    .cp-material-item {
        grid-template-columns: 1fr;
    }

    .cp-company-card {
        padding: 1.25rem;
    }
}

@media (max-width: 480px) {
    .cp-header {
        height: 52px;
        padding: 0 0.75rem;
    }

    .cp-nav-link {
        font-size: 0.78rem;
        padding: 0.35rem 0.4rem;
    }

    .cp-nav-logout {
        font-size: 0.75rem;
        padding: 0.3rem 0.5rem;
    }

    .cp-main {
        padding: 1.25rem 0.75rem 2.5rem;
    }

    .cp-page-title {
        font-size: 1.25rem;
    }

    .cp-page-subtitle {
        font-size: 0.9rem;
    }

    .cp-card {
        padding: 1rem;
        border-radius: var(--cp-radius-sm);
    }

    .cp-invoice-card {
        padding: 1rem;
        border-radius: var(--cp-radius-sm);
    }

    .cp-callout {
        padding: 0.85rem 1rem;
        font-size: 0.9rem;
    }

    .cp-login-card {
        padding: 2rem 1.5rem;
    }

    .cp-company-card {
        padding: 1rem;
    }
}

/* ── TOTP / Step-2 / Enrollment ────────────────────────────────────── */

.cp-step-user {
    text-align: center;
    font-size: 0.875rem;
    color: var(--cp-text);
    background: var(--cp-surface-alt, #f9fafb);
    border: 1px solid var(--cp-border);
    border-radius: var(--cp-radius-sm);
    padding: 0.5rem 0.75rem;
    margin-bottom: 1.25rem;
}

.cp-instructions {
    font-size: 0.8125rem;
    color: var(--cp-text-muted);
    text-align: center;
    line-height: 1.5;
    margin-bottom: 1rem;
}

.cp-otp-container {
    display: flex;
    gap: 10px;
    justify-content: center;
    margin-top: 8px;
    margin-bottom: 4px;
}

.cp-otp-digit {
    width: 48px;
    height: 56px;
    text-align: center;
    font-size: 1.5rem;
    font-weight: 600;
    font-family: inherit;
    background: var(--cp-surface-alt, #f9fafb);
    border: 1px solid var(--cp-border);
    border-radius: var(--cp-radius-sm);
    color: var(--cp-text);
    caret-color: var(--cp-primary);
    transition:
        border-color var(--cp-transition),
        box-shadow var(--cp-transition);
}

.cp-otp-digit:focus {
    outline: none;
    border-color: var(--cp-primary);
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
}

.cp-otp-digit::placeholder {
    color: var(--cp-text-muted);
    opacity: 0.3;
}

.cp-qr-wrapper {
    text-align: center;
    padding: 0.75rem 0;
    margin: 0.5rem 0;
}

.cp-qr-wrapper img,
.cp-qr-wrapper svg {
    border-radius: var(--cp-radius-xs);
    display: block;
    margin: 0 auto;
    width: 100%;
    height: auto;
}

.cp-details {
    margin-bottom: 0.75rem;
}

.cp-details-summary {
    font-size: 0.8125rem;
    color: var(--cp-text-muted);
    cursor: pointer;
    user-select: none;
    text-align: center;
    list-style: none;
}

.cp-details-summary::-webkit-details-marker {
    display: none;
}

.cp-details-summary::before {
    content: "\25B8  ";
}

details[open] > .cp-details-summary::before {
    content: "\25BE  ";
}

.cp-details-summary:hover {
    color: var(--cp-primary);
}

.cp-secret-display {
    font-family:
        "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", "Courier New",
        monospace;
    font-size: 0.875rem;
    font-weight: 600;
    text-align: center;
    background: var(--cp-surface-alt, #f9fafb);
    border: 1px solid var(--cp-border);
    border-radius: var(--cp-radius-xs);
    padding: 0.75rem 1rem;
    word-break: break-all;
    letter-spacing: 0.05em;
    color: var(--cp-text);
    margin-top: 0.5rem;
}

.cp-secret-meta {
    font-size: 0.7rem;
    color: var(--cp-text-muted);
    text-align: center;
    margin-top: 0.5rem;
    line-height: 1.4;
}

.cp-divider {
    border: none;
    border-top: 1px solid var(--cp-border);
    margin: 1.25rem 0;
}

.cp-login-btn-spaced {
    margin-top: 1rem;
}

@media (max-width: 480px) {
    .cp-otp-digit {
        width: 42px;
        height: 50px;
        font-size: 1.25rem;
    }

    .cp-otp-container {
        gap: 8px;
    }
}

/* ── Print ─────────────────────────────────────────────────────────── */

.cp-back-link {
    display: block;
    text-align: center;
    margin-top: 1rem;
    font-size: 0.825rem;
    color: var(--cp-text-muted);
    text-decoration: none;
}

.cp-back-link:hover {
    color: var(--cp-primary);
}

/* ── Company Picker ── */

.cp-company-indicator {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.85rem;
    color: var(--cp-text-secondary);
}

.cp-company-name {
    font-weight: 600;
    color: var(--cp-text);
}

.cp-company-switch {
    font-size: 0.8rem;
    color: var(--cp-action);
    text-decoration: none;
}

.cp-company-switch:hover {
    text-decoration: underline;
}

.cp-company-card {
    width: 100%;
    font-family: var(--cp-font);
    font-size: 1rem;
    background: var(--cp-surface);
    border: 2px solid var(--cp-border);
    border-radius: 12px;
    padding: 1.5rem;
    cursor: pointer;
    transition:
        border-color 0.15s,
        box-shadow 0.15s;
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.cp-company-card:hover {
    border-color: var(--cp-action);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
}

.cp-company-card-name {
    font-size: 1.1rem;
    font-weight: 600;
    color: var(--cp-text);
}

.cp-company-card-arrow {
    width: 20px;
    height: 20px;
    color: var(--cp-text-secondary);
    transition:
        color 0.15s,
        transform 0.15s;
}

.cp-company-card:hover .cp-company-card-arrow {
    color: var(--cp-action);
    transform: translateX(2px);
}

.cp-company-form {
    margin: 0;
    padding: 0;
}

@media print {
    .cp-header {
        display: none;
    }

    body {
        background: #fff;
        color: #000;
    }

    .cp-card,
    .cp-invoice-card {
        box-shadow: none;
        border: 1px solid #ccc;
        break-inside: avoid;
    }
}
