/* Document Viewer - Manuscript Theme */
@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800&display=swap');

/* Page-specific tokens (base tokens from common.css) */
:root {
    --primary-dark:  #C8572A;
    --primary-soft:  rgba(232, 112, 58, 0.10);
    --success-color: #2D9E6B;
    --purple-color:  #1A2540;
    --orange-color:  #f59e0b;
    --danger-color:  #D94F4F;
    --bg-secondary:  #F6F4F0;
    --bg-tertiary:   #F0EDE8;
    --text-primary:  #1A1917;
    --text-secondary:#4A4540;
    --text-tertiary: #9A928A;
    --shadow-sm: 0 1px 3px rgba(26, 25, 23, 0.06), 0 1px 2px rgba(26, 25, 23, 0.04);
    --shadow-md: 0 4px 12px rgba(26, 25, 23, 0.08), 0 2px 4px rgba(26, 25, 23, 0.04);
    --shadow-lg: 0 16px 48px rgba(26, 25, 23, 0.10), 0 4px 12px rgba(26, 25, 23, 0.06);
}

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

body {
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 15px;
    background: var(--bg-secondary);
    color: var(--text-primary);
    overflow: hidden;
}

/* Container */
.viewer-container {
    display: flex;
    flex-direction: column;
    height: 100vh;
    width: 100vw;
}

/* Header */
.viewer-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 1.75rem;
    height: 60px;
    background: var(--bg-primary);
    border-bottom: 1px solid var(--border-color);
    box-shadow: 0 1px 3px rgba(26,25,23,0.06), 0 1px 2px rgba(26,25,23,0.04);
    z-index: 100;
    position: sticky;
    top: 0;
}

.header-left {
    display: flex;
    align-items: center;
    gap: 1rem;
}

.page-title {
    font-size: 19px;
    font-weight: 700;
    color: var(--text-primary);
    letter-spacing: -0.5px;
    text-decoration: none;
}
.page-title .logo-dot { color: var(--primary-color); }

.header-center {
    flex: 1;
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 0.5rem;
}

.token-balance {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    background: linear-gradient(135deg, rgba(16, 185, 129, 0.08), rgba(232, 112, 58, 0.06));
    border: 1px solid rgba(16, 185, 129, 0.2);
    padding: 0.4rem 0.875rem;
    border-radius: 2rem;
    color: var(--text-primary);
}

.token-icon-svg,
.token-balance-icon {
    width: 16px;
    height: 16px;
    color: var(--success-color);
    flex-shrink: 0;
}

.token-count {
    font-size: 1rem;
    font-weight: 700;
    color: var(--success-color);
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.01em;
}

.token-label {
    font-size: 0.75rem;
    color: var(--text-secondary);
    font-weight: 400;
}

.header-right {
    display: flex;
    align-items: center;
    gap: 0.75rem;
}

/* User Menu */
.user-menu {
    position: relative;
}

/* Token balance badge (standalone pill) */
.token-badge {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    font-weight: 500;
    color: var(--text-secondary);
    background: var(--bg-secondary);
    border: 1px solid var(--border-color);
    padding: 5px 12px;
    border-radius: 100px;
    cursor: default;
    transition: all 150ms ease;
    white-space: nowrap;
}
.token-badge:hover {
    border-color: var(--primary-color);
    color: var(--primary-color);
}
.token-badge .token-dot {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--success-color);
    flex-shrink: 0;
}
.token-badge .token-count {
    font-weight: 700;
    color: var(--text-primary);
}
.token-badge .token-label {
    color: var(--text-secondary);
}
.token-badge.tokens-low  .token-count { color: var(--danger-color); }
.token-badge.tokens-warn .token-count { color: var(--orange-color); }
.token-badge.has-sub {
    color: var(--primary-color);
    border-color: rgba(232,112,58,0.30);
    background: rgba(232,112,58,0.07);
    gap: 5px;
}
.token-badge.has-sub:hover {
    background: rgba(232,112,58,0.13);
}
.token-badge .token-sub-name {
    font-size: 13px;
    font-weight: 600;
    color: var(--primary-color);
}
.token-badge.sub--business {
    color: #b45309;
    border-color: rgba(180,83,9,0.25);
    background: rgba(245,158,11,0.06);
}
.token-badge.sub--business .token-sub-name { color: #b45309; }

/* User avatar circle (dropdown trigger) */
.user-avatar {
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--text-primary);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    font-weight: 700;
    cursor: pointer;
    border: none;
    font-family: 'Outfit', system-ui, sans-serif;
    transition: all 150ms ease;
    flex-shrink: 0;
}
.user-avatar:hover {
    background: var(--primary-color);
    transform: scale(1.05);
}

/* Legacy trigger (kept for other pages) */
.user-menu-trigger {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 5px 12px;
    border: 1.5px solid var(--border-color);
    border-radius: 10px;
    background: var(--bg-primary);
    cursor: pointer;
    transition: all 0.18s ease;
    font-size: 0.8125rem;
    font-weight: 500;
    font-family: 'Outfit', system-ui, sans-serif;
    white-space: nowrap;
    color: var(--text-secondary);
}
.user-menu-trigger:hover {
    background: var(--bg-secondary);
    border-color: #D6CEC4;
}
.umenu-sep { display: none; }
.user-name { font-weight: 600; color: var(--text-primary); font-size: 0.8125rem; }

.user-menu-dropdown {
    position: absolute;
    top: calc(100% + 0.5rem);
    right: 0;
    background: var(--bg-primary);
    border: 1px solid var(--border-color);
    border-radius: 0.5rem;
    box-shadow: var(--shadow-lg);
    overflow: hidden;
    min-width: 200px;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-10px);
    transition: all 0.2s;
    z-index: 200;
}

.user-menu-dropdown.show {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}

.menu-item {
    display: block;
    padding: 0.75rem 1rem;
    color: var(--text-primary);
    text-decoration: none;
    transition: background 0.2s;
    font-size: 0.875rem;
}

.menu-item:hover {
    background: var(--bg-secondary);
}

.menu-divider {
    height: 1px;
    background: var(--border-color);
    margin: 0.25rem 0;
}

/* ── Viewer footer — legal links + export buttons ─────────────────────────── */
.viewer-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 10px 18px;
    border-top: 1px solid var(--border);
    background: var(--surface);
    flex-shrink: 0;
}
.viewer-footer-legal {
    display: flex;
    align-items: center;
    gap: 14px;
    flex: 1;
    min-width: 0;
    flex-wrap: wrap;
}
.viewer-footer-legal span {
    font-size: 11px;
    color: var(--ink-4);
    line-height: 1;
    white-space: nowrap;
}
.viewer-footer-legal a {
    font-size: 11px;
    color: var(--ink-3);
    text-decoration: none;
    white-space: nowrap;
    transition: color var(--t-fast);
}
.viewer-footer-legal a:hover { color: var(--ink); }
.viewer-footer-actions {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-shrink: 0;
}

/* ── Export bar — pill container ─────────────────────────────────────────── */
.export-bar {
    display: inline-flex;
    flex-direction: row;
    align-items: center;
    gap: 6px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 14px;
    padding: 6px;
    box-shadow: 0 4px 16px rgba(26, 25, 23, 0.10);
}
.export-bar-sep {
    width: 1px;
    background: var(--border);
    align-self: stretch;
    margin: 2px 0;
    flex-shrink: 0;
}

/* Export buttons — base */
.btn-export {
    display: flex;
    align-items: center;
    gap: 6px;
    font-family: var(--font-ui);
    font-size: 13px;
    font-weight: 500;
    padding: 8px 14px;
    border-radius: 8px;
    border: none;
    background: transparent;
    color: var(--ink-2);
    cursor: pointer;
    transition: background var(--t-fast), color var(--t-fast), filter var(--t-fast);
    white-space: nowrap;
}
.btn-export:hover { background: var(--surface-2); color: var(--ink); }

/* Export groups */
.export-group {
    position: relative;
}
.btn-export-page {
    background: linear-gradient(135deg, #E8703A, #C8572A);
    color: #fff;
    font-weight: 600;
    transition: filter var(--t-fast), transform var(--t-fast);
}
.btn-export-page:hover { filter: brightness(1.1); transform: translateY(-1px); color: #fff; background: linear-gradient(135deg, #E8703A, #C8572A); }
.btn-export-doc {
    background: linear-gradient(135deg, #1A2540, #0F172A);
    color: #fff;
    font-weight: 600;
    transition: filter var(--t-fast), transform var(--t-fast);
}
.btn-export-doc:hover { filter: brightness(1.1); transform: translateY(-1px); color: #fff; background: linear-gradient(135deg, #1A2540, #0F172A); }

/* Dropdown arrow SVG — rotates when open */
.btn-export-arrow {
    flex-shrink: 0;
    transition: transform 0.25s ease;
}
.export-group.open .btn-export-arrow {
    transform: rotate(180deg);
}

/* Dropdown panel — dark, opens upward */
.export-dropdown {
    position: absolute;
    bottom: calc(100% + 6px);
    left: 0;
    background: rgba(15, 17, 23, 0.96);
    border-radius: 10px;
    overflow: hidden;
    max-height: 0;
    transition: max-height 0.25s ease;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.22);
    min-width: 120px;
    z-index: 50;
}
.export-group.open .export-dropdown {
    max-height: 160px;
}
.export-dropdown button {
    display: block;
    width: 100%;
    padding: 10px 16px;
    background: transparent;
    border: none;
    border-top: 1px solid rgba(255, 255, 255, 0.08);
    text-align: left;
    font-size: 13px;
    font-weight: 500;
    font-family: var(--font-ui);
    color: rgba(255, 255, 255, 0.85);
    cursor: pointer;
    transition: background var(--t-fast);
    white-space: nowrap;
}
.export-dropdown button:first-child { border-top: none; }
.export-dropdown button:hover { background: rgba(255, 255, 255, 0.10); }

/* Main Layout: Sidebar + Content */
.viewer-main {
    display: flex;
    flex: 1;
    overflow: hidden;
    position: relative;
    background: var(--bg);
}

/* Content column: toolbar + pages + export */
.viewer-content {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    min-width: 0;
}

/* Thumbnail Sidebar - Left, Vertical */
.thumbnail-sidebar {
    position: relative;
    width: 220px;
    background: var(--surface);
    border-right: 1px solid var(--border);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    transition: margin-left 0.3s ease;
    flex-shrink: 0;
}

/* Sidebar header */
.thumb-sidebar-header {
    padding: 14px 14px 10px;
    border-bottom: 1px solid var(--border-soft);
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-shrink: 0;
}
.thumb-sidebar-title {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--ink-3);
}

/* ── Sidebar drag-and-drop overlay ───────────────────────────────────────── */
.sidebar-drop-overlay {
    display: none;
    position: absolute;
    inset: 0;
    z-index: 60;
    background: rgba(232, 112, 58, 0.1);
    border: 2px dashed rgba(232, 112, 58, 0.7);
    border-radius: 6px;
    align-items: center;
    justify-content: center;
    pointer-events: none; /* pass drag events through to underlying elements */
}
.sidebar-drop-overlay.active {
    display: flex;
}
.sidebar-drop-overlay__content {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 7px;
    color: #E8703A;
    font-size: 0.75rem;
    font-weight: 600;
    text-align: center;
    padding: 0 14px;
    pointer-events: none;
}
.sidebar-drop-overlay__content svg {
    opacity: 0.85;
}

/* Suppress sidebar transitions during initial render */
.viewer-main[data-no-transition] .thumbnail-sidebar,
.viewer-main[data-no-transition] .sidebar-toggle-btn { transition: none !important; }

/* ── Sidebar collapsed state — slide left off screen ──────────────────────── */
/* .viewer-main.sidebar-collapsed = toggled by JS after load        */
/* html.sidebar-collapsed         = set instantly by inline <head>  */
.viewer-main.sidebar-collapsed .thumbnail-sidebar,
html.sidebar-collapsed .thumbnail-sidebar {
    margin-left: -220px;
}

.viewer-main.sidebar-collapsed .sidebar-toggle-btn,
html.sidebar-collapsed .sidebar-toggle-btn {
    left: 0;
}

.viewer-main.sidebar-collapsed .sidebar-toggle-btn svg,
html.sidebar-collapsed .sidebar-toggle-btn svg {
    transform: rotate(180deg);
}

.viewer-main.sidebar-collapsed .page-content,
html.sidebar-collapsed .page-content {
    max-width: 1215px;
}

/* Sidebar toggle tab */
.sidebar-toggle-btn {
    position: absolute;
    left: 212px; /* 220px sidebar - 8px = centered on border */
    top: 50%;
    transform: translateY(-50%);
    z-index: 20;
    width: 16px;
    height: 48px;
    padding: 0;
    background: var(--surface);
    border: 1px solid var(--border);
    border-left: none;
    border-radius: 0 var(--r-sm) var(--r-sm) 0;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ink-3);
    transition: left 0.3s ease, background var(--t-fast), color var(--t-fast);
    box-shadow: 2px 0 6px rgba(26, 25, 23, 0.06);
}

.sidebar-toggle-btn:hover {
    background: var(--surface-2);
    color: var(--ink);
}

.sidebar-toggle-btn svg {
    transition: transform 0.3s ease;
    flex-shrink: 0;
}



.btn-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    background: transparent;
    border: 1px solid var(--border-color);
    border-radius: 0.375rem;
    color: var(--text-secondary);
    cursor: pointer;
    transition: all 0.2s;
}

.btn-icon:hover {
    background: var(--bg-secondary);
    color: var(--text-primary);
}

/* ── Permanent thumbnails footer bar ────────────────────────────────────── */
.thumbs-footer {
    padding: 10px 12px;
    border-top: 1px solid var(--border-soft);
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-shrink: 0;
}
.thumbs-footer-count {
    font-size: 12px;
    color: var(--ink-3);
}
.thumbs-footer-mgmt-btn,
.thumbs-footer-btn {
    font-size: 12px;
    font-weight: 500;
    color: var(--ink-2);
    background: none;
    border: none;
    cursor: pointer;
    font-family: var(--font-ui);
    transition: color var(--t-fast);
    white-space: nowrap;
}
.thumbs-footer-mgmt-btn:hover,
.thumbs-footer-btn:hover {
    color: var(--ink);
}

/* ── Thumbnail checkboxes (management modal) ─────────────────────────────── */

/* Checkbox: centered, large, used inside management modal */
.thumb-check {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 58px;
    height: 58px;
    border-radius: 50%;
    border: 3px solid rgba(255, 255, 255, 0.9);
    background: rgba(0, 0, 0, 0.28);
    z-index: 10;
    display: none;
    align-items: center;
    justify-content: center;
    transition: all 0.15s;
    pointer-events: none;
}
.thumb-check svg {
    width: 28px;
    height: 28px;
    opacity: 0;
    transition: opacity 0.15s;
    filter: drop-shadow(0 1px 2px rgba(0,0,0,0.4));
}
/* Selected state: bright blue, checkmark visible */
.thumbnail-item.delete-selected .thumb-check {
    background: #E8703A;
    border-color: #E8703A;
    box-shadow: 0 0 0 4px rgba(232, 112, 58, 0.35);
}
.thumbnail-item.delete-selected .thumb-check svg {
    opacity: 1;
}

.thumbnails-scroll {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 10px;
    display: flex;
    flex-direction: column;
    gap: 1.25rem;
}

.thumbnails-scroll::-webkit-scrollbar {
    width: 4px;
}

.thumbnails-scroll::-webkit-scrollbar-track {
    background: transparent;
}

.thumbnails-scroll::-webkit-scrollbar-thumb {
    background: transparent;
    border-radius: 2px;
    transition: background 0.2s;
}

.thumbnails-scroll:hover::-webkit-scrollbar-thumb {
    background: var(--border-color);
}

/* Thumbnail Item */
.thumbnail-item {
    position: relative;
    width: 100%;
    background: var(--surface);
    border: 1.5px solid var(--border);
    border-radius: var(--r-md);
    overflow: hidden;
    cursor: pointer;
    transition: border-color var(--t-fast), box-shadow var(--t-fast);
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
}

.thumbnail-item:not(.active):hover {
    border-color: var(--ink-4);
}

.thumbnail-item.active {
    border-color: var(--accent);
    box-shadow: inset 3px 0 0 var(--accent), var(--sh-sm);
}

.thumbnail-item.selected {
    border-color: var(--accent);
    box-shadow: 0 0 0 2px rgba(232, 112, 58, 0.15);
}

.thumbnail-item.dragging {
    opacity: 0.5;
}

.thumbnail-item.drag-over {
    border-color: var(--primary-color);
    border-width: 3px;
    border-style: dashed;
    background: rgba(232, 112, 58, 0.05);
}

.thumbnail-item.drag-over-before::before {
    content: '';
    position: absolute;
    top: -0.75rem;
    left: 0;
    right: 0;
    height: 4px;
    background: var(--primary-color);
    border-radius: 2px;
    z-index: 100;
}

.thumbnail-item.drag-over-after::after {
    content: '';
    position: absolute;
    bottom: -0.75rem;
    left: 0;
    right: 0;
    height: 4px;
    background: var(--primary-color);
    border-radius: 2px;
    z-index: 100;
}

/* Drag ghost image */
.thumbnail-item.drag-ghost {
    position: absolute;
    pointer-events: none;
    z-index: 1000;
    box-shadow: var(--shadow-lg);
    transform: rotate(3deg);
    width: 180px;
    max-width: 180px;
}

.thumbnail-content {
    position: relative;
    overflow: hidden;
    width: 100%;
    aspect-ratio: 3/4;
    flex-shrink: 0;
}

.thumbnail-image {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* Hover overlay — appears on hover, contains action buttons */
.thumb-hover-overlay {
    position: absolute;
    inset: 0;
    background: rgba(26, 25, 23, 0.38);
    backdrop-filter: blur(2px);
    -webkit-backdrop-filter: blur(2px);
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    opacity: 0;
    transition: opacity var(--t-fast);
    z-index: 4;
}

.thumbnail-item:hover .thumb-hover-overlay {
    opacity: 1;
}

/* No hover overlay while the item is still loading */
.thumbnail-item.status-pending .thumb-hover-overlay,
.thumbnail-item.status-processing .thumb-hover-overlay {
    opacity: 0;
    pointer-events: none;
}

.thumb-hover-overlay .btn-magnifier,
.thumb-hover-overlay .btn-delete-thumb {
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.92);
    border: none;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ink);
    box-shadow: var(--sh-sm);
    transition: background var(--t-fast), color var(--t-fast);
    padding: 0;
    position: static;
    flex-shrink: 0;
}

.thumb-hover-overlay .btn-magnifier svg,
.thumb-hover-overlay .btn-delete-thumb svg {
    width: 13px;
    height: 13px;
}

.thumb-hover-overlay .btn-delete-thumb {
    color: var(--red);
}

