/* ================================================
   VoiceBook — Custom CSS
   ================================================ */

/* CSS Variables */
:root {
    --vb-primary: #0d9488;
    --vb-primary-hover: #0f766e;
    --vb-sidebar: #1a1a2e;
    --vb-sidebar-active: #16213e;
    --vb-bg: #f0f4f8;
    --vb-success: #10b981;
    --vb-danger: #ef4444;
    --vb-warning: #f59e0b;
    --vb-info: #3b82f6;
    --vb-card-bg: #ffffff;
    --vb-border: rgba(0, 0, 0, 0.07);
    --vb-text: #1e293b;
    --vb-text-muted: #64748b;
    --vb-shadow: 0 2px 12px rgba(0, 0, 0, 0.07);
    --vb-shadow-hover: 0 8px 25px rgba(0, 0, 0, 0.12);
    --sidebar-width: 250px;
    --topbar-height: 70px;
}

/* ----------------------------------------
   Base
   ---------------------------------------- */
body {
    font-family: "Inter", sans-serif;
    background-color: var(--vb-bg);
    color: var(--vb-text);
    -webkit-font-smoothing: antialiased;
}

* {
    scrollbar-width: thin;
    scrollbar-color: rgba(0, 0, 0, 0.15) transparent;
}
*::-webkit-scrollbar {
    width: 5px;
    height: 5px;
}
*::-webkit-scrollbar-thumb {
    background: rgba(0, 0, 0, 0.15);
    border-radius: 99px;
}

/* ----------------------------------------
   Layout
   ---------------------------------------- */
#app-wrapper {
    min-height: 100vh;
}

/* ----------------------------------------
   Sidebar
   ---------------------------------------- */
.sidebar {
    width: var(--sidebar-width);
    min-height: 100vh;
    background: var(--vb-sidebar);
    position: sticky;
    top: 0;
    height: 100vh;
    overflow-y: auto;
    flex-shrink: 0;
    z-index: 100;
}

.sidebar-offcanvas {
    background: var(--vb-sidebar) !important;
    width: var(--sidebar-width) !important;
}

.sidebar-logo {
    border-bottom: 1px solid rgba(255, 255, 255, 0.07);
}

.logo-icon {
    width: 38px;
    height: 38px;
    background: var(--vb-primary);
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    font-size: 1.1rem;
}

.logo-text {
    font-size: 1.3rem;
    font-weight: 700;
    color: white;
    letter-spacing: -0.3px;
}

.sidebar-divider {
    border-color: rgba(255, 255, 255, 0.07);
    margin: 0;
}

.sidebar-menu {
    overflow-y: auto;
}

.sidebar-link {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 14px;
    color: rgba(255, 255, 255, 0.65);
    text-decoration: none;
    border-radius: 10px;
    margin-bottom: 4px;
    transition: all 0.2s ease;
    font-size: 0.9rem;
    font-weight: 500;
}

.sidebar-link:hover {
    color: white;
    background: rgba(255, 255, 255, 0.08);
    transform: translateX(3px);
}

.sidebar-link.active {
    color: white;
    background: var(--vb-primary);
    box-shadow: 0 4px 12px rgba(13, 148, 136, 0.35);
}

.sidebar-link i {
    font-size: 1.1rem;
    flex-shrink: 0;
}

.logout-btn {
    color: rgba(255, 255, 255, 0.5) !important;
}
.logout-btn:hover {
    color: #ef4444 !important;
    background: rgba(239, 68, 68, 0.12) !important;
}

/* ----------------------------------------
   Main Content
   ---------------------------------------- */
.main-content {
    min-height: 100vh;
    overflow-x: hidden;
}

/* ----------------------------------------
   Topbar
   ---------------------------------------- */
.topbar {
    height: var(--topbar-height);
    background: white;
    border-bottom: 1px solid var(--vb-border);
    backdrop-filter: blur(10px);
    position: sticky;
    top: 0;
    z-index: 50;
}

.topbar-title {
    font-size: 1.3rem;
    font-weight: 700;
    color: var(--vb-text);
}

.content-area {
    padding-top: 1.5rem;
}

.avatar-circle {
    width: 36px;
    height: 36px;
    background: linear-gradient(135deg, var(--vb-primary), var(--vb-info));
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    font-size: 0.9rem;
}

/* ----------------------------------------
   Cards
   ---------------------------------------- */
.card-vb {
    background: var(--vb-card-bg);
    border-radius: 14px;
    border: 1px solid var(--vb-border);
    box-shadow: var(--vb-shadow);
    overflow: hidden;
    transition: box-shadow 0.25s ease;
}

.card-vb:hover {
    box-shadow: var(--vb-shadow-hover);
}

.card-vb-header {
    padding: 1rem 1.25rem;
    border-bottom: 1px solid var(--vb-border);
    background: rgba(248, 250, 252, 0.7);
}

