/* ==========================================================================
   V2 components — header, nav, logo, theme toggle, panels, cards, buttons,
   inputs, status. Consumes tokens from site-v2.css only (no hardcoded theme
   colors), so every component works in both dark and light themes.
   ========================================================================== */

/* ---- header ---- */
header.app-shell-header {
    background: var(--v2-header-bg);
    border-bottom: 1px solid var(--v2-border);
    backdrop-filter: blur(16px);
    -webkit-backdrop-filter: blur(16px);
}

/* ---- logo ----
   The source PNG is the exact sliced S brand mark. Keep it optically clean:
   no tile, border, radius, or effect around the transparent artwork. */
.header-logo, .logo-btn img, .brand img {
    display: block;
    object-fit: contain;
    width: 36px;
    height: 36px;
    flex: none;
    border-radius: 0;
    border: 0;
    background: transparent;
    box-shadow: none;
    filter: none;
}
.brand img { width: 32px; height: 32px; }

/* ---- nav tabs ---- */
.app-tabs { gap: 0.35rem; }

.app-tab {
    border-radius: 10px;
    border: 1px solid transparent;
    font-weight: 600;
    font-size: 0.92rem;
    color: var(--v2-muted);
    background: transparent;
    padding: 0.55rem 1.05rem;
    transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

.app-tab:hover {
    background: var(--v2-fill-hover);
    color: var(--v2-white);
    border-color: var(--v2-border);
}

.app-tab.active {
    color: #fff;
    background: linear-gradient(135deg, #1014EF 0%, #1E1EFF 100%);
    border-color: rgba(255, 255, 255, 0.18);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.22),
        0 4px 18px var(--v2-btn-glow);
}

/* ---- theme toggle (reusable on every route; icon shows the theme you
       switch TO: sun in dark mode, moon in light mode) ---- */
.theme-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    width: 36px;
    height: 36px;
    border-radius: 10px;
    border: 1px solid var(--v2-border);
    background: var(--v2-fill);
    color: var(--v2-muted);
    cursor: pointer;
    transition: background 0.15s ease, border-color 0.15s ease,
                color 0.15s ease, transform 0.1s ease;
}
.theme-toggle:hover {
    border-color: var(--v2-blue-light);
    color: var(--v2-white);
    background: var(--v2-fill-hover);
}
.theme-toggle:active { transform: scale(0.96); }
.theme-toggle .icon-sun { display: block; }
.theme-toggle .icon-moon { display: none; }
html[data-theme="light"] .theme-toggle .icon-sun { display: none; }
html[data-theme="light"] .theme-toggle .icon-moon { display: block; }

/* ---- panels / cards ---- */
.panel, .card {
    background: var(--panel-bg);
    border: 1px solid var(--v2-border);
    border-radius: var(--r-lg);
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    box-shadow: var(--v2-card-shadow);
}

.panel-title {
    border-bottom: 1px solid var(--v2-border);
    font-weight: 700;
    letter-spacing: -0.01em;
}

.card-2xl { border-radius: var(--r-lg); }

/* ---- labels ---- */
label, .field-label {
    font-family: 'Manrope', sans-serif;
    font-weight: 600;
    color: var(--v2-muted);
    letter-spacing: 0.06em;
    text-transform: uppercase;
    font-size: 0.78rem;
}

/* ---- inputs / selects / textareas ---- */
input[type="text"], input[type="url"], input[type="number"], select, textarea {
    background: var(--v2-fill);
    border: 1px solid var(--v2-border);
    border-radius: var(--r-sm);
    color: var(--v2-white);
    transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
}

input[type="text"]:focus, input[type="url"]:focus, input[type="number"]:focus,
select:focus, textarea:focus {
    border-color: var(--v2-blue-light);
    box-shadow: 0 0 0 3px rgba(76, 76, 255, 0.18);
    background: var(--v2-fill-hover);
    outline: none;
}

select option { background-color: var(--v2-slate); color: var(--v2-white); }

/* ---- buttons ---- */
.btn-primary {
    background: linear-gradient(135deg, #1014EF 0%, #2F2FFF 60%, #3D3DFF 100%);
    color: #fff;
    border: 1px solid rgba(255, 255, 255, 0.16);
    border-radius: var(--r-md);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.22),
        0 4px 20px var(--v2-btn-glow);
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
    transition: transform 0.12s ease, box-shadow 0.2s ease, filter 0.2s ease;
}

.btn-primary:hover:not(:disabled) {
    transform: translateY(-1px);
    filter: brightness(1.08);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.26),
        0 8px 28px var(--v2-btn-glow);
}

.btn-primary:active:not(:disabled) { transform: translateY(0); filter: brightness(0.95); }

.btn-primary:disabled {
    background: #23282E;
    color: #5A6470;
    border-color: var(--v2-border);
    box-shadow: none;
}

.btn-secondary, .btn-action, .btn {
    border-radius: var(--r-sm);
    transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

.btn-secondary:hover:not(:disabled),
.btn-action:hover {
    border-color: var(--v2-blue-light);
    color: var(--v2-blue-light);
    background: rgba(76, 76, 255, 0.08);
}

.btn { border-radius: var(--r-md); }
.btn-sm { border-radius: var(--r-sm); }
.btn-xs { border-radius: 6px; }

.btn-danger {
    background: rgba(243, 107, 118, 0.1);
    border: 1px solid rgba(243, 107, 118, 0.28);
    color: var(--v2-red);
}

.btn-danger:hover { background: rgba(243, 107, 118, 0.18); color: #FF8A93; }

.btn-emerald {
    background: rgba(39, 197, 139, 0.1);
    border: 1px solid rgba(39, 197, 139, 0.28);
    color: var(--v2-green);
}

.btn-amber {
    background: rgba(242, 184, 75, 0.1);
    border: 1px solid rgba(242, 184, 75, 0.28);
    color: var(--v2-amber);
}

.btn-solid-green { background: var(--v2-green); }
.btn-solid-green:hover:not(:disabled) { background: #1FA87A; }
.btn-solid-red { background: var(--v2-red); }
.btn-solid-red:hover:not(:disabled) { background: #E2505C; }

/* ---- progress ---- */
.progress-track {
    background: var(--v2-slate-3);
    border-radius: 999px;
}

.progress-fill {
    background: linear-gradient(90deg, #1014EF 0%, #4C4CFF 100%);
    box-shadow: 0 0 12px rgba(76, 76, 255, 0.45);
}

/* ---- status indicator ---- */
.status-indicator {
    background: var(--v2-fill);
    border: 1px solid var(--v2-border);
    border-radius: 999px;
}

.status-dot.active {
    background: var(--v2-green);
    box-shadow: 0 0 10px rgba(39, 197, 139, 0.6);
}

/* ---- checkboxes / toggles ---- */
input[type="checkbox"], input[type="radio"] { accent-color: var(--v2-blue); }

.toggle-slider { background-color: var(--v2-slate-3); }
input:checked + .toggle-slider {
    background: linear-gradient(135deg, #1014EF, #2F2FFF);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.2);
}

.toggle {
    background: var(--v2-slate-3);
    border: 1px solid var(--v2-border);
}
.toggle.on {
    background: linear-gradient(135deg, #1014EF, #2F2FFF);
    border-color: rgba(255, 255, 255, 0.18);
}

/* ---- focus visibility (WCAG AA) ---- */
:focus-visible {
    outline: 2px solid var(--v2-blue-light);
    outline-offset: 2px;
    border-radius: 4px;
}

button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible,
textarea:focus-visible, [tabindex]:focus-visible {
    outline: 2px solid var(--v2-blue-light);
    outline-offset: 2px;
}