.thumb-hover-overlay .btn-magnifier:hover {
    background: var(--ink);
    color: #fff;
}

.thumb-hover-overlay .btn-delete-thumb:hover {
    background: var(--red);
    color: #fff;
}

/* Bottom label strip */
.thumbnail-label {
    display: flex;
    align-items: center;
    padding: 5px 8px;
    border-top: 1px solid var(--border-soft);
    background: var(--surface);
    flex-shrink: 0;
    transition: background var(--t-fast);
    gap: 4px;
}

.thumbnail-item.active .thumbnail-label {
    background: var(--accent-soft);
}

.thumbnail-label-num {
    font-size: 11px;
    font-weight: 500;
    color: var(--ink-2);
    transition: color var(--t-fast);
}

.thumbnail-item.active .thumbnail-label-num {
    color: var(--accent);
    font-weight: 600;
}

.thumbnail-label-status {
    font-size: 10px;
    font-weight: 500;
    margin-left: auto;
    flex-shrink: 0;
}

.thumbnail-label-status.status-success    { color: var(--green); }
.thumbnail-label-status.status-processing { color: var(--orange-color); }
.thumbnail-label-status.status-pending    { color: var(--ink-4); }
.thumbnail-label-status.status-failed     { color: var(--red); }

/* Thumbnail Controls - Vertical Panel */
.thumbnail-controls {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    padding: 0.75rem 0.5rem;
    background: rgba(255, 255, 255, 0.95);
    border-left: 1px solid var(--border-color);
    z-index: 2;
    min-width: 36px;
}

.thumbnail-controls .control-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    min-width: 28px;
    min-height: 28px;
    background: transparent;
    border: 1px solid var(--border-color);
    border-radius: 0.25rem;
    cursor: pointer;
    transition: all 0.2s;
    padding: 0;
    flex-shrink: 0;
}

.thumbnail-controls .control-btn:hover {
    background: var(--bg-secondary);
}

.thumbnail-controls .btn-delete {
    background: var(--danger-color);
    border-color: var(--danger-color);
    color: white;
}

.thumbnail-controls .btn-delete:hover {
    background: #dc2626;
    border-color: #dc2626;
}

.thumbnail-controls .btn-drag {
    cursor: grab;
    color: var(--text-tertiary);
    width: 32px;
    height: 32px;
    min-width: 32px;
    min-height: 32px;
}

.thumbnail-controls .btn-drag svg {
    width: 18px;
    height: 18px;
}

.thumbnail-controls .btn-drag:active {
    cursor: grabbing;
}

.thumbnail-controls svg {
    width: 14px;
    height: 14px;
    flex-shrink: 0;
}

/* Highlight thumbnails selected for deletion */
.thumbnail-item.delete-selected {
    border-color: var(--primary-color);
    box-shadow: 0 0 0 3px rgba(232, 112, 58, 0.15);
}

/* Upload Zone in Thumbnail List */
.upload-zone-thumbnail {
    width: 100%;
    aspect-ratio: 4/3;
    border: 2px dashed var(--border-color);
    border-radius: 0.375rem;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: all 0.2s;
    flex-shrink: 0;
    background: var(--bg-secondary);
}

.upload-zone-thumbnail:hover {
    border-color: var(--primary-color);
    background: rgba(232, 112, 58, 0.05);
}

.upload-zone-icon {
    color: var(--text-tertiary);
}

.upload-zone-icon svg {
    width: 32px;
    height: 32px;
}

/* Thumbnail Status Indicator */
.thumbnail-status {
    position: absolute;
    top: 6px;
    left: 6px;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    border: 2px solid white;
    z-index: 3;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}

.thumbnail-status.status-success {
    background: #27C93F;
}

.thumbnail-status.status-processing {
    background: #FFBD2E;
    animation: pulse 1.5s ease-in-out infinite;
}

.thumbnail-status.status-pending {
    background: #94a3b8;
    animation: pulse 2s ease-in-out infinite;
}

.thumbnail-status.status-failed {
    background: #FF5F57;
}


@keyframes pulse {
    0%, 100% {
        opacity: 1;
    }
    50% {
        opacity: 0.5;
    }
}

/* Retry Button for Failed Status — same size as checkboxes, always visible */
.thumbnail-retry {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 15;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 58px;
    height: 58px;
    background: rgba(255, 255, 255, 0.85);
    color: var(--text-secondary);
    border: 2px solid rgba(255, 255, 255, 0.6);
    border-radius: 50%;
    cursor: pointer;
    opacity: 1;
    transition: background 0.15s, color 0.15s, transform 0.15s;
    pointer-events: all;
    padding: 0;
}
.thumbnail-retry svg {
    width: 24px;
    height: 24px;
}
.thumbnail-retry:hover {
    background: #fff;
    color: var(--text-primary);
    border-color: var(--border-color);
    transform: translate(-50%, -50%) scale(1.08);
}
.retry-icon {
    transition: transform 0.45s ease;
}
.thumbnail-retry:hover .retry-icon {
    transform: rotate(180deg);
}

/* ── Management Modal ──────────────────────────────────────────────────────── */
/* ── Management modal ────────────────────────────────────────────────────── */
.mgmt-modal-content {
    max-width: 900px;
    width: 95vw;
    max-height: 92vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    padding: 0;
}

/* Header */
.mgmt-modal-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 20px 12px;
    border-bottom: 1px solid var(--border);
    flex-shrink: 0;
}
.mgmt-modal-title-group {
    display: flex;
    flex-direction: column;
    gap: 1px;
}
.mgmt-modal-label {
    font-size: 10px;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--ink-4);
}
.mgmt-modal-title-group h3 {
    font-size: 15px;
    font-weight: 700;
    color: var(--ink);
    margin: 0;
}

/* Filter tabs — segmented pill style */
.mgmt-tabs-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 8px 20px;
    border-bottom: 1px solid var(--border);
    flex-shrink: 0;
    background: var(--surface);
}
.mgmt-tabs-pills {
    display: flex;
    gap: 2px;
    background: var(--surface-2);
    border-radius: 100px;
    padding: 3px;
}
.mgmt-tab {
    padding: 4px 13px;
    font-size: 12px;
    font-weight: 500;
    background: transparent;
    border: none;
    border-radius: 100px;
    color: var(--ink-3);
    cursor: pointer;
    font-family: var(--font-ui);
    transition: all var(--t-fast);
    white-space: nowrap;
}
.mgmt-tab:hover { color: var(--ink); }
.mgmt-tab--active {
    background: var(--surface);
    color: var(--ink);
    font-weight: 600;
    box-shadow: 0 1px 4px rgba(26,25,23,.10);
}
.mgmt-tabs-count {
    font-size: 12px;
    color: var(--ink-3);
    white-space: nowrap;
    flex-shrink: 0;
}

/* Grid */
.mgmt-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
    gap: 8px;
    padding: 16px 20px;
    overflow-y: auto;
    flex: 1;
    min-height: 160px;
}

/* Grid items */
.mgmt-item {
    position: relative;
    border-radius: var(--r-md);
    overflow: hidden;
    cursor: pointer;
    aspect-ratio: 1;
    border: 2px solid transparent;
    transition: border-color var(--t-fast), box-shadow var(--t-fast);
    background: var(--surface-2);
}
.mgmt-item:hover {
    box-shadow: var(--sh-sm);
}
.mgmt-item.delete-selected {
    border-color: var(--accent);
    box-shadow: 0 0 0 3px var(--accent-soft);
}
.mgmt-item .thumbnail-content {
    position: relative;
    width: 100%;
    height: 100%;
}
.mgmt-item .thumbnail-image {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
/* Checkbox — small centered circle, visible only when selected or hovered */
.mgmt-item .thumb-check {
    display: none;
    top: 50%;
    left: 50%;
    right: auto;
    transform: translate(-50%, -50%);
    width: 30px;
    height: 30px;
    background: rgba(255, 255, 255, 0.25);
    border-color: rgba(255, 255, 255, 0.6);
    z-index: 10;
}
.mgmt-item .thumb-check svg {
    width: 14px;
    height: 14px;
}
.mgmt-item:hover .thumb-check {
    display: flex;
}
.mgmt-item.delete-selected .thumb-check {
    display: flex;
    background: var(--accent);
    border-color: var(--accent);
    box-shadow: none;
}
.mgmt-item.delete-selected .thumb-check svg {
    opacity: 1;
}
/* Subtle overlay on mgmt items */
.mgmt-item .thumbnail-content::after {
    content: '';
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.06);
    z-index: 2;
    transition: background 0.15s;
    pointer-events: none;
}
.mgmt-item.delete-selected .thumbnail-content::after {
    background: rgba(232, 112, 58, 0.12);
}
/* Status dot in mgmt */
.mgmt-item .thumbnail-status {
    position: absolute;
    top: 5px;
    right: 5px;
    z-index: 15;
}
/* Drag state */
.mgmt-item.dragging { opacity: 0.35; }
.mgmt-item.drag-over { border-color: var(--accent); }

/* Action bar at the bottom */
.mgmt-action-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 12px 20px;
    border-top: 1px solid var(--border);
    background: var(--surface);
    flex-shrink: 0;
}
.mgmt-selected-count {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 80px;
}
.mgmt-count-pill {
    background: var(--accent-soft);
    color: var(--accent);
    font-size: 12px;
    font-weight: 700;
    padding: 2px 8px;
    border-radius: 100px;
    display: none;
}
.mgmt-count-label {
    font-size: 13px;
    color: var(--ink-3);
    display: none;
}
.mgmt-action-bar.has-selection .mgmt-count-pill,
.mgmt-action-bar.has-selection .mgmt-count-label { display: inline-block; }
.mgmt-action-btns {
    display: flex;
    gap: 6px;
    align-items: center;
}
.mgmt-action-btn {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 6px 14px;
    font-size: 13px;
    font-weight: 500;
    font-family: var(--font-ui);
    border-radius: var(--r-md);
    border: 1.5px solid transparent;
    cursor: pointer;
    transition: all var(--t-fast);
    white-space: nowrap;
}
.mgmt-action-btn--ghost {
    background: transparent;
    border-color: var(--border);
    color: var(--ink-2);
}
.mgmt-action-btn--ghost:hover {
    background: var(--surface-2);
    color: var(--ink);
}
.mgmt-action-btn--retry {
    background: transparent;
    border-color: var(--border);
    color: var(--accent);
}
.mgmt-action-btn--retry:not(:disabled):hover {
    background: var(--accent-soft);
    border-color: var(--accent);
}
.mgmt-action-btn--retry:disabled,
.mgmt-action-btn--danger:disabled {
    opacity: 0.38;
    cursor: not-allowed;
}
.mgmt-action-btn--danger {
    background: var(--red-soft);
    border-color: rgba(217, 79, 79, .2);
    color: var(--red);
}
.mgmt-action-btn--danger:not(:disabled):hover {
    background: var(--red);
    border-color: var(--red);
    color: #fff;
}

/* Pages Area */
.pages-area {
    flex: 1;
    position: relative;
    overflow: hidden;
}

/* Loading State */
.loading-state {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    color: var(--text-secondary);
}


/* Empty State with Dropzone */
.empty-state {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
}

.dropzone-form {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
}

.dropzone-label {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
    padding: 3rem;
    border: 2px dashed var(--border-color);
    border-radius: 1rem;
    cursor: pointer;
    transition: all 0.2s;
    background: var(--bg-primary);
}

.dropzone-label:hover {
    border-color: var(--primary-color);
    background: var(--bg-secondary);
}

.dropzone-label.dragover {
    border-color: var(--primary-color);
    background: rgba(232, 112, 58, 0.05);
}

.dropzone-icon {
    color: var(--text-tertiary);
}

.dropzone-title {
    font-size: 1.125rem;
    font-weight: 600;
    color: var(--text-primary);
}

.dropzone-subtitle {
    font-size: 0.875rem;
    color: var(--text-secondary);
}

/* No-tokens empty state */
.no-tokens-state {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.75rem;
    padding: 3rem;
    border: 2px dashed var(--border-color);
    border-radius: 1rem;
    background: var(--bg-primary);
    text-align: center;
    max-width: 340px;
}

.no-tokens-icon {
    color: var(--text-tertiary);
    margin-bottom: 0.25rem;
}

.no-tokens-title {
    font-size: 1.125rem;
    font-weight: 600;
    color: var(--text-primary);
    margin: 0;
}

.no-tokens-desc {
    font-size: 0.875rem;
    color: var(--text-secondary);
    margin: 0;
}

.no-tokens-hint {
    font-size: 0.8125rem;
    color: var(--text-tertiary);
    margin: 0;
}

.no-tokens-actions {
    display: flex;
    flex-direction: column;
    gap: 8px;
    width: 100%;
    margin-top: 0.5rem;
}