.card-vb-body {
    padding: 1.25rem;
}

.card-vb-footer {
    padding: 0.75rem 1.25rem;
    border-top: 1px solid var(--vb-border);
    background: rgba(248, 250, 252, 0.5);
}

/* ----------------------------------------
   KPI Cards
   ---------------------------------------- */
.kpi-card {
    background: white;
    border-radius: 14px;
    padding: 1.25rem;
    display: flex;
    align-items: center;
    gap: 1rem;
    border: 1px solid var(--vb-border);
    box-shadow: var(--vb-shadow);
    transition:
        transform 0.2s ease,
        box-shadow 0.2s ease;
    border-left: 4px solid transparent;
}

.kpi-card:hover {
    transform: translateY(-2px);
    box-shadow: var(--vb-shadow-hover);
}

.kpi-card.kpi-success {
    border-left-color: var(--vb-success);
}
.kpi-card.kpi-danger {
    border-left-color: var(--vb-danger);
}
.kpi-card.kpi-warning {
    border-left-color: var(--vb-warning);
}
.kpi-card.kpi-info {
    border-left-color: var(--vb-info);
}

.kpi-icon {
    width: 52px;
    height: 52px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.4rem;
    flex-shrink: 0;
}

.kpi-success .kpi-icon {
    background: rgba(16, 185, 129, 0.12);
    color: var(--vb-success);
}
.kpi-danger .kpi-icon {
    background: rgba(239, 68, 68, 0.12);
    color: var(--vb-danger);
}
.kpi-warning .kpi-icon {
    background: rgba(245, 158, 11, 0.12);
    color: var(--vb-warning);
}
.kpi-info .kpi-icon {
    background: rgba(59, 130, 246, 0.12);
    color: var(--vb-info);
}

.kpi-label {
    font-size: 0.78rem;
    color: var(--vb-text-muted);
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.kpi-value {
    font-size: 1.4rem;
    font-weight: 700;
    color: var(--vb-text);
    line-height: 1.2;
}

/* ----------------------------------------
   Login Page
   ---------------------------------------- */
.login-body {
    background: linear-gradient(
        135deg,
        var(--vb-sidebar) 0%,
        #16213e 50%,
        #0f3460 100%
    );
    min-height: 100vh;
}

.login-card {
    background: white;
    border-radius: 20px;
    padding: 2.5rem;
    width: 100%;
    max-width: 420px;
    box-shadow: 0 25px 60px rgba(0, 0, 0, 0.35);
}

.login-logo-icon {
    width: 64px;
    height: 64px;
    background: linear-gradient(135deg, var(--vb-primary), var(--vb-info));
    border-radius: 18px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    font-size: 1.8rem;
    box-shadow: 0 8px 20px rgba(13, 148, 136, 0.3);
}

/* ----------------------------------------
   Buttons
   ---------------------------------------- */
.btn-vb {
    background: var(--vb-primary);
    color: white;
    border: none;
    border-radius: 8px;
    font-weight: 600;
    transition: all 0.2s ease;
}
.btn-vb:hover {
    background: var(--vb-primary-hover);
    color: white;
    transform: translateY(-1px);
    box-shadow: 0 4px 12px rgba(13, 148, 136, 0.3);
}

.btn-icon {
    width: 32px;
    height: 32px;
    padding: 0;
    border: none;
    background: transparent;
    border-radius: 8px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--vb-text-muted);
    transition: background 0.15s;
}
.btn-icon:hover {
    background: rgba(0, 0, 0, 0.06);
    color: var(--vb-text);
}

.btn-xs {
    padding: 2px 8px;
    font-size: 0.75rem;
    border-radius: 6px;
}

/* ----------------------------------------
   Priority Badges
   ---------------------------------------- */
.badge-priority {
    display: inline-block;
    padding: 2px 10px;
    border-radius: 99px;
    font-size: 0.72rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}
.priority-haute {
    background: rgba(239, 68, 68, 0.12);
    color: #dc2626;
}
.priority-moyenne {
    background: rgba(245, 158, 11, 0.12);
    color: #d97706;
}
.priority-basse {
    background: rgba(16, 185, 129, 0.12);
    color: #059669;
}

.badge-cat {
    background: rgba(59, 130, 246, 0.1);
    color: var(--vb-info);
    border: 1px solid rgba(59, 130, 246, 0.2);
    font-weight: 500;
    padding: 3px 8px;
    border-radius: 6px;
}

/* ----------------------------------------
   Kanban
   ---------------------------------------- */
.kanban-column {
    background: rgba(0, 0, 0, 0.02);
    border: 1px solid var(--vb-border);
    border-radius: 14px;
    padding: 1.25rem;
    min-height: 300px;
}

.kanban-header {
    padding-bottom: 0.75rem;
    border-bottom: 1px solid var(--vb-border);
}

.task-card {
    background: white;
    border-radius: 10px;
    padding: 1rem;
    margin-bottom: 0.75rem;
    border: 1px solid var(--vb-border);
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
    transition:
        transform 0.15s ease,
        box-shadow 0.15s ease;
}

.task-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.1);
}

.task-desc {
    font-size: 0.875rem;
    line-height: 1.5;
    color: var(--vb-text);
}

/* ----------------------------------------
   Tables
   ---------------------------------------- */
.table-vb thead th {
    background: rgba(248, 250, 252, 0.9);
    font-weight: 600;
    font-size: 0.8rem;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--vb-text-muted);
    border-bottom: 2px solid var(--vb-border);
    padding: 0.85rem 1.25rem;
}
.table-vb tbody td {
    padding: 0.85rem 1.25rem;
    vertical-align: middle;
    border-bottom: 1px solid rgba(0, 0, 0, 0.04);
}
.table-vb tbody tr:hover td {
    background: rgba(13, 148, 136, 0.03);
}
.table-vb tbody tr:last-child td {
    border-bottom: none;
}

/* ----------------------------------------
   Notes
   ---------------------------------------- */
.note-card {
    transition:
        transform 0.15s ease,
        box-shadow 0.15s ease;
}
.note-card:hover {
    transform: translateY(-3px);
    box-shadow: var(--vb-shadow-hover);
}
.note-pinned {
    border-color: rgba(245, 158, 11, 0.3) !important;
    background: rgba(245, 158, 11, 0.02) !important;
}
.note-content {
    line-height: 1.8;
    white-space: pre-wrap;
}

/* ----------------------------------------
   Ideas
   ---------------------------------------- */
.idea-card {
    transition:
        transform 0.15s ease,
        box-shadow 0.15s ease;
}
.idea-card:hover {
    transform: translateY(-3px);
    box-shadow: var(--vb-shadow-hover);
}

/* ----------------------------------------
   Movement icons
   ---------------------------------------- */
.movement-icon {
    width: 36px;
    height: 36px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 0.9rem;
    flex-shrink: 0;
}
.bg-success-soft {
    background: rgba(16, 185, 129, 0.12);
    color: var(--vb-success);
}
.bg-danger-soft {
    background: rgba(239, 68, 68, 0.12);
    color: var(--vb-danger);
}

/* ----------------------------------------
   Badge soft variants (Bootstrap doesn't have them)
   ---------------------------------------- */
.bg-success-soft {
    background: rgba(16, 185, 129, 0.1) !important;
}
.bg-warning-soft {
    background: rgba(245, 158, 11, 0.1) !important;
}
.bg-info-soft {
    background: rgba(59, 130, 246, 0.1) !important;
}
.text-success {
    color: var(--vb-success) !important;
}

/* ----------------------------------------
   Navigation Tabs (reports)
   ---------------------------------------- */
.nav-tabs-vb .nav-link {
    color: var(--vb-text-muted);
    border: none;
    border-radius: 0;
    padding: 0.75rem 1.25rem;
    font-weight: 500;
    border-bottom: 3px solid transparent;
    transition: color 0.15s;
}
.nav-tabs-vb .nav-link:hover {
    color: var(--vb-primary);
}
.nav-tabs-vb .nav-link.active {
    color: var(--vb-primary);
    border-bottom-color: var(--vb-primary);
    background: transparent;
}

/* ----------------------------------------
   Utilities
   ---------------------------------------- */
.cursor-pointer {
    cursor: pointer;
}

/* ----------------------------------------
   Responsive
   ---------------------------------------- */
@media (max-width: 991.98px) {
    .content-area {
        padding-left: 1rem;
        padding-right: 1rem;
    }
    .kpi-value {
        font-size: 1.1rem;
    }
}

@media (max-width: 575.98px) {
    .kanban-column {
        min-height: 150px;
    }
}

/* ----------------------------------------
   Sync indicator (navbar dot)
   ---------------------------------------- */
.sync-indicator {
    display: flex;
    align-items: center;
    gap: 5px;
    cursor: default;
    user-select: none;
}

.sync-dot {
    width: 9px;
    height: 9px;
    border-radius: 50%;
    flex-shrink: 0;
    transition: background-color 0.4s ease;
}

/* Active: green pulsing */
.sync-dot.sync-active {
    background-color: #10b981;
    animation: sync-pulse 2s ease-in-out infinite;
}

/* Slow: orange static */
.sync-dot.sync-slow {
    background-color: #f59e0b;
    animation: none;
}

/* Paused: gray static */
.sync-dot.sync-paused {
    background-color: #94a3b8;
    animation: none;
}