.btn-no-tokens-primary {
    display: block;
    width: 100%;
    padding: 10px 18px;
    background: var(--accent, #E8703A);
    color: #fff;
    border: none;
    border-radius: var(--r-md, 10px);
    font-family: var(--font, 'Outfit', sans-serif);
    font-size: 14px;
    font-weight: 600;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    transition: background 150ms ease;
}
.btn-no-tokens-primary:hover { background: var(--accent-dark, #C8572A); }

.btn-no-tokens-secondary {
    display: block;
    width: 100%;
    padding: 10px 18px;
    background: var(--bg-primary, #fff);
    color: var(--text-primary, #1A1917);
    border: 1px solid var(--border-color, #E4DDD4);
    border-radius: var(--r-md, 10px);
    font-family: var(--font, 'Outfit', sans-serif);
    font-size: 14px;
    font-weight: 500;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    transition: background 150ms ease;
}
.btn-no-tokens-secondary:hover { background: var(--bg-secondary, #F6F4F0); }

.no-tokens-login-link {
    font-size: 12px;
    color: var(--text-tertiary, #9A928A);
    text-decoration: none;
    display: block;
    text-align: center;
    margin-top: 2px;
    transition: color 150ms ease;
}
.no-tokens-login-link:hover { color: var(--accent, #E8703A); }

/* Page Viewer */
.page-viewer {
    position: relative;
    width: 100%;
    height: 100%;
}

/* Viewer toolbar — top navigation bar replacing floating pills */
.viewer-toolbar {
    background: var(--surface);
    border-bottom: 1px solid var(--border);
    height: 50px;
    display: flex;
    align-items: center;
    padding: 0 18px;
    gap: 10px;
    flex-shrink: 0;
}
.toolbar-actions {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: 6px;
}
.toolbar-sep-v {
    width: 1px;
    height: 20px;
    background: var(--border);
    margin: 0 4px;
    flex-shrink: 0;
}
.viewer-nav {
    display: flex;
    align-items: center;
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: var(--r-md);
    overflow: hidden;
}
.viewer-nav-btn {
    width: 36px;
    height: 36px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ink-2);
    cursor: pointer;
    transition: all var(--t-fast);
    background: transparent;
    border: none;
    padding: 0;
}
.viewer-nav-btn:hover:not(:disabled) { background: var(--surface); color: var(--ink); }
.viewer-nav-btn:disabled { opacity: 0.35; cursor: not-allowed; }
.viewer-nav-count {
    padding: 0 14px;
    font-size: 14px;
    font-weight: 500;
    color: var(--ink);
    border-left: 1px solid var(--border);
    border-right: 1px solid var(--border);
    white-space: nowrap;
    line-height: 36px;
}

/* Three-pill page navigation group — hidden, replaced by .viewer-toolbar */
.page-nav-group {
    display: none;
}

/* Individual arrow pills — legacy, hidden */
.nav-pill,
.nav-pill:hover:not(:disabled),
.nav-pill:disabled { display: none; }

/* Central page counter pill — legacy, hidden */
.page-notch,
.notch-current,
.notch-divider,
.notch-total { display: none; }

/* Legacy selector kept for any JS references */
.nav-notch-btn {
    display: none;
}

/* Editor hint — shown when no page selected */
.editor-hint {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    gap: 1rem;
    color: var(--text-secondary);
    opacity: 0.45;
    user-select: none;
    pointer-events: none;
}

.editor-hint svg {
    opacity: 0.6;
}

.editor-hint p {
    font-size: 1.1rem;
    font-weight: 500;
    margin: 0;
}

.editor-hint span {
    font-size: 0.875rem;
}

/* Page Content Wrapper - Horizontal Slider */
.page-content-wrapper {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    display: flex;
    transition: transform 0.3s ease;
}

/* Page */
.page {
    width: 100%;
    height: 100%;
    flex-shrink: 0;
    padding: 28px 56px;
    overflow-y: auto;
    overflow-x: hidden;
}

.page::-webkit-scrollbar {
    width: 8px;
}

.page::-webkit-scrollbar-track {
    background: transparent;
}

.page::-webkit-scrollbar-thumb {
    background: var(--border-color);
    border-radius: 4px;
}

.page-content {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--r-lg);
    box-shadow: var(--sh-md);
    width: 100%;
    max-width: 860px;
    overflow: hidden;
    margin: 0 auto;
}

/* Filename tab inside the page card */
.file-tab {
    display: flex;
    align-items: center;
    gap: 7px;
    padding: 9px 16px;
    border-bottom: 1px solid var(--border-soft);
    background: var(--surface-2);
    font-size: 12px;
    font-weight: 500;
    color: var(--ink-3);
}

.file-tab svg {
    flex-shrink: 0;
    color: var(--ink-3);
}

.file-tab-name {
    font-size: 12px;
    font-weight: 500;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Text Editor container */
.editor-container {
    display: flex;
    flex-direction: column;
    background: var(--surface);
}

/* ── Editor skeleton (inside .editor-content, toolbar stays visible) ─────── */
.editor-skeleton {
    display: flex;
    flex-direction: column;
    gap: 0.7rem;
    padding: 0.1rem 0 0.5rem;
    pointer-events: none;
    user-select: none;
}

.sk-line {
    height: 1em;
    border-radius: 5px;
    background: linear-gradient(
        90deg,
        #ebebeb 25%,
        #d8d8d8 50%,
        #ebebeb 75%
    );
    background-size: 200% 100%;
    animation: sk-shimmer 1.6s ease-in-out infinite;
}

.sk-gap { height: 0.6em; }

.sk-w-full  { width: 100%; }
.sk-w-80    { width: 80%; }
.sk-w-70    { width: 70%; }
.sk-w-60    { width: 60%; }
.sk-w-40    { width: 40%; }

@keyframes sk-shimmer {
    0%   { background-position: 200% 0; }
    100% { background-position: -200% 0; }
}

/* ── Editor failed placeholder (inside .editor-content) ─────────────────── */
.editor-failed-placeholder {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.75rem;
    padding: 3rem 1rem;
    color: var(--danger-color, #ef4444);
    font-size: 0.875rem;
    text-align: center;
    line-height: 1.55;
    pointer-events: none;
    user-select: none;
}

.editor-failed-placeholder svg { opacity: 0.7; }

.editor-failed-placeholder span {
    font-weight: 600;
    font-size: 0.9rem;
}

/* ── Dimmed thumbnails for failed / no-token states ─────────────────────── */
.thumbnail-item.status-failed .thumbnail-image {
    filter: grayscale(55%) brightness(0.82);
    opacity: 0.72;
}

.thumbnail-item.status-failed {
    opacity: 0.82;
}

/* ── Single-row editor toolbar ───────────────────────────────────────────── */
.editor-toolbar {
    display: flex;
    align-items: center;
    flex-wrap: nowrap;
    overflow-x: auto;
    gap: 2px;
    padding: 7px 12px;
    border-bottom: 1px solid var(--border);
    background: var(--surface);
    position: sticky;
    top: 0;
    z-index: 10;
}
.editor-toolbar::-webkit-scrollbar { display: none; }
.editor-toolbar { scrollbar-width: none; }

/* toolbar-row contents поднимаем на уровень toolbar напрямую */
.toolbar-row {
    display: contents;
}

.toolbar-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 28px;
    border: none;
    background: transparent;
    cursor: pointer;
    border-radius: var(--r-sm);
    color: var(--ink-2);
    font-family: var(--font-ui);
    font-size: 13px;
    font-weight: 500;
    transition: all var(--t-fast);
    flex-shrink: 0;
    line-height: 0;
    padding: 0;
}

.toolbar-btn:hover:not(:disabled) {
    background: var(--surface-2);
    color: var(--ink);
}

.toolbar-btn:active:not(:disabled) {
    transform: scale(0.95);
}

.toolbar-btn.active {
    background: var(--accent-soft);
    color: var(--accent-dark);
}

/* Disabled state */
.toolbar-btn:disabled {
    opacity: 0.35;
    cursor: not-allowed;
    pointer-events: none;
}

.toolbar-btn-copied {
    color: var(--success-color) !important;
    background: rgba(16, 185, 129, 0.1) !important;
}

/* ── Legend popover ────────────────────────────────────────────────────────── */
.legend-popover-wrap {
    position: relative;
}

/* Legend inside file-tab: push to right edge */
.file-tab-legend {
    margin-left: auto;
    flex-shrink: 0;
}

.toolbar-btn-legend {
    color: var(--ink-3);
    width: 26px;
    height: 26px;
    border-radius: var(--r-sm);
}
.toolbar-btn-legend:hover { color: var(--ink-2); background: var(--surface-2); }

.legend-popover {
    display: none;
    position: absolute;
    top: calc(100% + 6px);
    right: 0;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--r-md);
    box-shadow: var(--sh-md);
    padding: 12px 14px;
    z-index: 200;
    min-width: 260px;
    flex-direction: column;
    gap: 6px;
}

.legend-popover-wrap:hover .legend-popover {
    display: flex;
}

.legend-colors {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

/* Confidence legend */
.legend-title {
    font-size: 11px;
    font-weight: 600;
    color: var(--ink-3);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 2px;
}

.legend-item {
    display: flex;
    align-items: center;
    gap: 7px;
}

.legend-swatch {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    flex-shrink: 0;
}

.legend-green  { background: #27C93F; }
.legend-yellow { background: #FFBD2E; }
.legend-red    { background: #FF5F57; }

.legend-label {
    font-size: 12px;
    color: var(--ink-2);
    white-space: nowrap;
}

.legend-note {
    font-size: 11px;
    color: var(--ink-3);
    line-height: 1.5;
    margin: 0;
    padding-top: 8px;
    border-top: 1px solid var(--border-soft);
}

/* H1/H2/H3/¶ compact text buttons in horizontal toolbar */
.toolbar-fmt {
    font-weight: 700;
    font-size: 12px;
    width: auto;
    padding: 0 8px;
    height: 28px;
    color: var(--ink-2);
    letter-spacing: -0.03em;
}

/* toolbar-sep — по дизайну; toolbar-separator — legacy alias */
.toolbar-sep,
.toolbar-separator {
    width: 1px;
    height: 18px;
    background: var(--border);
    margin: 0 3px;
    flex-shrink: 0;
}

/* Font size dropdown in toolbar */
.toolbar-select {
    font-family: var(--font-ui);
    font-size: 12px;
    font-weight: 500;
    height: 28px;
    padding: 0 8px;
    border: 1.5px solid var(--border);
    border-radius: var(--r-sm);
    background: var(--surface);
    color: var(--ink);
    cursor: pointer;
    outline: none;
    appearance: none;
    -webkit-appearance: none;
    text-align: center;
    min-width: 38px;
    transition: all var(--t-fast);
}

.toolbar-select:hover,
.toolbar-select:focus {
    border-color: var(--ink-3);
}

/* Color picker buttons */
/* ── Color split buttons (apply | ▼ palette) ─────────────────────────── */
/* Color buttons — single button, no split */
.toolbar-btn-fgcolor,
.toolbar-btn-bgcolor {
    flex-direction: column;
    gap: 2px;
    padding: 3px 5px 2px;
}

/* Hidden native color picker */
.toolbar-color-input {
    position: absolute;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 0;
    height: 0;
    padding: 0;
    border: none;
    opacity: 0;
    pointer-events: none;
}

/* Color swatches under the icon */
.toolbar-color-swatch {
    display: block;
    width: 13px;
    height: 3.5px;
    border-radius: 2px;
    flex-shrink: 0;
}
.toolbar-fgcolor-swatch { background: #e06666; }
.toolbar-bgcolor-swatch { background: #ffe066; }

/* ── Color picker dropdown panel ─────────────────────────────────── */
.cp-panel {
    position: fixed;
    z-index: 9999;
    background: #fff;
    border: 1px solid var(--border-color, #e2e8f0);
    border-radius: 0.625rem;
    box-shadow: 0 8px 24px rgba(0,0,0,0.13), 0 2px 6px rgba(0,0,0,0.07);
    padding: 10px;
    min-width: 168px;
    opacity: 0;
    transform: translateY(-6px) scale(0.97);
    pointer-events: none;
    transition: opacity 0.14s ease, transform 0.14s ease;
    user-select: none;
}
.cp-panel.cp-open {
    opacity: 1;
    transform: translateY(0) scale(1);
    pointer-events: auto;
}

/* Swatch grid — 6 columns */
.cp-grid {
    display: grid;
    grid-template-columns: repeat(6, 24px);
    gap: 4px;
    margin-bottom: 8px;
}

.cp-swatch {
    width: 24px;
    height: 24px;
    border-radius: 4px;
    border: 1.5px solid rgba(0,0,0,0.10);
    cursor: pointer;
    transition: transform 0.1s, box-shadow 0.1s;
    outline: none;
    padding: 0;
}
.cp-swatch:hover {
    transform: scale(1.18);
    box-shadow: 0 2px 8px rgba(0,0,0,0.18);
    z-index: 1;
    position: relative;
}
.cp-swatch.cp-swatch--active {
    box-shadow: 0 0 0 2.5px #fff, 0 0 0 4px #E8703A;
    transform: scale(1.12);
    position: relative;
    z-index: 1;
}

/* "Другой цвет…" toggle button */
.cp-custom-row {
    display: flex;
    align-items: center;
    gap: 7px;
    width: 100%;
    padding: 4px 6px;
    margin-bottom: 0;
    border-radius: 0.375rem;
    border: 1px solid transparent;
    background: transparent;
    cursor: pointer;
    font-size: 0.8rem;
    color: var(--text-secondary, #64748b);
    transition: background 0.1s, color 0.1s, box-shadow 0.1s, border-color 0.1s;
    text-align: left;
}
.cp-custom-row:hover {
    background: var(--bg-secondary, #f1f5f9);
    color: var(--text-primary, #0f172a);
    border-color: var(--border-color, #e2e8f0);
}
/* Вдавленное состояние */
.cp-custom-row.cp-custom-open {
    background: var(--bg-secondary, #e8edf5);
    color: var(--text-primary, #0f172a);
    border-color: var(--border-color, #c8d0db);
    box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.12);
    border-radius: 0.375rem 0.375rem 0 0;
}
.cp-custom-rainbow {
    display: inline-block;
    width: 16px;
    height: 16px;
    border-radius: 3px;
    border: 1.5px solid rgba(0,0,0,0.12);
    background: linear-gradient(135deg, #f87171 0%, #facc15 33%, #4ade80 66%, #60a5fa 100%);
    flex-shrink: 0;
}

/* Custom color swatch (right side of button) */
.cp-custom-swatch {
    width: 20px;
    height: 20px;
    border-radius: 3px;
    border: 1.5px solid rgba(0,0,0,0.15);
    flex-shrink: 0;
    margin-left: auto;
}
/* Шахматка = цвет не выбран (прозрачность / пусто) */
.cp-custom-swatch.cp-swatch-empty {
    background-color: #ffffff;
    background-image:
        linear-gradient(45deg, #ccc 25%, transparent 25%),
        linear-gradient(-45deg, #ccc 25%, transparent 25%),
        linear-gradient(45deg, transparent 75%, #ccc 75%),
        linear-gradient(-45deg, transparent 75%, #ccc 75%);
    background-size: 6px 6px;
    background-position: 0 0, 0 3px, 3px -3px, -3px 0px;
}

/* Expand-блок с нативным пикером + кнопкой "Выбрать" */
/* Floating custom color picker popup */
/* Floating Pickr popup wrapper */
.cp-picker-popup {
    position: fixed;
    z-index: 10000;
    display: none;
    border-radius: 0.75rem;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18), 0 2px 6px rgba(0, 0, 0, 0.08);
}
.cp-picker-popup.cp-open {
    display: block;
}
/* Pickr mount point: hide the trigger button entirely */
.cp-picker-popup .pcr-button {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
    padding: 0 !important;
    margin: 0 !important;
    position: absolute !important;
    pointer-events: none !important;
}
/* pcr-app: reset positioning so it sits naturally in our popup */
.cp-picker-popup .pcr-app {
    position: static !important;
    display: block !important;
    visibility: visible !important;
    opacity: 1 !important;
    transform: none !important;
    box-shadow: none !important;
    border-radius: 0.75rem !important;
    overflow: hidden;
}
/* Save button styled as primary action */
.cp-picker-popup .pcr-result {
    border-radius: 0.375rem !important;
}
/* Our own save button (replaces Pickr's built-in which triggers hide()) */
.cp-picker-save {
    display: block;
    width: calc(100% - 16px);
    margin: 0 8px 8px;
    padding: 7px 0;
    background: var(--primary, #E8703A);
    color: #fff;
    border: none;
    border-radius: 0.375rem;
    font-size: 0.82rem;
    font-weight: 500;
    cursor: pointer;
    transition: background 0.15s;
}
.cp-picker-save:hover {
    background: var(--accent-dark);
}

/* Footer: Reset + Apply */
.cp-footer {
    display: flex;
    align-items: center;
    gap: 6px;
    border-top: 1px solid var(--border-color, #e2e8f0);
    padding-top: 8px;
    margin-top: 2px;
}
.cp-btn {
    flex: 1;
    padding: 4px 6px;
    border-radius: 0.375rem;
    border: 1px solid rgba(217, 79, 79, .2);
    background: var(--red-soft);
    font-size: 0.75rem;
    cursor: pointer;
    color: var(--red);
    transition: background 0.12s, color 0.12s, border-color 0.12s;
    white-space: nowrap;
}
.cp-btn:hover {
    background: var(--red);
    color: #fff;
    border-color: var(--red);
}
.cp-apply {
    background: var(--accent);
    color: #fff;
    border-color: var(--accent);
}
.cp-apply:hover {
    background: var(--accent-dark);
    color: #fff;
    border-color: var(--accent-dark);
}

/* Table insertion modal */
.table-modal-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.35);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 500;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.18s ease;
}

.table-modal-overlay.visible {
    opacity: 1;
    pointer-events: auto;
}

.table-modal {
    background: #fff;
    border-radius: 1rem;
    box-shadow: 0 8px 40px rgba(0, 0, 0, 0.18), 0 2px 8px rgba(0, 0, 0, 0.08);
    padding: 1.25rem 1.5rem 1.5rem;
    min-width: 300px;
    max-width: 360px;
    width: 100%;
}

.table-modal-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 1rem;
}

.table-modal-title {
    font-size: 1rem;
    font-weight: 600;
    color: var(--text-primary);
}

.table-modal-close {
    background: none;
    border: none;
    font-size: 1.4rem;
    line-height: 1;
    cursor: pointer;
    color: var(--text-secondary);
    padding: 0 0.25rem;
    border-radius: 0.25rem;
    transition: color 0.15s, background 0.15s;
}

.table-modal-close:hover {
    color: var(--text-primary);
    background: var(--bg-primary);
}

.table-modal-body {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.table-modal-grid {
    display: grid;
    grid-template-columns: repeat(8, 1fr);
    gap: 3px;
}

.table-grid-cell {
    width: 24px;
    height: 24px;
    border: 1.5px solid var(--border-color);
    border-radius: 3px;
    cursor: pointer;
    transition: border-color 0.12s, background 0.12s;
}

.table-grid-cell.active {
    background: rgba(232, 112, 58, 0.15);
    border-color: var(--primary-color);
}

.table-modal-label {
    font-size: 0.8125rem;
    color: var(--text-secondary);
    text-align: center;
    min-height: 1.2em;
}

.table-modal-custom {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    font-size: 0.8125rem;
    color: var(--text-secondary);
    flex-wrap: wrap;
}

.table-modal-custom input[type="number"] {
    width: 52px;
    height: 30px;
    padding: 0 0.4rem;
    border: 1px solid var(--border-color);
    border-radius: 0.375rem;
    font-size: 0.8125rem;
    text-align: center;
    outline: none;
    transition: border-color 0.15s;
}

.table-modal-custom input[type="number"]:focus {
    border-color: var(--primary-color);
}

.table-modal-insert-btn {
    margin-left: auto;
    padding: 0.3rem 0.875rem;
    background: var(--primary-color);
    color: #fff;
    border: none;
    border-radius: 0.5rem;
    font-size: 0.8125rem;
    font-weight: 600;
    cursor: pointer;
    transition: opacity 0.15s;
}

.table-modal-insert-btn:hover {
    opacity: 0.88;
}

/* Editor-inserted table (interactive, editable) */
.editor-table {
    border-collapse: collapse;
    border: none;
    outline: none;
    width: 100%;
    margin: 1rem 0;
    font-size: 0.975rem;
    border-radius: 0.5rem;
    overflow: hidden;
}

.editor-table th,
.editor-table td {
    border: none;
    border-bottom: 1px solid var(--border-color, #e5e7eb);
    padding: 0.4rem 0.65rem;
    vertical-align: top;
    min-width: 60px;
    white-space: normal;
    word-break: break-word;
}
.editor-table th + th,
.editor-table td + td {
    border-left: 1px solid var(--border-color, #e5e7eb);
}
.editor-table tbody tr:last-child td {
    border-bottom: none;
}

.editor-table th {
    background: var(--bg-secondary, #f5f5f5);
    font-weight: 600;
    text-align: left;
}

.editor-table td:focus,
.editor-table th:focus {
    outline: 2px solid rgba(232, 112, 58, 0.45);
    outline-offset: -2px;
}

.editor-content {
    width: 100%;
    min-height: 320px;
    padding: 32px 40px;
    font-family: var(--font-ui);
    font-size: 15px;
    line-height: 1.8;
    color: var(--ink-2);
    overflow-y: visible;
    overflow-x: hidden;
    outline: none;
    border-radius: 0;
    background: var(--surface);
    white-space: normal;
    word-wrap: break-word;
    overflow-wrap: break-word;
    word-break: break-word;
    max-width: 100%;
    box-sizing: border-box;
}

.editor-content:empty:before {
    content: attr(data-placeholder);
    color: var(--text-secondary);
    opacity: 0.5;
}

.editor-content h1 {
    font-size: 24px;
    font-weight: 700;
    color: var(--ink);
    margin: 20px 0 10px;
    letter-spacing: -0.3px;
    line-height: 1.2;
}

.editor-content h2 {
    font-size: 19px;
    font-weight: 600;
    color: var(--ink);
    margin: 16px 0 8px;
    letter-spacing: -0.2px;
}

.editor-content h3 {
    font-size: 16px;
    font-weight: 600;
    color: var(--ink);
    margin: 12px 0 6px;
}

.editor-content h4 {
    font-size: 14px;
    font-weight: 600;
    color: var(--ink-2);
    margin: 10px 0 5px;
}

.editor-content p {
    margin: 0 0 12px;
}

/* Lists */
.editor-content ul,
.editor-content ol {
    margin: 0.5rem 0 0.75rem 1.6rem;
    padding: 0;
}
.editor-content li {
    margin: 0.2rem 0;
    line-height: 1.5;
}

/* Horizontal rule */
.editor-content hr {
    border: none;
    border-top: 1px solid var(--border-color, #d0d0d0);
    margin: 1.25rem 0;
}

/* Inline formatting */
.editor-content em  { font-style: italic; }
.editor-content del { text-decoration: line-through; color: var(--text-muted, #888); }
.editor-content s   { text-decoration: line-through; }
.editor-content u   { text-decoration: underline; }
.editor-content b, .editor-content strong { font-weight: 600; color: var(--ink); }
.editor-content i   { font-style: italic; }

/* Highlighted text — <mark> from AI output */
.editor-content mark {
    background: rgba(255, 235, 59, 0.55);
    border-radius: 2px;
    padding: 0 2px;
    color: inherit;
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
}

/* Superscript / subscript */
.editor-content sup,
.editor-content sub {
    font-size: 0.75em;
    line-height: 0;
    position: relative;
    vertical-align: baseline;
}
.editor-content sup { top: -0.5em; }
.editor-content sub { bottom: -0.25em; }

/* p[align] — deprecated HTML attribute, add explicit CSS for cross-browser safety */
.editor-content p[align="center"],
.editor-content div[align="center"] { text-align: center; }
.editor-content p[align="right"],
.editor-content div[align="right"]  { text-align: right; }
.editor-content p[align="left"],
.editor-content div[align="left"]   { text-align: left; }

.editor-content code {
    font-family: var(--font-mono, 'Courier New', 'Consolas', monospace);
    background: var(--bg-secondary, #f5f5f5);
    border: 1px solid var(--border-color, #e0e0e0);
    padding: 0.1em 0.4em;
    border-radius: 3px;
    font-size: 0.88em;
}

/* Tables — both native <table> and legacy .md-table class */
.editor-content table,
.editor-content .md-table {
    border-collapse: collapse;
    border: none;             /* remove any outer border / browser default */
    outline: none;
    width: 100%;
    margin: 1rem 0;
    font-size: 0.95rem;
    white-space: normal;
    table-layout: auto;
    word-break: normal;
    border-radius: 0.5rem;
    overflow: hidden;         /* clip corners for rounded look */
}

/* Scroll wrapper for very wide tables */
.editor-content table {
    display: block;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    border-radius: 0.5rem;
}

.editor-content table th,
.editor-content table td,
.editor-content .md-table th,
.editor-content .md-table td {
    border: none;
    border-bottom: 1px solid var(--border-color, #e5e7eb);
    padding: 0.5rem 0.85rem;
    text-align: left;
    vertical-align: top;
    white-space: normal;
    min-width: 80px;
}

/* Vertical separators between columns — subtle */
.editor-content table th + th,
.editor-content table td + td,
.editor-content .md-table th + th,
.editor-content .md-table td + td {
    border-left: 1px solid var(--border-color, #e5e7eb);
}

.editor-content table thead th,
.editor-content .md-table thead th {
    background: var(--bg-secondary, #f4f6f9);
    font-weight: 600;
    color: var(--text-primary);
    border-bottom: 1.5px solid var(--border-color, #e0e2e6);
}

/* Last row — no bottom border to avoid double line at table edge */
.editor-content table tbody tr:last-child td,
.editor-content .md-table tbody tr:last-child td {
    border-bottom: none;
}

.editor-content table tbody tr:nth-child(even) td,
.editor-content .md-table tbody tr:nth-child(even) td {
    background: var(--bg-hover, #f9fafb);
}

.editor-content table tbody tr:hover td {
    background: var(--bg-secondary, #f0f2f5);
}

/* Blockquote */
.editor-content blockquote {
    border-left: 4px solid #6699CC;
    background: rgba(102, 153, 204, 0.08);
    margin: 0.75rem 0;
    padding: 0.5rem 1rem;
    border-radius: 0 6px 6px 0;
}
.editor-content blockquote p {
    margin: 0;
}

/* Fence blocks: :::note / :::formula / :::warning */
.editor-content .md-fence {
    margin: 0.75rem 0;
    padding: 0.6rem 1rem;
    border-radius: 0 6px 6px 0;
    border: 1px solid transparent;
    border-left-width: 4px;
}
.editor-content .md-fence p {
    margin: 0.2rem 0 0;
}
.editor-content .md-fence-label {
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    margin-bottom: 0.3rem;
}
.editor-content .md-note {
    border-color: #AAAAAA;
    border-left-color: #6699CC;
    background: rgba(102, 153, 204, 0.08);
}
.editor-content .md-note .md-fence-label  { color: #4477AA; }
.editor-content .md-formula {
    border-color: #AAAAAA;
    border-left-color: #4DA6C8;
    background: rgba(77, 166, 200, 0.08);
    font-family: var(--font-mono, 'Courier New', monospace);
}
.editor-content .md-formula .md-fence-label { color: #2E7FA0; }
.editor-content .md-warning {
    border-color: #FFD700;
    border-left-color: #FFA000;
    background: rgba(255, 160, 0, 0.08);
}
.editor-content .md-warning .md-fence-label { color: #B36A00; }

/* Active block frame — box-shadow applied directly to the block element.
   Works on all element types including TABLE (outline fails on tables in Chrome).
   Renders in the element's own stacking context — never overlaps toolbar/header/table borders. */
.block-cursor-active {
    box-shadow: 0 0 0 2px var(--accent, #E8703A) !important;
}

/* Block action button — sits centred on the top-right corner of the frame */
.block-action-btn {
    position: fixed;
    display: none; /* toggled by JS */
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    padding: 0;
    background: var(--surface);
    border: 1.5px solid var(--accent, #E8703A);
    border-radius: 50%;
    color: var(--accent, #E8703A);
    cursor: pointer;
    z-index: 4;
    box-shadow: 0 1px 4px rgba(0,0,0,0.12);
    transition: color var(--t-fast), border-color var(--t-fast), background var(--t-fast);
}
.block-action-btn:hover {
    color: var(--red, #ef4444);
    border-color: var(--red, #ef4444);
    background: #fff5f5;
}

/* Image placeholder */
.editor-content .md-image {
    margin: 0.75rem 0;
    text-align: center;
}
.editor-content .md-image-placeholder {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 72px;
    background: rgba(0, 0, 0, 0.04);
    border: 2px dashed #CCCCCC;
    border-radius: 6px;
    color: #AAAAAA;
    font-size: 0.9rem;
    font-style: italic;
    letter-spacing: 0.05em;
    user-select: none;
}
.editor-content .md-image-caption {
    margin: 0.35rem 0 0;
    font-size: 0.85rem;
    color: #666;
    font-style: italic;
}

/* Confidence Words */
.confidence-word {
    display: inline;
    padding: 0.1em 0.45em 0.2em;
    border-radius: 2em;
    cursor: pointer;
    color: inherit;
    vertical-align: -0.07em;
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
    transition: filter 0.15s;
}

.confidence-word:hover {
    filter: brightness(0.88);
}

.confidence-high {
    background: rgba(39, 201, 63, 0.42);
}

.confidence-medium {
    background: rgba(255, 189, 46, 0.45);
}

.confidence-low {
    background: rgba(255, 95, 87, 0.42);
}

/* Author color / highlight spans ── preserved from source document */
.text-color-red    { color: #c0392b; }
.text-color-blue   { color: #2471a3; }
.text-color-green  { color: #1e8449; }
.text-color-orange { color: #d35400; }
.text-color-purple { color: #7d3c98; }
.text-color-hl {
    background: rgba(255, 235, 59, 0.55);
    border-radius: 2px;
    padding: 0 2px;
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
}

/* HTML-format blocks (new pipeline) — all scoped under .editor-content */
.editor-content figure.img-placeholder {
    display: block;
    margin: 0.75em auto;
    border: 1.5px dashed #bbb;
    border-radius: 6px;
    padding: 12px 16px;
    text-align: center;
    background: var(--bg-secondary, #f8f8f8);
    color: #888;
    font-style: italic;
    box-sizing: border-box;
    aspect-ratio: 1 / 1;
    max-height: 280px;
    overflow-y: auto;
}

/* side-by-side layout — class-based, no fragile inline-style selectors */
.editor-content .flex-row {
    display: flex;
    gap: 1em;
    align-items: flex-start;
}
.editor-content .flex-row > figure.img-placeholder {
    margin-left: 0;
    margin-right: 0;
    flex-shrink: 0;
}
/* text div as last child fills remaining space — only when it has no explicit width
   and the flex-row has exactly 2 children (figure+text pattern).
   Multi-column equal layouts (3+ items or items with style="width:X%") are unaffected. */
.editor-content .flex-row:has(> :nth-child(2):last-child) > div:last-child:not([style*="width"]) {
    flex: 1;
    min-width: 0;
}

/* Logical section grouping */
.editor-content div.section {
    display: block;
    margin: 0.5em 0 1em;
}

.editor-content div.formula {
    display: block;
    margin: 0.6em 0;
    padding: 8px 14px;
    background: #f4f8ff;
    border-left: 3px solid #4a86e8;
    border-radius: 0 4px 4px 0;
    font-family: 'Courier New', monospace;
    font-size: 0.95em;
    overflow-x: auto;
}

.editor-content div.warning {
    display: block;
    margin: 0.6em 0;
    padding: 8px 14px;
    background: #fffbea;
    border-left: 3px solid #f6b26b;
    border-radius: 0 4px 4px 0;
}

/* Word Replacement Popup — cloud style */
.word-replacement-popup {
    position: fixed;
    background: var(--bg-primary);
    border: 1.5px solid rgba(232, 112, 58, 0.14);
    border-radius: 1.5rem;
    box-shadow: 0 12px 40px rgba(0,0,0,0.13), 0 2px 8px rgba(0,0,0,0.06);
    min-width: 280px;
    max-width: 360px;
    z-index: 1000;
    overflow: hidden;
}

.popup-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0.875rem 1.125rem 0.75rem;
    background: rgba(248, 250, 255, 0.9);
    border-bottom: 1px solid var(--border-color);
}

.popup-word {
    font-size: 1.125rem;
    font-weight: 700;
    color: var(--text-primary);
    font-family: 'Literata', 'Georgia', serif;
    letter-spacing: -0.01em;
}

.popup-header-actions {
    display: flex;
    align-items: center;
    gap: 0.1rem;
    flex-shrink: 0;
}

.popup-close,
.popup-delete {
    background: transparent;
    border: none;
    cursor: pointer;
    color: var(--text-secondary);
    width: 30px;
    height: 30px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    transition: all 0.15s;
    flex-shrink: 0;
}

.popup-close:hover {
    background: var(--bg-secondary);
    color: var(--text-primary);
}

.popup-delete:hover {
    background: rgba(255, 95, 87, 0.1);
    color: #FF5F57;
}

.popup-body {
    padding: 0.875rem 1.125rem 1.125rem;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.popup-alt-list {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
}

.alt-option {
    display: flex;
    align-items: center;
    padding: 0.35rem 0.875rem;
    border: 1.5px solid var(--border-color);
    border-radius: 2rem;
    cursor: pointer;
    transition: all 0.15s;
    user-select: none;
}

.alt-option:hover {
    border-color: var(--primary-color);
    background: rgba(232, 112, 58, 0.05);
}

.alt-option.selected {
    border-color: var(--primary-color);
    background: var(--primary-color);
}

.alt-option.selected .alt-text {
    color: white;
}

.alt-text {
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--text-primary);
}

.popup-divider {
    height: 1px;
    background: var(--border-color);
    margin: 0 0 0.125rem;
}

.popup-input {
    width: 100%;
    padding: 0.55rem 1rem;
    border: 1.5px solid var(--border-color);
    border-radius: 2rem;
    font-size: 0.9rem;
    font-family: inherit;
    transition: all 0.2s;
    background: var(--bg-secondary);
    box-sizing: border-box;
}

.popup-input:focus {
    outline: none;
    border-color: var(--primary-color);
    background: white;
    box-shadow: 0 0 0 3px rgba(232, 112, 58, 0.08);
}

.popup-replace {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.4rem;
    width: 100%;
    padding: 0.55rem 1.25rem;
    background: rgba(232, 112, 58, 0.08);
    color: var(--primary-color);
    border: 1.5px solid rgba(232, 112, 58, 0.2);
    border-radius: 2rem;
    font-size: 0.875rem;
    font-weight: 600;
    cursor: pointer;
    transition: all 0.2s;
}

.popup-replace:hover {
    background: var(--primary-color);
    color: white;
    border-color: var(--primary-color);
}

/* ===== Inline editor tools inside viewer-toolbar (shown when main toolbar scrolls out) ===== */
.vtb-editor-tools {
    display: flex;
    align-items: center;
    gap: 2px;
    flex: 1;
    min-width: 0;
    overflow: hidden;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.2s ease;
}
.vtb-editor-tools--visible {
    opacity: 1;
    pointer-events: auto;
}
.vtb-group {
    display: flex;
    align-items: center;
    gap: 1px;
    flex-shrink: 0;
}
.vtb-sep {
    width: 1px;
    height: 18px;
    background: var(--border);
    margin: 0 4px;
    flex-shrink: 0;
}

/* Responsive: hide groups by priority as width shrinks */
@media (max-width: 1100px) { .vtb-group-align   { display: none; } .vtb-sep:has(+ .vtb-group-align)    { display: none; } }
@media (max-width: 900px)  { .vtb-group-headings{ display: none; } .vtb-sep:has(+ .vtb-group-headings) { display: none; } }
@media (max-width: 760px)  { .vtb-group-colors  { display: none; } .vtb-sep:has(+ .vtb-group-colors)   { display: none; } }
@media (max-width: 640px)  { .vtb-group-fontsize{ display: none; } .vtb-sep:has(+ .vtb-group-fontsize) { display: none; } }
@media (max-width: 520px)  { .vtb-group-format  { display: none; } .vtb-sep:has(+ .vtb-group-format)   { display: none; } }

/* Floating toolbar button base */
.ftb {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    background: transparent;
    border: none;
    border-radius: 0.375rem;
    color: var(--text-secondary);
    cursor: pointer;
    transition: background 0.15s, color 0.15s;
    flex-shrink: 0;
    padding: 0;
    overflow: visible;
    line-height: 0;
}

.ftb:hover {
    background: var(--surface-2);
    color: var(--ink);
}

.ftb:active {
    transform: scale(0.91);
}

.ftb:disabled {
    opacity: 0.35;
    cursor: not-allowed;
    pointer-events: none;
}

.ftb.active {
    background: var(--accent-soft);
    color: var(--accent-dark);
}

/* Horizontal separator between groups in vertical floating toolbar */
.ftb-sep-v {
    width: 70%;
    height: 1px;
    background: var(--border);
    margin: 0.15rem 0;
    flex-shrink: 0;
}

/* H1/H2/H3/¶ text buttons in floating toolbar */
.ftb-fmt {
    font-size: 0.625rem;
    font-weight: 700;
    letter-spacing: -0.03em;
    width: 26px;
    height: 26px;
}

/* Font size select in floating toolbar */
.ftb-fontsize {
    height: 26px;
    padding: 0 0.2rem;
    border: 1px solid var(--border-color);
    border-radius: 0.25rem;
    background: transparent;
    font-size: 0.6875rem;
    font-weight: 600;
    color: var(--text-secondary);
    cursor: pointer;
    outline: none;
    appearance: none;
    -webkit-appearance: none;
    text-align: center;
    width: 52px;
    min-width: 0;
    box-sizing: border-box;
    transition: border-color 0.2s, color 0.2s;
}

.ftb-fontsize:hover, .ftb-fontsize:focus {
    border-color: var(--primary-color);
    color: var(--primary-color);
}

/* Copy success flash */
.ftb-copied {
    color: var(--success-color) !important;
    background: rgba(16, 185, 129, 0.1) !important;
}

/* ── Floating toolbar color split-buttons ──────────────────────────── */
/* vtb colour buttons — single button, no split */
.ftb-color-main {
    flex-direction: column;
    gap: 2px;
    padding: 3px 4px 2px;
}
/* Colour swatch strip under the icon */
.ftb-color-swatch {
    display: block;
    width: 12px;
    height: 3.5px;
    border-radius: 2px;
    flex-shrink: 0;
}
.ftb-fgswatch { background: #e06666; }
.ftb-bgswatch { background: #ffe066; }

/* Lightbox */
.lightbox {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.9);
    display: none;
    align-items: center;
    justify-content: center;
    z-index: 9999;
}

.lightbox.show {
    display: flex;
}

.lightbox-content {
    position: relative;
    width: 90%;
    height: 90%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.lightbox-close {
    position: absolute;
    top: 1rem;
    right: 1rem;
    width: 40px;
    height: 40px;
    background: rgba(255, 255, 255, 0.1);
    border: 1px solid rgba(255, 255, 255, 0.2);
    border-radius: 0.5rem;
    color: white;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.2s;
    z-index: 10;
}

.lightbox-close:hover {
    background: rgba(255, 255, 255, 0.2);
}

.lightbox-image-container {
    width: 100%;
    height: calc(100% - 80px);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

.lightbox-image-container img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    transition: transform 0.2s;
}

.lightbox-controls {
    display: flex;
    gap: 0.5rem;
    margin-top: 1rem;
}

.btn-zoom {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 40px;
    height: 40px;
    padding: 0 0.75rem;
    background: rgba(255, 255, 255, 0.1);
    border: 1px solid rgba(255, 255, 255, 0.2);
    border-radius: 0.375rem;
    color: white;
    cursor: pointer;
    transition: all 0.2s;
    font-size: 1.125rem;
    font-weight: 600;
}

.btn-zoom:hover {
    background: rgba(255, 255, 255, 0.2);
}

/* Toast - Bottom Center */
/* ── Legacy toast (hidden, kept for backward compat) ───────────────────────── */
.toast { display: none !important; }

/* ── Toast styles live in shared-helpers.js (injected) — work on all pages ──── */

/* Modal */
.modal-content {
    background: var(--bg-primary);
    border-radius: 20px;
    width: 100%;
    max-width: 500px;
    max-height: 90vh;
    overflow: auto;
    box-shadow: 0 16px 48px rgba(26,25,23,0.10), 0 4px 12px rgba(26,25,23,0.05);
    transform: scale(0.9);
    transition: transform 0.3s;
    animation: modalIn 200ms cubic-bezier(0.4, 0, 0.2, 1);
}

@keyframes modalIn {
    from { opacity: 0; transform: translateY(12px) scale(0.98); }
    to   { opacity: 1; transform: none; }
}

.modal.show .modal-content {
    transform: scale(1);
}

.modal-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 22px 24px 18px;
    border-bottom: 1px solid var(--border-color);
}

.modal-header h3 {
    font-size: 17px;
    font-weight: 700;
    color: var(--text-primary);
    letter-spacing: -0.3px;
}

.modal-close {
    background: var(--bg-secondary);
    border: none;
    font-size: 1.125rem;
    color: var(--text-tertiary);
    cursor: pointer;
    line-height: 1;
    padding: 0;
    width: 30px;
    height: 30px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
    transition: all 150ms ease;
}

.modal-close:hover {
    background: var(--border-color);
    color: var(--text-primary);
}

.modal-body {
    padding: 20px 24px;
}

.modal-footer {
    display: flex;
    gap: 10px;
    justify-content: flex-end;
    padding: 16px 24px;
    border-top: 1px solid var(--border-color);
}
.btn-small {
    padding: 0.28rem 0.7rem;
    font-size: 0.78rem;
    border-radius: 0.375rem;
    cursor: pointer;
    transition: all 0.15s;
    border: 1px solid var(--border-color);
    background: transparent;
    color: var(--text-secondary);
}
.btn-small:hover {
    background: var(--bg-secondary);
    color: var(--text-primary);
}
/* .btn-danger.btn-small — removed; use .btn-danger.btn-danger--sm (common.css) */

/* Modal sizes */
.modal-large {
    max-width: 700px;
}

/* Upload Settings Modal */
.upload-preview-section {
    margin-bottom: 2rem;
}

.upload-preview-section h4 {
    font-size: 1rem;
    font-weight: 600;
    margin-bottom: 1rem;
    color: var(--text-primary);
}

.upload-preview-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
    gap: 0.75rem;
    max-height: 200px;
    overflow-y: auto;
    padding: 0.5rem;
    background: var(--bg-secondary);
    border-radius: 0.5rem;
}

.upload-preview-item {
    position: relative;
    aspect-ratio: 1;
    border-radius: 0.375rem;
    overflow: hidden;
    border: 2px solid var(--border-color);
}

.upload-preview-item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.upload-preview-filename {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    padding: 0.25rem 0.375rem;
    background: rgba(0, 0, 0, 0.7);
    color: white;
    font-size: 0.625rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.upload-settings-section {
    padding: 0.25rem 0;
}
.upload-settings-section h4 {
    font-size: 12px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.6px;
    color: var(--text-tertiary);
    margin-bottom: 10px;
}

/* Setting row: label on left, control on right */
.upload-setting-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.9rem 1.1rem;
    background: var(--bg-secondary);
    border-radius: 0.6rem;
    border: 1px solid var(--border-color);
}
.upload-setting-label {
    display: flex;
    align-items: flex-start;
    gap: 0.7rem;
    color: var(--text-secondary);
    flex: 1;
}
.upload-setting-label svg {
    flex-shrink: 0;
    margin-top: 1px;
}
.upload-setting-name {
    font-size: 0.9rem;
    font-weight: 600;
    color: var(--text-primary);
    line-height: 1.35;
}
.upload-setting-desc {
    font-size: 0.78rem;
    color: var(--text-secondary);
    margin-top: 0.15rem;
    line-height: 1.4;
}

/* ── Toggle switch ──────────────────────────────────────────────────────── */
.toggle-switch {
    position: relative;
    display: inline-flex;
    flex-shrink: 0;
    cursor: pointer;
}
.toggle-switch input[type="checkbox"] {
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}
.toggle-track {
    display: flex;
    align-items: center;
    width: 42px;
    height: 24px;
    background: var(--border-color, #d1d5db);
    border-radius: 12px;
    transition: background 0.2s;
    padding: 2px;
    box-sizing: border-box;
}
.toggle-thumb {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: white;
    box-shadow: 0 1px 4px rgba(0,0,0,0.2);
    transition: transform 0.2s;
    flex-shrink: 0;
}
.toggle-switch input:checked ~ .toggle-track {
    background: var(--primary-color, #E8703A);
}
.toggle-switch input:checked ~ .toggle-track .toggle-thumb {
    transform: translateX(18px);
}

/* Recognition mode option cards */
.recognition-mode-options {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
}
.mode-option {
    cursor: pointer;
}
.mode-option input {
    display: none;
}
.mode-option-content {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 14px;
    border: 1.5px solid var(--border-color);
    border-radius: 12px;
    background: var(--bg-primary);
    transition: all 150ms ease;
}
.mode-option input:checked + .mode-option-content {
    border-color: var(--primary-color);
    background: var(--primary-soft);
    box-shadow: 0 0 0 3px var(--primary-soft);
}
.mode-option-content:hover {
    border-color: #D6CEC4;
}
.mode-icon {
    font-size: 20px;
    flex-shrink: 0;
}
.mode-title {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
}
.mode-description {
    font-size: 11px;
    color: var(--text-secondary);
    margin-top: 2px;
    line-height: 1.4;
}

/* Form */
.form-group {
    margin-bottom: 1rem;
}

.form-group label:not(.feedback-type-option) {
    display: block;
    margin-bottom: 0.375rem;
    font-weight: 500;
    font-size: 0.875rem;
}

.form-group input {
    width: 100%;
    padding: 0.625rem 0.75rem;
    border: 1px solid var(--border-color);
    border-radius: 0.375rem;
    font-size: 0.875rem;
    font-family: inherit;
}

.form-group input:focus {
    outline: none;
    border-color: var(--primary-color);
    box-shadow: 0 0 0 3px rgba(232, 112, 58, 0.1);
}

.form-note {
    font-size: 0.8125rem;
    color: var(--text-secondary);
    margin-top: 0.75rem;
}

.form-note a {
    color: var(--primary-color);
    text-decoration: none;
}

.form-note a:hover {
    text-decoration: underline;
}

.password-input {
    position: relative;
    display: flex;
    align-items: center;
}

.password-input input {
    width: 100%;
    padding-right: 40px;
}

.password-toggle {
    position: absolute;
    right: 8px;
    background: transparent;
    border: none;
    cursor: pointer;
    padding: 4px;
    color: var(--text-secondary);
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 0.25rem;
    transition: all 0.2s;
}

.password-toggle:hover {
    background: var(--bg-secondary);
    color: var(--text-primary);
}

.password-match-hint {
    display: block;
    margin-top: 0.25rem;
    font-size: 0.75rem;
    min-height: 1rem;
}

.password-match-hint.success {
    color: var(--success-color);
}

.password-match-hint.error {
    color: var(--danger-color);
}

/* Buttons */
.btn-primary,
.btn-secondary {
    padding: 0.625rem 1.25rem;
    border: none;
    border-radius: 0.375rem;
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    transition: all 0.2s;
}

.btn-primary {
    background: var(--text-primary);
    color: white;
    box-shadow: var(--shadow-sm);
}

.btn-primary:hover {
    background: var(--purple-color);
    transform: translateY(-1px);
    box-shadow: var(--shadow-md);
}

.btn-primary:disabled {
    opacity: 0.5;
    cursor: not-allowed;
    transform: none;
    box-shadow: none;
}

.btn-secondary {
    background: transparent;
    color: var(--text-secondary);
    border: 1px solid var(--border-color);
}

.btn-secondary:hover {
    background: var(--bg-secondary);
}

/* Form label */
.form-label {
    display: block;
    font-size: 13px;
    font-weight: 500;
    color: var(--text-secondary);
    margin-bottom: 6px;
}

/* Form inputs */
.form-input {
    width: 100%;
    padding: 0.625rem 0.875rem;
    border: 1.5px solid var(--border-color);
    border-radius: 0.5rem;
    font-size: 14px;
    font-family: inherit;
    color: var(--text-primary);
    background: var(--bg-primary);
    transition: border-color 0.15s, box-shadow 0.15s;
    outline: none;
}

.form-input:focus {
    border-color: var(--primary-color);
    box-shadow: 0 0 0 3px rgba(232, 112, 58, 0.12);
}

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

/* Profile Page */
.btn-back-profile {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.5rem 1rem;
    background: transparent;
    border: 1px solid var(--border-color);
    border-radius: 0.5rem;
    color: var(--text-secondary);
    text-decoration: none;
    font-size: 0.875rem;
    transition: all 0.2s;
}

.btn-back-profile:hover {
    background: var(--bg-secondary);
    color: var(--text-primary);
}

/* ── Profile layout: sidebar + main ─────────────────────────────────────────── */
.profile-layout {
    flex: 1;
    display: flex;
    overflow: hidden;
}

/* ── Sidebar ───────────────────────────────────────────────────────────────── */
.profile-sidebar {
    width: 240px;
    flex-shrink: 0;
    background: var(--bg-primary);
    border-right: 1px solid var(--border-color);
    display: flex;
    flex-direction: column;
    overflow-y: auto;
}

/* Identity block in sidebar */
.profile-identity {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 1.25rem 1.25rem 1rem;
    flex-wrap: wrap;
}

.profile-identity-avatar {
    width: 38px;
    height: 38px;
    border-radius: 50%;
    background: linear-gradient(135deg, #1A2540, #1A2540);
    color: white;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 1rem;
    font-weight: 700;
    line-height: 1;
}

.profile-identity-info {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.1rem;
}

.profile-identity-name {
    font-size: 0.875rem;
    font-weight: 700;
    color: var(--text-primary);
    line-height: 1.3;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.profile-identity-email {
    font-size: 0.75rem;
    color: var(--text-tertiary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.profile-identity-badge {
    display: inline-flex;
    align-items: center;
    padding: 0.15rem 0.55rem;
    border-radius: 1rem;
    font-size: 0.625rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    background: rgba(232, 112, 58, 0.1);
    color: #2563eb;
    margin-left: auto;
}

/* Sidebar nav items */
.profile-nav {
    display: flex;
    flex-direction: column;
    padding: 0.5rem 0.75rem;
    gap: 2px;
    flex: 1;
}

.profile-nav-item {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    padding: 0.5rem 0.75rem;
    font-size: 0.8125rem;
    font-weight: 500;
    color: var(--text-secondary);
    background: transparent;
    border: none;
    border-radius: 0.5rem;
    cursor: pointer;
    transition: color 0.15s, background 0.15s;
    text-align: left;
    width: 100%;
    white-space: nowrap;
    font-family: inherit;
}

.profile-nav-item svg {
    flex-shrink: 0;
    opacity: 0.55;
    transition: opacity 0.15s;
}

.profile-nav-item:hover {
    color: var(--text-primary);
    background: var(--bg-tertiary);
}
.profile-nav-item:hover svg { opacity: 0.85; }

.profile-nav-item--active {
    color: #E8703A;
    background: rgba(232, 112, 58, 0.08);
    font-weight: 600;
}
.profile-nav-item--active svg { opacity: 1; color: #E8703A; }

.profile-nav-item--admin { color: #dc2626; }
.profile-nav-item--admin svg { color: #dc2626; }
.profile-nav-item--admin:hover { background: rgba(220, 38, 38, 0.06); }
.profile-nav-item--admin.profile-nav-item--active {
    color: #dc2626;
    background: rgba(220, 38, 38, 0.08);
}

/* ── Main content area ─────────────────────────────────────────────────────── */
.profile-main {
    flex: 1;
    overflow-y: auto;
    background: #f7f7f8;
    padding: 0;
}

.profile-content {
    max-width: 780px;
    padding: 2.5rem 3rem 4rem;
}

.profile-page-title {
    font-size: 1.375rem;
    font-weight: 700;
    color: var(--text-primary);
    margin-bottom: 2rem;
}

.public-id-row {
    display: flex;
    align-items: center;
    gap: 0.6rem;
}
.public-id-badge {
    font-family: 'Courier New', monospace;
    font-size: 0.82rem;
    letter-spacing: 0.04em;
    background: linear-gradient(135deg, rgba(232,112,58,0.08) 0%, rgba(26,37,64,0.1) 100%);
    border: 1px solid rgba(232,112,58,0.2);
    color: var(--text-primary);
    padding: 0.35rem 0.75rem;
    border-radius: 0.4rem;
    user-select: all;
}
.btn-copy-id {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    background: var(--bg-secondary);
    border: 1px solid var(--border-color);
    color: var(--text-secondary);
    cursor: pointer;
    padding: 0.35rem 0.7rem;
    border-radius: 0.4rem;
    font-size: 0.8rem;
    font-family: inherit;
    transition: all 0.15s;
}
.btn-copy-id:hover {
    background: var(--bg-tertiary, #e5e7eb);
    color: var(--text-primary);
}
.btn-copy-id.copied {
    background: var(--success-color);
    border-color: var(--success-color);
    color: white;
}

/* ── Tab panels ──────────────────────────────────────────────────────────────── */
.profile-tab-panel { display: none; }
.profile-tab-panel--active { display: block; }

.profile-section {
    padding: 0;
    margin-bottom: 2.25rem;
}

.profile-section:last-child {
    margin-bottom: 0;
}

.profile-section h3 {
    font-size: 1.05rem;
    font-weight: 700;
    margin-bottom: 1rem;
    color: var(--text-primary);
}

.overview-stats-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 0.75rem;
}

.profile-stats {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.stat-item {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 1.25rem 1.5rem;
    background: var(--bg-secondary);
    border-radius: 0.75rem;
    border: 1px solid var(--border-color);
    transition: box-shadow 0.15s;
}

.stat-item:hover {
    box-shadow: var(--shadow-sm);
}

.stat-icon {
    width: 48px;
    height: 48px;
    border-radius: 0.625rem;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.stat-icon--tokens {
    background: rgba(16, 185, 129, 0.12);
    color: var(--success-color);
}

.stat-icon--docs {
    background: rgba(232, 112, 58, 0.12);
    color: var(--primary-color);
}

.stat-info {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
}

.stat-label {
    font-size: 0.7rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--text-secondary);
}

.stat-value {
    font-size: 2rem;
    font-weight: 700;
    color: var(--text-primary);
    line-height: 1.1;
}

.profile-info-grid {
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

.info-row {
    display: flex;
    justify-content: space-between;
    padding: 0.75rem 0;
    border-bottom: 1px solid var(--bg-secondary);
}

.info-row:last-child {
    border-bottom: none;
}

.info-label {
    font-size: 0.875rem;
    color: var(--text-secondary);
}

.info-value {
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--text-primary);
}

/* Transactions */
.transactions-container {
    min-height: 200px;
}

.transactions-loading {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.75rem;
    padding: 3rem 1rem;
    color: var(--text-secondary);
    font-size: 0.875rem;
}

.spinner-small {
    width: 20px;
    height: 20px;
    border: 2px solid var(--border-color);
    border-top-color: var(--primary-color);
    border-radius: 50%;
    animation: spin 0.8s linear infinite;
}

.transactions-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 1rem;
    padding: 3rem 1rem;
    color: var(--text-secondary);
}

.transactions-empty svg {
    opacity: 0.5;
}

.transactions-empty p {
    font-size: 0.875rem;
    margin: 0;
}

.transactions-list {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

/* Transaction row */
.tx-row {
    display: flex;
    align-items: center;
    gap: 0.875rem;
    padding: 0.625rem 0.875rem;
    border-radius: 0.75rem;
    transition: background 0.15s;
}

.tx-row:hover {
    background: var(--bg-secondary);
}

/* Amount pill */
.tx-badge {
    font-size: 0.875rem;
    font-weight: 700;
    min-width: 58px;
    text-align: center;
    padding: 0.3rem 0.6rem;
    border-radius: 0.375rem;
    white-space: nowrap;
}

.tx-debit .tx-badge {
    color: var(--danger-color);
    background: rgba(239, 68, 68, 0.12);
}

.tx-credit .tx-badge {
    color: var(--success-color);
    background: rgba(16, 185, 129, 0.12);
}

/* Text side */
.tx-body {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    min-width: 0;
}

.tx-desc {
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--text-primary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.tx-info {
    display: flex;
    align-items: center;
    gap: 0.375rem;
    flex-wrap: wrap;
}

/* Hash badge — main identifier accent */
.tx-hash {
    font-family: 'Courier New', monospace;
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    padding: 0.1rem 0.4rem;
    border-radius: 0.25rem;
}

.tx-debit .tx-hash {
    color: var(--danger-color);
    background: rgba(239, 68, 68, 0.1);
}

.tx-credit .tx-hash {
    color: var(--success-color);
    background: rgba(16, 185, 129, 0.1);
}

.tx-meta-item {
    font-size: 0.725rem;
    color: var(--text-secondary);
}

/* ===== Transaction table redesign ===== */

/* Wider section — remove inner padding that was cramping the table */
/* ── Admin Panel ────────────────────────────────────────────────────── */
.profile-section--admin {
    padding-top: 1.5rem;
    border-top: 1px solid rgba(220,38,38,0.15);
}

.profile-section--admin h3 {
    color: #dc2626;
}

.admin-search-row {
    display: flex;
    gap: 0.5rem;
    align-items: center;
    margin-top: 0.5rem;
}

.admin-email-input {
    flex: 1;
    padding: 0.55rem 0.85rem;
    border: 1.5px solid var(--border-color, #e5e7eb);
    border-radius: 0.5rem;
    font-size: 0.875rem;
    background: var(--bg-primary, #fff);
    color: var(--text-primary, #111827);
    transition: border-color 0.15s;
    outline: none;
}

.admin-email-input:focus {
    border-color: #dc2626;
}

.btn-admin-find {
    padding: 0.55rem 1.1rem;
    border-radius: 0.5rem;
    border: none;
    background: #dc2626;
    color: #fff;
    font-size: 0.875rem;
    font-weight: 600;
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s;
}

.btn-admin-find:hover {
    background: #b91c1c;
}

.admin-user-card {
    margin-top: 1rem;
    padding: 1rem 1.25rem;
    border: 1.5px solid rgba(220,38,38,0.2);
    border-radius: 0.75rem;
    background: rgba(220,38,38,0.04);
}

.admin-user-info {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4rem 1rem;
    margin-bottom: 0.9rem;
}

.admin-user-name {
    font-weight: 700;
    font-size: 0.95rem;
    color: var(--text-primary, #111827);
}

.admin-user-email {
    font-size: 0.82rem;
    color: var(--text-secondary, #6b7280);
}

.admin-user-balance {
    font-size: 0.85rem;
    color: var(--text-secondary, #6b7280);
}

.admin-user-balance strong {
    color: var(--text-primary, #111827);
}

.admin-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.6rem;
}

.admin-preset-btns {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
}

.btn-admin-add {
    padding: 0.45rem 0.9rem;
    border-radius: 0.45rem;
    border: 1.5px solid #10b981;
    background: rgba(16,185,129,0.08);
    color: #059669;
    font-size: 0.875rem;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.15s, border-color 0.15s;
}

.btn-admin-add:hover {
    background: rgba(16,185,129,0.18);
    border-color: #059669;
}

.admin-custom-wrap {
    display: flex;
    align-items: center;
    gap: 0.35rem;
}

.admin-custom-amount {
    width: 72px;
    padding: 0.42rem 0.6rem;
    border: 1.5px solid var(--border-color, #e5e7eb);
    border-radius: 0.45rem;
    font-size: 0.875rem;
    text-align: center;
    outline: none;
    background: var(--bg-primary, #fff);
    color: var(--text-primary, #111827);
}

.admin-custom-amount:focus {
    border-color: #10b981;
}

.btn-admin-clear {
    padding: 0.45rem 0.9rem;
    border-radius: 0.45rem;
    border: 1.5px solid rgba(220,38,38,0.4);
    background: rgba(220,38,38,0.06);
    color: #dc2626;
    font-size: 0.875rem;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.15s, border-color 0.15s;
    margin-left: auto;
}

.btn-admin-clear:hover {
    background: rgba(220,38,38,0.14);
    border-color: #dc2626;
}

.admin-section-title {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    font-size: 0.78rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--text-secondary);
    margin: 0.75rem 0 0.5rem;
}

.admin-user-sub {
    font-size: 0.8rem;
    color: var(--text-secondary);
}

.admin-sub-controls {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
}

.admin-sub-select {
    height: 34px;
    padding: 0 0.6rem;
    border: 1.5px solid var(--border-color);
    border-radius: 0.45rem;
    font-size: 0.8125rem;
    background: var(--bg-primary);
    color: var(--text-primary);
    cursor: pointer;
    outline: none;
    transition: border-color 0.15s;
}

.admin-sub-select:focus { border-color: #1A2540; }

.admin-sub-months { width: 110px; }

.btn-admin-sub-set {
    padding: 0.45rem 0.9rem;
    border-radius: 0.45rem;
    border: 1.5px solid #1A2540;
    background: rgba(26,37,64,0.08);
    color: #2B3A5C;
    font-size: 0.875rem;
    font-weight: 600;
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s, border-color 0.15s;
}

.btn-admin-sub-set:hover {
    background: rgba(26,37,64,0.18);
    border-color: #2B3A5C;
}

.btn-admin-sub-revoke {
    padding: 0.45rem 0.9rem;
    border-radius: 0.45rem;
    border: 1.5px solid rgba(107,114,128,0.4);
    background: rgba(107,114,128,0.06);
    color: var(--text-secondary);
    font-size: 0.875rem;
    font-weight: 600;
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s, border-color 0.15s;
}

.btn-admin-sub-revoke:hover {
    background: rgba(107,114,128,0.14);
    border-color: #6b7280;
}

/* ─────────────────────────────────────────────────────────────────── */

.profile-section--tx {
    padding: 0;
}

/* ── Subscription section ──────────────────────────────────────────────────── */
.profile-section--subscription {
    padding: 0;
}
/* ── Subscription row ──────────────────────────────────────────────────────── */
.sub-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.875rem 1.25rem;
    background: var(--bg-secondary);
    border: 1px solid var(--border-color);
    border-radius: 0.75rem;
    margin-bottom: 0.75rem;
}
.sub-row-left {
    min-width: 0;
}
.sub-row-info {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    min-width: 0;
}
.sub-row-name-line {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}
.sub-row-plan {
    font-size: 0.9375rem;
    font-weight: 600;
    color: var(--text-primary);
    white-space: nowrap;
}
.sub-row-expiry {
    font-size: 0.75rem;
    color: var(--text-secondary);
}
.sub-plan-badge {
    display: inline-flex;
    align-items: center;
    font-size: 0.6rem;
    font-weight: 700;
    padding: 0.15rem 0.45rem;
    border-radius: 0.3rem;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    flex-shrink: 0;
    vertical-align: middle;
}
.sub-plan-badge--active  { background: #d1fae5; color: #065f46; }
.sub-plan-badge--free    { background: #e0e7ff; color: #3730a3; }
.sub-plan-badge--expired { background: #fee2e2; color: #991b1b; }
.sub-action-btn {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    font-size: 0.8rem;
    font-weight: 500;
    color: var(--text-primary);
    text-decoration: none;
    padding: 0.45rem 1rem;
    border-radius: 0.5rem;
    background: var(--bg-primary, #fff);
    border: 1px solid var(--border-color);
    box-shadow: 0 1px 2px rgba(0,0,0,0.06);
    transition: background 0.15s, border-color 0.15s, box-shadow 0.15s;
}
.sub-action-btn:hover {
    background: var(--bg-secondary);
    border-color: var(--text-secondary);
    text-decoration: none;
}
/* ── Usage bar ─────────────────────────────────────────────────────────────── */
.sub-usage-bar {
    margin-top: 0.25rem;
}
.sub-usage-label {
    display: flex;
    justify-content: space-between;
    font-size: 0.75rem;
    color: var(--text-secondary);
    margin-bottom: 0.4rem;
}
.sub-progress-track {
    height: 10px;
    background: var(--border-color);
    border-radius: 999px;
    overflow: hidden;
}
.sub-progress-fill {
    height: 100%;
    background: linear-gradient(90deg, #E8703A, #1A2540);
    border-radius: 999px;
    transition: width 0.4s ease;
}

/* ── Referral section ──────────────────────────────────────────────────────── */
.profile-section--referral {
    padding: 0;
}

.referral-desc {
    color: var(--text-secondary);
    font-size: 0.875rem;
    margin: -0.25rem 0 1.5rem;
    line-height: 1.6;
}

/* Hero code display card */
.referral-code-hero {
    background: linear-gradient(135deg, rgba(232,112,58,0.05) 0%, rgba(26,37,64,0.06) 100%);
    border: 1.5px solid rgba(232,112,58,0.18);
    border-radius: 1rem;
    padding: 1.75rem 1.5rem;
    text-align: center;
    margin-bottom: 0.875rem;
}

.referral-code-hero-label {
    font-size: 0.68rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text-secondary);
    margin-bottom: 0.75rem;
}

.referral-code-hero-value {
    font-family: 'Courier New', monospace;
    font-size: 2.25rem;
    font-weight: 700;
    letter-spacing: 0.22em;
    color: var(--text-primary);
    margin-bottom: 1.25rem;
    line-height: 1;
}

.btn-copy-code {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.5rem 1.25rem;
    border: 1.5px solid var(--border-color);
    border-radius: 0.5rem;
    background: var(--bg-primary);
    color: var(--text-secondary);
    font-size: 0.8125rem;
    font-weight: 500;
    cursor: pointer;
    transition: all 0.15s;
    font-family: inherit;
}

.btn-copy-code:hover, .btn-copy-code.copied {
    background: var(--success-color);
    border-color: var(--success-color);
    color: white;
}

.referral-hero-actions {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
}

.btn-share-code {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.5rem 1.25rem;
    border: 1.5px solid var(--border-color);
    border-radius: 0.5rem;
    background: var(--bg-primary);
    color: var(--text-secondary);
    font-size: 0.8125rem;
    font-weight: 500;
    cursor: pointer;
    transition: all 0.15s;
    font-family: inherit;
}
.btn-share-code:hover {
    border-color: var(--primary);
    color: var(--primary);
}
.btn-share-code.copied {
    background: var(--success-color);
    border-color: var(--success-color);
    color: white;
}

/* Invited count badge */
.referral-stats {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.875rem;
    color: var(--text-secondary);
    margin-bottom: 1.5rem;
    padding: 0.75rem 1rem;
    background: var(--bg-secondary);
    border-radius: 0.5rem;
    border: 1px solid var(--border-color);
}

.referral-stats strong {
    color: var(--text-primary);
    font-weight: 700;
}

/* Apply code card */
.referral-apply-card {
    background: var(--bg-secondary);
    border: 1px solid var(--border-color);
    border-radius: 0.875rem;
    padding: 1.25rem 1.5rem;
}

.referral-apply-card-title {
    font-size: 0.9375rem;
    font-weight: 600;
    color: var(--text-primary);
    margin-bottom: 0.25rem;
}

.referral-apply-hint {
    font-size: 0.8125rem;
    color: var(--text-secondary);
    margin: 0 0 0.875rem;
    line-height: 1.5;
}

.referral-apply-row {
    display: flex;
    gap: 0.625rem;
    align-items: center;
    max-width: 420px;
}

.referral-apply-row .form-input {
    flex: 1;
    font-family: 'Courier New', monospace;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    font-size: 0.9375rem;
    font-weight: 600;
}

.referral-apply-result {
    margin-top: 0.75rem;
    font-size: 0.8125rem;
    padding: 0.5rem 0.875rem;
    border-radius: 0.5rem;
}

.referral-apply-result--ok  { background: rgba(16,185,129,0.1); color: #059669; }
.referral-apply-result--err { background: rgba(239,68,68,0.08); color: #dc2626; }

/* ── Account Danger Zone ───────────────────────────────────────────────────── */
.profile-section--danger {
    padding-top: 1.5rem;
    border-top: 1px solid rgba(239, 68, 68, 0.15);
}
.profile-section--danger h3 { color: #ef4444; }
.danger-desc {
    color: var(--text-secondary);
    font-size: 0.9rem;
    margin: 0 0 1rem;
    max-width: 480px;
    line-height: 1.55;
}
.danger-desc--note {
    color: var(--text-muted);
    font-size: 0.82rem;
}
.delete-countdown-box {
    display: flex;
    align-items: flex-start;
    gap: 0.75rem;
    background: rgba(245,158,11,0.1);
    border: 1px solid rgba(245,158,11,0.3);
    border-radius: 8px;
    padding: 0.9rem 1rem;
    margin-bottom: 0.75rem;
    font-size: 0.9rem;
}
.delete-countdown-text {
    color: var(--text-secondary);
    font-size: 0.85rem;
    margin-top: 0.2rem;
}

/* ── Feedback modal styles ─────────────────────────────────────────────────── */
.feedback-subtitle {
    color: var(--text-secondary);
    font-size: 0.9rem;
    margin: 0 0 1rem;
    line-height: 1.5;
}
.feedback-subtitle:empty {
    display: none;
}
#feedbackModal .modal-body {
    padding: 1.25rem 1.5rem;
    display: flex;
    flex-direction: column;
    justify-content: center;
}
#feedbackModal .form-group label {
    display: flex;
    align-items: center;
    min-height: 1.5em;
}
.feedback-type-row {
    display: flex;
    gap: 0;
    flex-wrap: nowrap;
    align-items: stretch;
    background: var(--bg-secondary);
    border: 1px solid var(--border-color);
    border-radius: 0.5rem;
    padding: 3px;
    height: 2.5rem;
    box-sizing: border-box;
}
.feedback-type-option {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 1;
    padding: 0 0.75rem;
    border-radius: 0.35rem;
    cursor: pointer;
    font-size: 0.8rem;
    font-weight: 500;
    transition: background 0.15s, color 0.15s, box-shadow 0.15s;
    user-select: none;
    color: var(--text-secondary);
    white-space: nowrap;
    line-height: normal;
}
.feedback-type-option input { display: none; }
.feedback-type-option:has(input:checked) {
    background: var(--bg-primary, #fff);
    color: var(--text-primary);
    box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.feedback-textarea {
    width: 100%;
    resize: vertical;
    min-height: 110px;
    font-family: inherit;
}
.feedback-footer-row {
    margin-top: 0.75rem;
    margin-bottom: 0.25rem;
}
.feedback-no-show {
    display: flex;
    align-items: center;
    gap: 0.45rem;
    font-size: 0.82rem;
    color: var(--text-secondary);
    cursor: pointer;
    user-select: none;
}
.btn-feedback-trigger {
    background: var(--bg-secondary) !important;
    color: var(--text-secondary) !important;
    border: 1px solid var(--border-color) !important;
}
.btn-feedback-trigger:hover {
    background: var(--bg-tertiary, #2d2d3a) !important;
    color: var(--text-primary) !important;
}

/* 4-column stat cards */
.tx-stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 1rem;
    margin-bottom: 1.5rem;
}

.tx-stat-card {
    display: flex;
    align-items: center;
    gap: 0.875rem;
    padding: 1.125rem 1.25rem;
    background: var(--bg-secondary);
    border: 1px solid var(--border-color);
    border-radius: 0.75rem;
    transition: box-shadow 0.15s;
}

.tx-stat-card:hover {
    box-shadow: 0 2px 10px rgba(232, 112, 58, 0.08);
}

.tx-stat-icon {
    width: 44px;
    height: 44px;
    flex-shrink: 0;
    border-radius: 0.625rem;
    display: flex;
    align-items: center;
    justify-content: center;
}

.tx-stat-icon--total   { background: rgba(232, 112, 58, 0.1);  color: var(--primary-color); }
.tx-stat-icon--credit  { background: rgba(16, 185, 129, 0.1);  color: var(--success-color); }
.tx-stat-icon--debit   { background: rgba(245, 158, 11, 0.1);  color: var(--orange-color);  }
.tx-stat-icon--balance { background: rgba(139, 92, 246, 0.1);  color: var(--purple-color);  }

.tx-stat-info {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    min-width: 0;
}

.tx-stat-label {
    font-size: 0.75rem;
    color: var(--text-secondary);
    white-space: nowrap;
}

.tx-stat-value {
    font-size: 1.375rem;
    font-weight: 700;
    color: var(--text-primary);
    line-height: 1.2;
    font-variant-numeric: tabular-nums;
}

.tx-stat-value--credit  { color: var(--success-color); }
.tx-stat-value--debit   { color: var(--danger-color);  }
.tx-stat-value--balance { color: var(--primary-color); }

/* Search toolbar */
.tx-toolbar {
    display: flex;
    justify-content: flex-end;
    margin-bottom: 0.875rem;
}

.tx-search-wrap {
    position: relative;
    display: flex;
    align-items: center;
}

.tx-search-icon {
    position: absolute;
    left: 0.625rem;
    color: var(--text-tertiary);
    pointer-events: none;
}

.tx-search {
    padding: 0.5rem 0.75rem 0.5rem 2.1rem;
    border: 1px solid var(--border-color);
    border-radius: 0.5rem;
    font-size: 0.8125rem;
    font-family: inherit;
    width: 280px;
    background: var(--bg-primary);
    color: var(--text-primary);
    transition: border-color 0.15s, box-shadow 0.15s;
}

.tx-search:focus {
    outline: none;
    border-color: var(--primary-color);
    box-shadow: 0 0 0 3px rgba(232, 112, 58, 0.08);
}

/* Table wrapper — horizontal scroll on small screens */
.tx-table-wrap {
    overflow-x: auto;
    border: 1px solid var(--border-color);
    border-radius: 0.75rem;
}

/* Table */
.tx-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.875rem;
}

.tx-table thead tr {
    background: var(--bg-secondary);
}

.tx-table th {
    padding: 0.75rem 1rem;
    text-align: left;
    font-size: 0.7rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--text-secondary);
    white-space: nowrap;
    border-bottom: 1px solid var(--border-color);
}

.tx-th-right { text-align: right; }

.tx-table td {
    padding: 0.8125rem 1rem;
    border-bottom: 1px solid var(--border-color);
    vertical-align: middle;
}

.tx-table tbody tr:last-child td {
    border-bottom: none;
}

.tx-table tbody tr:hover td {
    background: rgba(232, 112, 58, 0.025);
}

/* Cell types */
.tx-td-id {
    font-family: 'Courier New', monospace;
    font-size: 0.8rem;
    font-weight: 700;
    color: var(--text-secondary);
    white-space: nowrap;
    vertical-align: middle;
}
.tx-id-inner {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
}

.tx-td-date {
    font-size: 0.8125rem;
    color: var(--text-secondary);
    white-space: nowrap;
}

.tx-td-action {
    white-space: nowrap;
}

.tx-td-details {
    color: var(--text-secondary);
    font-size: 0.8125rem;
    max-width: 240px;
}

.tx-file-ref {
    display: inline-flex;
    align-items: center;
    gap: 0.2em;
    font-size: 0.75rem;
    color: var(--primary-color);
    opacity: 0.8;
    cursor: pointer;
    border-bottom: 1px dashed rgba(232, 112, 58, 0.35);
    transition: opacity 0.15s;
}
.tx-file-ref:hover {
    opacity: 1;
}

.tx-td-amount {
    text-align: right;
    font-weight: 700;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

.tx-td-amount--credit { color: var(--success-color); }
.tx-td-amount--debit  { color: var(--danger-color);  }

.tx-td-balance {
    text-align: right;
    font-weight: 600;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
    color: var(--text-primary);
}

/* Pagination */
.tx-pagination {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 1rem 0 0;
    margin-top: 0.25rem;
}

.tx-per-page {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.8125rem;
    color: var(--text-secondary);
}

.tx-per-page select {
    padding: 0.25rem 0.5rem;
    border: 1px solid var(--border-color);
    border-radius: 0.375rem;
    font-size: 0.8125rem;
    font-family: inherit;
    background: var(--bg-primary);
    cursor: pointer;
}

.tx-pages {
    display: flex;
    align-items: center;
    gap: 0.25rem;
}

.tx-page-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 32px;
    height: 32px;
    padding: 0 0.375rem;
    border: 1px solid var(--border-color);
    border-radius: 0.375rem;
    background: transparent;
    font-size: 0.8125rem;
    font-family: inherit;
    color: var(--text-secondary);
    cursor: pointer;
    transition: all 0.15s;
}

.tx-page-btn:hover:not(:disabled) {
    background: var(--bg-secondary);
    border-color: var(--primary-color);
    color: var(--primary-color);
}

.tx-page-btn--active {
    background: var(--primary-color);
    border-color: var(--primary-color);
    color: white;
    font-weight: 600;
    cursor: default;
}

.tx-page-btn:disabled {
    opacity: 0.3;
    cursor: not-allowed;
}

.tx-page-ellipsis {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 32px;
    height: 32px;
    font-size: 0.8125rem;
    color: var(--text-tertiary);
}

/* Sortable column headers */
.tx-th-sortable {
    cursor: pointer;
    user-select: none;
    white-space: nowrap;
}
.tx-th-sortable:hover {
    background: rgba(232, 112, 58, 0.06);
}
.tx-th-sort-active {
    color: var(--primary-color);
}
.tx-sort-icon {
    display: inline-block;
    width: 1em;
    margin-left: 0.15em;
    opacity: 0.7;
    font-style: normal;
}

/* Row visual differentiation: zebra */
.tx-table tbody tr:nth-child(even) {
    background: rgba(232, 112, 58, 0.025);
}
.tx-table tbody tr:hover {
    background: rgba(232, 112, 58, 0.06) !important;
}

/* Type badge pills */
.tx-type-badge {
    display: inline-block;
    padding: 0.15em 0.55em;
    border-radius: 1rem;
    font-size: 0.75rem;
    font-weight: 600;
    white-space: nowrap;
}
.tx-type-badge--usage        { background: rgba(232,112,58,0.12); color: #2563eb; }
.tx-type-badge--purchase     { background: rgba(16,185,129,0.12); color: #059669; }
.tx-type-badge--bonus        { background: rgba(26,37,64,0.12); color: #2B3A5C; }
.tx-type-badge--refund       { background: rgba(245,158,11,0.12); color: #d97706; }
.tx-type-badge--admin        { background: rgba(107,114,128,0.12); color: #4b5563; }
.tx-type-badge--reg          { background: rgba(16,185,129,0.12); color: #059669; }
.tx-type-badge--other        { background: rgba(107,114,128,0.10); color: #6b7280; }

/* Copy button in ID column */
.tx-hash-label {
    flex-shrink: 0;
}
.tx-copy-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.2rem;
    border: none;
    background: transparent;
    color: var(--text-tertiary);
    cursor: pointer;
    border-radius: 0.25rem;
    opacity: 0;
    transition: opacity 0.15s, color 0.15s, background 0.15s;
    flex-shrink: 0;
}
tr:hover .tx-copy-btn {
    opacity: 1;
}
.tx-copy-btn:hover {
    color: var(--primary-color);
    background: rgba(232, 112, 58, 0.1);
}
.tx-copy-btn--copied {
    color: var(--success-color) !important;
    opacity: 1 !important;
}

/* Image preview popup */
.tx-img-popup {
    position: fixed;
    z-index: 9999;
    background: var(--bg-primary);
    border: 1px solid var(--border-color);
    border-radius: 0.75rem;
    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.14), 0 2px 8px rgba(0, 0, 0, 0.08);
    padding: 0.5rem;
    min-width: 160px;
    max-width: 300px;
    pointer-events: none;
    opacity: 0;
    transform: translateY(4px) scale(0.97);
    transition: opacity 0.16s ease, transform 0.16s ease;
    backdrop-filter: blur(8px);
}
.tx-img-popup--visible {
    opacity: 1;
    transform: translateY(0) scale(1);
    pointer-events: auto;
}
.tx-img-popup-img-wrap {
    width: 100%;
    border-radius: 0.5rem;
    overflow: hidden;
    background: var(--bg-secondary);
    line-height: 0;
}
.tx-img-popup-img {
    width: 100%;
    height: auto;
    max-height: 160px;
    object-fit: contain;
    display: block;
}
.tx-img-popup-na {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.4rem;
    padding: 1rem 0.5rem;
    color: var(--text-tertiary);
    font-size: 0.75rem;
    text-align: center;
}
.tx-img-popup-na svg {
    opacity: 0.45;
}
.tx-img-popup-snippet {
    position: relative;
    margin-top: 0.5rem;
    padding: 0.375rem 0.5rem;
    background: var(--bg-secondary);
    border-radius: 0.375rem;
    font-size: 0.7rem;
    line-height: 1.55;
    color: var(--text-primary);
    font-style: italic;
    opacity: 0.85;
    word-break: break-word;
    max-height: 4.75em; /* ~3 lines */
    overflow: hidden;
}
.tx-img-popup-snippet::after {
    content: '';
    position: absolute;
    left: 0; right: 0; bottom: 0;
    height: 1.6em;
    background: linear-gradient(to bottom, transparent, var(--bg-secondary));
    border-radius: 0 0 0.375rem 0.375rem;
    pointer-events: none;
}

.tx-img-popup-name {
    margin-top: 0.375rem;
    font-size: 0.7rem;
    color: var(--text-tertiary);
    text-align: center;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 100%;
    padding: 0 0.25rem;
}

/* ===== End transaction table ===== */

/* ===== Documents canvas ===== */

/* .doc-back-btn — defined in common.css */
.doc-title-wrap {
    display: flex;
    align-items: center;
    gap: 0.35rem;
    min-width: 0;
}
.doc-title-sep {
    color: var(--text-tertiary);
    font-size: 1rem;
    flex-shrink: 0;
}
.doc-title-text {
    font-size: 1.125rem;
    font-weight: 600;
    color: var(--text-primary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 400px;
}
.doc-title-input {
    font-size: 1.125rem;
    font-weight: 600;
    color: var(--text-primary);
    border: 1px solid var(--primary-color);
    border-radius: 0.375rem;
    padding: 0.1rem 0.4rem;
    background: var(--bg-primary);
    outline: none;
    max-width: 400px;
    font-family: inherit;
}
.doc-title-edit-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    border: none;
    background: transparent;
    color: var(--text-tertiary);
    cursor: pointer;
    border-radius: 0.25rem;
    padding: 0;
    transition: color 0.15s, background 0.15s;
    flex-shrink: 0;
}
.doc-title-edit-btn:hover {
    color: var(--primary-color);
    background: rgba(232, 112, 58, 0.1);
}

/* Documents canvas page layout */
.docs-page {
    overflow: auto;
    height: auto;
}
.app-wrapper {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

/* Canvas main layout */
.docs-main {
    flex: 1;
    padding: 44px 56px;
    max-width: 1280px;
    margin: 0 auto;
    width: 100%;
}

/* Loading spinner */
.docs-loading {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 60vh;
}
.docs-loading-spinner {
    width: 40px;
    height: 40px;
    border: 3px solid var(--border-color);
    border-top-color: var(--primary-color);
    border-radius: 50%;
    animation: spin 0.8s linear infinite;
}

/* Empty state */
.docs-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 65vh;
    text-align: center;
    gap: 1rem;
}
.docs-empty-icon {
    width: 72px;
    height: 72px;
    background: var(--bg-secondary);
    border-radius: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 8px;
    color: var(--text-tertiary);
    border: 1.5px solid var(--border-color);
}
.docs-empty-title {
    font-size: 20px;
    font-weight: 700;
    color: var(--text-primary);
    letter-spacing: -0.3px;
    margin: 0;
}
.docs-empty-sub {
    font-size: 14px;
    color: var(--text-secondary);
    max-width: 320px;
    line-height: 1.6;
    margin: 0;
}

/* Grid header */
.docs-grid-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 28px;
}
.docs-grid-title {
    font-size: 30px;
    font-weight: 700;
    color: var(--text-primary);
    letter-spacing: -0.8px;
    margin: 0;
}
.docs-count {
    font-size: 13px;
    color: var(--text-tertiary);
    font-weight: 500;
    margin-top: 2px;
}
.docs-create-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
}

/* Inline token alert — shown in header row instead of create button */
.docs-token-alert {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 14px;
    background: rgba(217,79,79,.07);
    border: 1px solid rgba(217,79,79,.2);
    border-radius: var(--r-md);
    font-size: 13px;
}
.dta-dot {
    width: 7px; height: 7px;
    border-radius: 50%;
    background: var(--red);
    flex-shrink: 0;
}
.dta-text { color: var(--text-secondary); white-space: nowrap; }
.dta-text strong { color: var(--text-primary); font-weight: 600; }
.dta-text span { color: var(--text-tertiary); }
.dta-btn {
    flex-shrink: 0;
    padding: 5px 13px;
    border-radius: var(--r-md);
    background: transparent;
    color: var(--red);
    border: 1px solid rgba(217,79,79,.3);
    font-family: var(--font-sans, inherit);
    font-size: 12px;
    font-weight: 600;
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s, color 0.15s, border-color 0.15s;
}
.dta-btn:hover { background: var(--red); color: #fff; border-color: var(--red); }
/* Subscription-exhausted variant (amber) */
.docs-token-alert--sub { background: rgba(245,158,11,.07); border-color: rgba(245,158,11,.25); }
.docs-token-alert--sub .dta-dot { background: var(--amber); }
.docs-token-alert--sub .dta-text strong { color: #b45309; }
.docs-token-alert--sub .dta-btn { color: #b45309; border-color: rgba(245,158,11,.35); }
.docs-token-alert--sub .dta-btn:hover { background: var(--amber); color: #fff; border-color: var(--amber); }

/* Search bar */
.search-bar {
    display: flex;
    gap: 10px;
    align-items: center;
    margin-bottom: 28px;
}
.search-input-wrap {
    position: relative;
    flex: 1;
    max-width: 360px;
}
.search-icon {
    position: absolute;
    left: 11px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--text-tertiary);
    pointer-events: none;
}
.search-input {
    width: 100%;
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 14px;
    padding: 9px 13px 9px 34px;
    border: 1.5px solid var(--border-color);
    border-radius: 10px;
    background: var(--bg-primary);
    color: var(--text-primary);
    outline: none;
    transition: border-color 150ms ease, box-shadow 150ms ease;
}
.search-input:focus {
    border-color: var(--text-primary);
    box-shadow: 0 0 0 3px rgba(26,25,23,0.06);
}
.search-input::placeholder { color: var(--text-tertiary); }

/* Sort tabs */
.sort-tabs {
    display: flex;
    gap: 2px;
    background: var(--bg-secondary);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    padding: 3px;
}
.sort-tab {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 13px;
    font-weight: 500;
    font-family: 'Outfit', system-ui, sans-serif;
    padding: 5px 12px;
    border-radius: 7px;
    color: var(--text-tertiary);
    cursor: pointer;
    transition: all 150ms ease;
    background: none;
    border: none;
    white-space: nowrap;
}
.sort-tab.active {
    background: var(--bg-primary);
    color: var(--text-primary);
    box-shadow: var(--shadow-sm);
}
.sort-tab:not(.active):hover { color: var(--text-secondary); }
.sort-arrow {
    transition: transform 150ms ease;
    flex-shrink: 0;
    opacity: 0.5;
}
.sort-tab.active .sort-arrow { opacity: 1; }
.sort-tab[data-dir="asc"] .sort-arrow { transform: rotate(180deg); }

/* No results */
.docs-no-results {
    text-align: center;
    padding: 60px 0;
    color: var(--text-tertiary);
    font-size: 14px;
}

/* Documents grid */
.docs-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 18px;
}

/* Document card */
.doc-card {
    background: var(--bg-primary);
    border: 1.5px solid var(--border-color);
    border-radius: 20px;
    overflow: hidden;
    box-shadow: var(--shadow-sm);
    transition: all 250ms cubic-bezier(0.4, 0, 0.2, 1);
    cursor: pointer;
    position: relative;
}
.doc-card:hover {
    border-color: #C8C0B8;
    transform: translateY(-3px);
    box-shadow: var(--shadow-md);
}
.doc-card-preview {
    position: relative;
    width: 100%;
    aspect-ratio: 4/3;
    background: var(--bg-secondary);
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
}
.doc-card-thumb {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.doc-card-placeholder {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--bg-secondary);
}

/* Paper placeholder (from design-proposal) */
.doc-thumb-paper {
    width: 55%;
    height: 70%;
    background: var(--bg-primary);
    border-radius: 3px;
    box-shadow: var(--shadow-md);
    display: flex;
    flex-direction: column;
    padding: 10px;
    gap: 5px;
}
.doc-thumb-line {
    height: 2.5px;
    background: var(--border-color);
    border-radius: 2px;
}
.doc-thumb-line:nth-child(1) { width: 80%; }
.doc-thumb-line:nth-child(2) { width: 65%; }
.doc-thumb-line:nth-child(3) { width: 90%; }
.doc-thumb-line:nth-child(4) { width: 55%; }
.doc-card-pages {
    position: absolute;
    bottom: 8px;
    left: 8px;
    background: rgba(26,25,23,0.55);
    color: #fff;
    font-size: 11px;
    font-weight: 600;
    padding: 2px 8px;
    border-radius: 100px;
    letter-spacing: 0.2px;
    backdrop-filter: blur(4px);
}
.doc-card-footer {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 12px 14px 4px;
    position: relative;
}
.doc-card-name {
    flex: 1;
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    line-height: 1.3;
}
.doc-card-date {
    font-size: 12px;
    color: var(--text-tertiary);
    font-weight: 500;
    padding: 0 14px 12px;
}

/* Card rename (pencil) button in footer */
.doc-card-rename-btn {
    background: none;
    border: none;
    cursor: pointer;
    color: var(--text-tertiary);
    padding: 4px;
    border-radius: 6px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    opacity: 0;
    transition: all 150ms ease;
    pointer-events: none;
}
.doc-card:hover .doc-card-rename-btn {
    opacity: 1;
    pointer-events: all;
}
.doc-card-rename-btn:hover {
    color: var(--text-secondary);
    background: var(--bg-secondary);
}

/* Card pages-preview and delete buttons */
.doc-card-pages-btn,
.doc-card-delete-btn {
    position: absolute;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border: none;
    border-radius: 8px;
    cursor: pointer;
    padding: 0;
    opacity: 0;
    transition: all 160ms ease;
    pointer-events: none;
    backdrop-filter: blur(4px);
}
.doc-card:hover .doc-card-pages-btn,
.doc-card:hover .doc-card-delete-btn {
    opacity: 1;
    pointer-events: all;
}

/* Pages button — top-left, frosted light */
.doc-card-pages-btn {
    top: 8px;
    left: 8px;
    background: rgba(255,255,255,0.92);
    color: var(--text-secondary);
}
.doc-card-pages-btn:hover {
    background: #fff;
    color: var(--text-primary);
}

/* Delete button — top-right, frosted light with red icon */
.doc-card-delete-btn {
    top: 8px;
    right: 8px;
    background: rgba(255,255,255,0.92);
    color: #D94F4F;
}
.doc-card-delete-btn:hover {
    background: #D94F4F;
    color: #fff;
}

/* ── Document pages grid modal ─────────────────────────────────────────────── */
.doc-pages-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
    gap: 12px;
    max-height: 65vh;
    overflow-y: auto;
    padding: 4px 2px;
}
.doc-pages-item {
    position: relative;
    aspect-ratio: 3/4;
    border-radius: 10px;
    overflow: hidden;
    background: var(--bg-secondary);
    border: 1.5px solid var(--border-color);
    cursor: default;
    transition: border-color 150ms ease, box-shadow 150ms ease;
}
.doc-pages-item:hover {
    border-color: #C8C0B8;
    box-shadow: var(--shadow-sm);
}
/* img and placeholder both fill the item absolutely so they don't stack */
.doc-pages-item img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.doc-pages-placeholder {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--text-tertiary);
}
.doc-pages-num {
    position: absolute;
    bottom: 6px;
    right: 6px;
    background: rgba(26,25,23,0.60);
    color: #fff;
    font-size: 11px;
    font-weight: 600;
    line-height: 1;
    padding: 2px 7px;
    border-radius: 100px;
    pointer-events: none;
    backdrop-filter: blur(4px);
}

/* Legacy menu item style (kept for safety) */
.doc-menu-item {
    display: block;
    width: 100%;
    padding: 0.625rem 1rem;
    border: none;
    background: transparent;
    font-size: 0.875rem;
    color: var(--text-primary);
    text-align: left;
    cursor: pointer;
    font-family: inherit;
    transition: background 0.12s;
}
.doc-menu-item:hover { background: var(--bg-secondary); }
.doc-menu-item--danger { color: var(--danger-color); }
.doc-menu-item--danger:hover { background: rgba(239, 68, 68, 0.06); }

/* Create doc modal: drop zone */
.doc-drop-zone {
    border: 2px dashed var(--border-color);
    border-radius: 16px;
    padding: 32px 20px;
    text-align: center;
    cursor: pointer;
    transition: border-color 0.18s, background 0.18s;
    position: relative;
    overflow: hidden;
    margin-bottom: 1.25rem;
    background: var(--bg-secondary);
}
.doc-drop-zone:hover,
.doc-drop-zone.drag-over {
    border-color: var(--primary-color);
    background: var(--primary-soft);
}
.doc-drop-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    color: var(--text-secondary);
}
.doc-drop-inner svg { color: var(--text-tertiary); }
.doc-drop-inner p { margin: 0; font-size: 14px; font-weight: 500; }
.doc-drop-link { color: var(--primary-color); font-weight: 600; text-decoration: underline; text-decoration-style: dotted; }
.doc-drop-hint { font-size: 12px; color: var(--text-tertiary) !important; }
.doc-file-preview {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    padding: 0.75rem;
}
.doc-file-thumb {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.25rem;
    width: 100px;
}
.doc-file-thumb img {
    width: 100px;
    height: 100px;
    object-fit: cover;
    border-radius: 0.375rem;
    border: 1px solid var(--border-color);
}
.doc-file-thumb span {
    font-size: 0.6rem;
    color: var(--text-tertiary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100px;
    text-align: center;
}
.doc-file-add-more {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.2rem;
    width: 100px;
    height: 100px;
    border: 2px dashed var(--border-color);
    border-radius: 0.375rem;
    cursor: pointer;
    color: var(--text-tertiary);
    font-size: 0.65rem;
    transition: border-color 0.15s, color 0.15s;
    flex-shrink: 0;
}
.doc-file-add-more:hover {
    border-color: var(--primary-color);
    color: var(--primary-color);
}

/* .btn-danger — defined in common.css */

/* Responsive canvas */
@media (max-width: 900px) {
    .docs-grid {
        grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
    }
    .docs-main { padding: 1.25rem; }
}
@media (max-width: 480px) {
    .docs-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

/* ===== End documents canvas ===== */

/* Responsive */
@media (max-width: 900px) {
    .tx-stats-grid {
        grid-template-columns: repeat(2, 1fr);
    }
    .profile-section--tx {
        padding: 1.25rem 1rem 1.5rem;
    }
}

@media (max-width: 768px) {
    .tx-stats-grid {
        grid-template-columns: 1fr 1fr;
    }
    .overview-stats-grid {
        grid-template-columns: 1fr;
    }
    .referral-code-hero-value {
        font-size: 1.75rem;
        letter-spacing: 0.15em;
    }
    .profile-layout {
        flex-direction: column;
    }
    .profile-sidebar {
        width: 100%;
        border-right: none;
        border-bottom: 1px solid var(--border-color);
    }
    .profile-identity { display: none; }
    .profile-nav {
        flex-direction: row;
        overflow-x: auto;
        scrollbar-width: none;
        padding: 0.5rem 0.75rem;
        gap: 2px;
    }
    .profile-nav::-webkit-scrollbar { display: none; }
    .profile-nav-item {
        white-space: nowrap;
        padding: 0.4rem 0.75rem;
        font-size: 0.75rem;
    }
    .profile-nav-item svg { display: none; }
    .profile-content {
        padding: 1.5rem 1.25rem 3rem;
    }
    .profile-page-title {
        font-size: 1.125rem;
        margin-bottom: 1.5rem;
    }
    .tx-search { width: 100%; }
    .tx-toolbar { justify-content: stretch; }
    .tx-search-wrap { width: 100%; }
    .thumbnail-sidebar {
        width: 120px;
    }

    .page {
        padding: 4rem 1rem 9rem;
    }

    .file-tab-name {
        max-width: 180px;
    }

}

/* ── Export bar: compact on narrow screens ────────────────────────────────── */
@media (max-width: 768px) {
    .export-bar { gap: 4px; padding: 4px; }
    .btn-export { padding: 6px 8px; font-size: 12px; }
}

/* (old btn-delete-selected styles removed — now using .selection-bar-delete) */

.btn-retry-failed {
    color: var(--text-tertiary);
    opacity: 0.35;
    cursor: not-allowed;
}

.btn-retry-failed.active {
    color: #f59e0b;
    opacity: 1;
    cursor: pointer;
}

.btn-retry-failed.active:hover {
    background: rgba(245, 158, 11, 0.12);
    color: #d97706;
}

/* ── White fog overlay on thumbnail image while pending/processing ─────────── */
.thumbnail-item.status-pending .thumbnail-content::before,
.thumbnail-item.status-processing .thumbnail-content::before {
    content: '';
    position: absolute;
    inset: 0;
    background: rgba(255, 255, 255, 0.38);
    z-index: 2;
    pointer-events: none;
}

/* ── Bulk delete confirmation modal ──────────────────────────────────────── */
.modal-content.modal-small {
    max-width: 380px;
}

/* .btn-danger — defined in common.css */

/* ── Circular progress ring on thumbnails during processing ──────────────── */
.thumbnail-progress {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 6;
    width: 42px;
    height: 42px;
    background: rgba(0, 0, 0, 0.28);
    border-radius: 50%;
    pointer-events: none;
}

.thumbnail-progress svg {
    width: 42px;
    height: 42px;
    transform: rotate(-90deg);
}

.progress-track {
    fill: none;
    stroke: rgba(255, 255, 255, 0.6);
    stroke-width: 3;
}

.progress-bar {
    fill: none;
    stroke: #60a5fa;
    stroke-width: 3.5;
    stroke-linecap: round;
    stroke-dasharray: 100;
    stroke-dashoffset: 100;
}

/* ── Success checkmark drawn inside the ring after completion ─────────────── */
/* Path length for M 10 18 L 15 23 L 26 12 ≈ 22.6 → dasharray: 23          */
/* transform="rotate(90,18,18)" on the path cancels the SVG rotate(-90deg)   */
.progress-check {
    fill: none;
    stroke: #4ade80;
    stroke-width: 3;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-dasharray: 23;
    stroke-dashoffset: 23;
    transition: stroke-dashoffset 0.8s cubic-bezier(0.22, 1, 0.36, 1);
}

.progress-check.is-visible {
    stroke-dashoffset: 0;
}

/* ── Profile: subscription badge in header ─────────────────────────────── */
.sub-header-badge {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 10px;
    border-radius: 100px;
    font-size: 12px;
    font-weight: 600;
    font-family: 'Outfit', system-ui, sans-serif;
    letter-spacing: 0.01em;
    white-space: nowrap;
    background: var(--bg-secondary);
    color: var(--text-secondary);
    border: 1px solid var(--border-color);
}
.sub-header-badge::before {
    content: '✦';
    font-size: 10px;
    color: var(--primary-color);
}
.sub-header-badge--starter { color: var(--primary-color); border-color: rgba(232,112,58,0.25); background: rgba(232,112,58,0.06); }
.sub-header-badge--pro     { color: var(--text-primary);  border-color: var(--border-color); }
.sub-header-badge--business{ color: #b45309; border-color: rgba(180,83,9,0.25); background: rgba(245,158,11,0.06); }

/* ── Profile: subscription stat icon ───────────────────────────────────── */
.stat-icon--sub { background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); color: #d97706; }
.stat-value--sub { font-weight: 700; color: var(--text-primary); }

/* ── Profile: extra tokens section ─────────────────────────────────────── */
.profile-section--extra-tokens { border-top: 1px solid var(--border-color); padding-top: 1.25rem; }
.extra-tokens-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.75rem;
    margin-top: 0.65rem;
}
.extra-tokens-block {
    background: var(--bg-secondary);
    border: 1px solid var(--border-color);
    border-radius: 0.75rem;
    padding: 1rem 1.125rem;
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
}
.extra-tokens-block--referral {
    background: linear-gradient(135deg, rgba(26,37,64,0.04) 0%, rgba(232,112,58,0.04) 100%);
    border-color: rgba(26,37,64,0.18);
}
.extra-tokens-block-label {
    font-size: 0.75rem;
    font-weight: 500;
    color: var(--text-secondary);
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.extra-tokens-block-count {
    font-size: 1.5rem;
    font-weight: 700;
    color: #10b981;
    line-height: 1.1;
}
.extra-tokens-block--referral .extra-tokens-block-count {
    color: #1A2540;
}
.extra-tokens-block-desc {
    font-size: 0.75rem;
    color: var(--text-secondary);
    line-height: 1.35;
}

/* ── Profile: subscription usage bar variants ──────────────────────────── */
.sub-progress-fill--warn   { background: linear-gradient(90deg, #f59e0b, #d97706); }
.sub-progress-fill--danger { background: linear-gradient(90deg, #ef4444, #dc2626); }

/* ── Profile: account tab — edit name / change password ────────────────── */
.account-edit-row {
    display: flex;
    gap: 0.6rem;
    align-items: center;
}
.account-edit-row .form-input { flex: 1; }
.btn-account-save { white-space: nowrap; flex-shrink: 0; }
.account-name-readonly {
    background: var(--bg-secondary);
    color: var(--text-secondary);
    cursor: default;
    border-color: transparent;
}

/* ── Profile: inline danger zone ───────────────────────────────────────── */
.account-danger-inline { padding-top: 1rem; border-top: 1px solid var(--border-color); margin-top: 0.25rem; }
.danger-desc--sm { font-size: 0.82rem; color: var(--text-secondary); margin: 0 0 0.65rem; }
/* .btn-danger--sm — defined in common.css */
.btn-secondary--sm {
    padding: 0.4rem 0.9rem;
    font-size: 0.82rem;
}

/* ── Password strength indicator ──────────────────────────────────────── */
.password-strength {
    margin-top: 0.4rem;
    display: flex;
    align-items: center;
    gap: 0.6rem;
}
.password-strength-bar {
    flex: 1;
    height: 4px;
    background: var(--bg-secondary);
    border-radius: 2px;
    overflow: hidden;
}
.password-strength-fill {
    height: 100%;
    border-radius: 2px;
    transition: width 0.3s ease, background 0.3s ease;
    width: 0;
}
.password-strength-text {
    font-size: 0.75rem;
    font-weight: 500;
    white-space: nowrap;
}

/* ── Privacy consent checkbox ─────────────────────────────────────────── */
.form-group--checkbox { margin-top: 0.5rem; }
.checkbox-label {
    display: flex;
    align-items: flex-start;
    gap: 0.5rem;
    font-size: 0.85rem;
    color: var(--text-secondary);
    cursor: pointer;
    line-height: 1.4;
}
.checkbox-label input[type="checkbox"] {
    margin-top: 2px;
    flex-shrink: 0;
    accent-color: var(--primary);
}
.checkbox-label a {
    color: var(--primary);
    text-decoration: underline;
}

/* ── Settings links ───────────────────────────────────────────────────── */
.settings-link {
    color: var(--text-secondary);
    text-decoration: none;
    font-size: 0.88rem;
    transition: color 0.15s;
}
.settings-link:hover { color: var(--primary); }

/* ── Privacy page ─────────────────────────────────────────────────────── */
.privacy-container {
    max-width: 720px;
    margin: 0 auto;
    padding: 2rem 1.5rem;
}
.privacy-container h1 {
    font-size: 1.5rem;
    margin-bottom: 1.5rem;
}
.privacy-container h2 {
    font-size: 1.1rem;
    margin: 1.5rem 0 0.5rem;
    color: var(--text-primary);
}
.privacy-container p,
.privacy-container li {
    font-size: 0.9rem;
    color: var(--text-secondary);
    line-height: 1.65;
}
.privacy-container ul {
    margin: 0.5rem 0 0.5rem 1.25rem;
}
.privacy-back {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    color: var(--text-secondary);
    text-decoration: none;
    font-size: 0.88rem;
    margin-bottom: 1rem;
}
.privacy-back:hover { color: var(--primary); }

/* ═══════════════════════════════════════════════════════════════════════════
   Auth modal — Manuscript theme
   ═══════════════════════════════════════════════════════════════════════════ */

/* Modal container */
.auth-modal.modal-content {
    padding: 0;
    max-width: 400px;
    border-radius: 20px;
    overflow: hidden;
    position: relative;
}

/* Close button */
.auth-modal-close {
    position: absolute;
    top: 14px;
    right: 14px;
    width: 30px;
    height: 30px;
    border: none;
    background: var(--bg-secondary);
    cursor: pointer;
    color: var(--text-tertiary);
    font-size: 18px;
    line-height: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
    transition: background 150ms, color 150ms;
    z-index: 1;
}
.auth-modal-close:hover {
    background: var(--border-color);
    color: var(--text-primary);
}

/* Legacy tabs (registerModal backward compat) */
.auth-tabs {
    display: flex;
    border-bottom: 1px solid var(--border-color);
    padding: 0 24px;
}
.auth-tab {
    flex: 1;
    text-align: center;
    padding: 18px 0 14px;
    font-size: 14px;
    font-weight: 500;
    font-family: inherit;
    color: var(--text-tertiary);
    background: none;
    border: none;
    border-bottom: 2px solid transparent;
    cursor: pointer;
    text-decoration: none;
    transition: color 150ms, border-color 150ms;
    margin-bottom: -1px;
}
.auth-tab:hover { color: var(--text-primary); }
.auth-tab.auth-tab--active {
    color: var(--primary-color);
    border-bottom-color: var(--primary-color);
    font-weight: 600;
}

/* Body */
.auth-body {
    padding: 28px 24px 28px;
}

/* OAuth buttons */
.oauth-buttons {
    display: flex;
    flex-direction: column;
    gap: 9px;
    margin-bottom: 18px;
}
.oauth-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    padding: 10px 16px;
    border-radius: 10px;
    border: 1.5px solid var(--border-color);
    background: var(--bg-primary);
    font-size: 14px;
    font-weight: 500;
    font-family: inherit;
    color: var(--text-primary);
    text-decoration: none;
    cursor: pointer;
    transition: background 150ms, border-color 150ms, box-shadow 150ms;
    user-select: none;
}
.oauth-btn:hover {
    background: var(--bg-secondary);
    box-shadow: var(--shadow-sm);
}
.oauth-btn--google:hover  { border-color: #4285F4; }
.oauth-btn--yandex:hover  { border-color: #FC3F1D; }
.oauth-btn--vk:hover      { border-color: #0077FF; }
.oauth-btn-icon {
    position: absolute;
    left: 14px;
    width: 22px;
    height: 22px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.oauth-btn-icon svg { width: 22px; height: 22px; }
.oauth-btn-label {
    font-weight: 500;
}

/* "или" divider */
.auth-divider {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: 20px;
    margin-bottom: 16px;
    color: var(--text-tertiary);
    font-size: 12px;
}
.auth-divider::before,
.auth-divider::after {
    content: '';
    flex: 1;
    height: 1px;
    background: var(--border-color);
}

/* Form */
.auth-form .form-group {
    margin-bottom: 10px;
}
.auth-input {
    width: 100%;
    padding: 10px 13px;
    border: 1.5px solid var(--border-color);
    border-radius: 8px;
    font-size: 14px;
    font-family: inherit;
    background: var(--bg-primary);
    color: var(--text-primary);
    outline: none;
    transition: border-color 150ms, box-shadow 150ms;
    box-sizing: border-box;
}
.auth-input:focus {
    border-color: var(--primary-color);
    box-shadow: 0 0 0 3px var(--primary-soft);
}
.auth-input::placeholder {
    color: var(--text-tertiary);
}
.auth-form .password-input {
    position: relative;
}
.auth-form .password-input .auth-input {
    padding-right: 44px;
}
.auth-form .password-toggle {
    position: absolute;
    right: 12px;
    top: 50%;
    transform: translateY(-50%);
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    color: var(--text-tertiary);
    transition: color 150ms;
}
.auth-form .password-toggle:hover { color: var(--text-primary); }

/* Submit button */
.auth-submit {
    width: 100%;
    padding: 11px;
    background: var(--text-primary);
    color: #fff;
    border: none;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    margin-top: 8px;
    box-shadow: var(--shadow-sm);
    transition: background 150ms, box-shadow 150ms, transform 150ms;
}
.auth-submit:hover:not(:disabled) {
    background: var(--purple-color);
    box-shadow: var(--shadow-md);
    transform: translateY(-1px);
}
.auth-submit:disabled {
    opacity: 0.5;
    cursor: default;
    box-shadow: none;
    transform: none;
}

/* Links */
.auth-links {
    margin-top: 14px;
    font-size: 13px;
    color: var(--text-tertiary);
    text-align: center;
}
.auth-links a { color: var(--primary-color); text-decoration: none; }
.auth-links a:hover { text-decoration: underline; }

/* Checkbox */
.auth-form .form-group--checkbox .checkbox-label {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    font-size: 13px;
    color: var(--text-secondary);
    cursor: pointer;
    line-height: 1.4;
}
.auth-form .form-group--checkbox .checkbox-label input { margin-top: 2px; flex-shrink: 0; }
.auth-form .form-group--checkbox .checkbox-label a { color: var(--primary-color); text-decoration: none; }

/* Errors */
.auth-form .form-error,
.auth-error {
    color: var(--danger-color);
    font-size: 13px;
    margin-top: 6px;
    margin-bottom: 4px;
    line-height: 1.4;
}
.auth-error--banner:not(:empty) {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 12px;
    padding: 10px 12px;
    background: color-mix(in srgb, var(--danger-color) 8%, transparent);
    border: 1px solid color-mix(in srgb, var(--danger-color) 25%, transparent);
    border-radius: 8px;
    font-size: 13px;
    line-height: 1.45;
}
.auth-error--banner:not(:empty)::before {
    content: '';
    display: block;
    flex-shrink: 0;
    width: 15px;
    height: 15px;
    background-color: var(--danger-color);
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='black' stroke-width='2'/%3E%3Crect x='11' y='6' width='2' height='7' rx='1' fill='black'/%3E%3Crect x='11' y='15' width='2' height='3' rx='1' fill='black'/%3E%3C/svg%3E");
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='black' stroke-width='2'/%3E%3Crect x='11' y='6' width='2' height='7' rx='1' fill='black'/%3E%3Crect x='11' y='15' width='2' height='3' rx='1' fill='black'/%3E%3C/svg%3E");
    -webkit-mask-size: contain;
    mask-size: contain;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
}

/* Gift note */
.auth-gift-note {
    font-size: 13px;
    color: var(--text-tertiary);
    text-align: center;
    margin-top: 10px;
}

/* ── Multi-step ─────────────────────────────────────────────────────────── */

.auth-step-header {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 16px;
}
.auth-step-title {
    font-size: 18px;
    font-weight: 700;
    color: var(--text-primary);
    letter-spacing: -0.3px;
    margin: 0;
}
.auth-back-btn {
    background: none;
    border: none;
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    color: var(--text-tertiary);
    padding: 4px 8px;
    border-radius: 6px;
    transition: background 150ms, color 150ms;
    flex-shrink: 0;
}
.auth-back-btn:hover {
    background: var(--bg-tertiary);
    color: var(--text-primary);
}

/* Email display (above password step) */
.auth-email-display {
    font-size: 13px;
    color: var(--text-tertiary);
    margin: 0 0 14px;
    word-break: break-all;
}

/* Forgot password */
.auth-forgot-wrap {
    text-align: center;
    margin-top: 12px;
}
.auth-forgot-link {
    font-size: 13px;
    color: var(--text-secondary);
    text-decoration: none;
    transition: color 150ms;
}
.auth-forgot-link:hover { color: var(--primary-color); }

/* Description text */
.auth-reset-desc {
    font-size: 13px;
    color: var(--text-secondary);
    margin: 0 0 18px;
    line-height: 1.55;
}
.auth-reset-desc a { color: var(--primary-color); text-decoration: none; }
.auth-reset-desc a:hover { text-decoration: underline; }

/* 4-digit code boxes */
.auth-code-wrap {
    display: flex;
    gap: 10px;
    justify-content: center;
    margin-bottom: 16px;
}
.auth-code-digit {
    width: 58px;
    height: 62px;
    text-align: center;
    font-size: 26px;
    font-weight: 700;
    font-family: inherit;
    border: 1.5px solid var(--border-color);
    border-radius: 10px;
    outline: none;
    color: var(--text-primary);
    background: var(--bg-primary);
    transition: border-color 150ms, box-shadow 150ms;
    -moz-appearance: textfield;
}
.auth-code-digit::-webkit-outer-spin-button,
.auth-code-digit::-webkit-inner-spin-button { -webkit-appearance: none; }
.auth-code-digit:focus {
    border-color: var(--primary-color);
    box-shadow: 0 0 0 3px var(--primary-soft);
}

/* Resend code */
.auth-resend-wrap {
    text-align: center;
    margin-top: 6px;
    min-height: 1.4em;
}
.auth-resend-link {
    font-size: 13px;
    color: var(--primary-color);
    text-decoration: none;
    cursor: pointer;
}
.auth-resend-link:hover { text-decoration: underline; }
.auth-resend-timer {
    font-size: 13px;
    color: var(--text-tertiary);
}

/* Consent text */
.auth-consent-text {
    font-size: 12px;
    color: var(--text-tertiary);
    text-align: center;
    margin-top: 14px;
    line-height: 1.55;
}
.auth-consent-text a {
    color: var(--text-secondary);
    text-decoration: underline;
}
.auth-consent-text a:hover { color: var(--text-primary); }

/* "Other methods" toggle */
.auth-other-methods-toggle {
    display: block;
    width: 100%;
    background: none;
    border: none;
    color: var(--primary-color);
    font-size: 13px;
    font-family: inherit;
    text-align: center;
    cursor: pointer;
    padding: 6px;
    transition: color 150ms;
}
.auth-other-methods-toggle:hover { color: var(--primary-dark); }
.am-toggle-arrow {
    display: inline-block;
    font-size: 0.72em;
    margin-left: 4px;
    vertical-align: middle;
}
#am-other-methods { margin-top: 8px; }

/* "Email available" badge */
.auth-email-available {
    color: var(--success-color);
    font-weight: 600;
    font-size: 14px;
    margin: 0 0 14px;
}

/* Consent checkbox */
.auth-checkbox-label {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    font-size: 13px;
    color: var(--text-secondary);
    line-height: 1.45;
    cursor: pointer;
    margin-bottom: 18px;
}
.auth-checkbox-label a { color: var(--primary-color); text-decoration: none; }
.auth-checkbox-label a:hover { text-decoration: underline; }
.auth-checkbox-label input[type="checkbox"] {
    flex-shrink: 0;
    width: 16px;
    height: 16px;
    margin-top: 2px;
    cursor: pointer;
    accent-color: var(--primary-color);
}

.consent-age-row { display:flex; align-items:center; gap:10px; padding:10px 0; border-bottom:1px solid var(--border-color); margin-bottom:14px; cursor:pointer; }
.consent-age-row input[type="checkbox"] { flex-shrink:0; width:16px; height:16px; accent-color:var(--primary-color); cursor:pointer; }
.consent-age-row span { font-size:14px; font-weight:600; color:var(--text-primary); }

.consent-legal-group { background:var(--bg-secondary); border:1px solid var(--border-color); border-radius:10px; padding:12px 14px; margin-bottom:16px; }
.consent-legal-title { font-size:10px; font-weight:700; letter-spacing:0.09em; text-transform:uppercase; color:var(--text-tertiary); margin:0 0 10px; }
.consent-legal-group .auth-checkbox-label { font-size:12px; margin-bottom:9px; color:var(--text-tertiary); }
.consent-legal-group .auth-checkbox-label:last-child { margin-bottom:0; }
.consent-legal-group .auth-checkbox-label a { color:var(--text-secondary); }
.consent-legal-group .auth-checkbox-label input[type="checkbox"] { width:14px; height:14px; margin-top:1px; }

/* Loading overlay */
.am-overlay {
    position: absolute;
    inset: 0;
    z-index: 10;
    background: rgba(246, 244, 240, 0.88);
    backdrop-filter: blur(3px);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    border-radius: inherit;
    gap: 14px;
}
.am-spinner {
    width: 34px;
    height: 34px;
    border: 2.5px solid var(--border-color);
    border-top-color: var(--primary-color);
    border-radius: 50%;
    animation: am-spin 0.7s linear infinite;
}
@keyframes am-spin { to { transform: rotate(360deg); } }
.am-overlay-text {
    font-size: 13px;
    color: var(--text-secondary);
    margin: 0;
    text-align: center;
}

/* Step enter animation */
@keyframes am-step-in {
    from { opacity: 0; transform: translateY(10px); }
    to   { opacity: 1; transform: translateY(0); }
}
.am-step-enter {
    animation: am-step-in 0.28s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
}

/* ── KaTeX: hide MathML layer so formulas don't render twice ─────────────── */
/* Fallback for when cdn.jsdelivr.net/katex.min.css loads slowly or fails.   */
/* KaTeX renders both .katex-html (visual) and .katex-mathml (screen reader) */
/* Without this rule both would be visible, causing text duplication.        */
.katex .katex-mathml {
    position: absolute;
    clip: rect(1px, 1px, 1px, 1px);
    padding: 0;
    border: 0;
    height: 1px;
    width: 1px;
    overflow: hidden;
}