@keyframes sync-pulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.55); }
    50%       { box-shadow: 0 0 0 5px rgba(16, 185, 129, 0); }
}

.sync-label {
    font-size: 0.68rem;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--vb-text-muted);
    font-weight: 500;
}

/* ----------------------------------------
   Sync toast (top-right — distinct from
   the regular VoiceBook toast bottom-right)
   ---------------------------------------- */
.vb-sync-toast {
    position: fixed;
    top: 1.1rem;
    right: 1.1rem;
    z-index: 9998;
    display: flex;
    align-items: center;
    gap: 0.5rem;
    background: #1e293b;
    color: #e2e8f0;
    padding: 0.55rem 1rem;
    border-radius: 8px;
    font-size: 0.83rem;
    font-weight: 500;
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.28);
    pointer-events: none;
    white-space: nowrap;
    opacity: 0;
    transform: translateY(-10px) scale(0.97);
    transition: opacity 0.35s ease, transform 0.35s ease;
}

.vb-sync-toast.vb-sync-toast--in {
    opacity: 1;
    transform: translateY(0) scale(1);
}

.vb-sync-toast .bi {
    font-size: 0.95rem;
    color: #0d9488;
    flex-shrink: 0;
}

/* ----------------------------------------
   KPI value flash on soft-update
   ---------------------------------------- */
@keyframes kpi-flash {
    0%   { opacity: 0.3; }
    60%  { opacity: 1; }
    100% { opacity: 1; }
}

.kpi-flash {
    animation: kpi-flash 0.9s ease;
}

/* ----------------------------------------
   Non-blocking confirmation banners
   ---------------------------------------- */
.vb-confirm-stack {
    position: fixed;
    top: 86px;
    right: 24px;
    z-index: 10080;
    width: min(470px, calc(100vw - 32px));
    pointer-events: none;
}

.vb-confirm-banner {
    overflow: hidden;
    border: 1px solid #dbe4ef;
    border-left: 4px solid #f59e0b;
    border-radius: 8px;
    background: #fff;
    box-shadow: 0 18px 42px rgba(15, 23, 42, 0.16);
    color: #0f172a;
    pointer-events: auto;
    transform: translateY(-10px);
    opacity: 0;
    animation: vb-confirm-in 0.18s ease forwards;
}

.vb-confirm-banner + .vb-confirm-banner {
    margin-top: 10px;
}

.vb-confirm-danger {
    border-left-color: #dc2626;
}

.vb-confirm-warning {
    border-left-color: #f59e0b;
}

.vb-confirm-body {
    display: grid;
    grid-template-columns: 38px minmax(0, 1fr) auto;
    gap: 12px;
    align-items: center;
    padding: 14px 16px 12px;
}

.vb-confirm-icon {
    display: grid;
    width: 38px;
    height: 38px;
    place-items: center;
    border-radius: 8px;
    background: #fff7ed;
    color: #c2410c;
    font-size: 1.05rem;
}

.vb-confirm-danger .vb-confirm-icon {
    background: #fef2f2;
    color: #dc2626;
}

.vb-confirm-copy {
    display: grid;
    gap: 2px;
    min-width: 0;
}

.vb-confirm-copy strong {
    font-size: 0.93rem;
    line-height: 1.2;
}

.vb-confirm-copy span {
    color: #475569;
    font-size: 0.86rem;
    line-height: 1.35;
}

.vb-confirm-countdown {
    color: #64748b;
    font-size: 0.76rem;
}

.vb-confirm-actions {
    display: flex;
    align-items: center;
    gap: 8px;
}

.btn-vb-confirm-now {
    border-color: #0f9f8f;
    background: #0f9f8f;
    color: #fff;
    font-weight: 700;
}

.btn-vb-confirm-now:hover {
    border-color: #0d9488;
    background: #0d9488;
    color: #fff;
}

.vb-confirm-progress {
    height: 4px;
    background: #e5e7eb;
}

.vb-confirm-progress-fill {
    display: block;
    width: 100%;
    height: 100%;
    background: #f59e0b;
    transition-property: width;
    transition-timing-function: linear;
}

.vb-confirm-danger .vb-confirm-progress-fill {
    background: #dc2626;
}

.vb-confirm-out {
    animation: vb-confirm-out 0.18s ease forwards;
}

@keyframes vb-confirm-in {
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes vb-confirm-out {
    to {
        opacity: 0;
        transform: translateY(-8px);
    }
}

@media (max-width: 575.98px) {
    .vb-confirm-stack {
        top: 72px;
        right: 16px;
        left: 16px;
        width: auto;
    }

    .vb-confirm-body {
        grid-template-columns: 34px minmax(0, 1fr);
    }

    .vb-confirm-actions {
        grid-column: 1 / -1;
        justify-content: flex-end;
    }
}
