/* ============================================================
   Strom – Dark RSS Reader Design System
   Central stylesheet: all styles live here, no inline CSS
   ============================================================ */

/* ---- Design Tokens ---------------------------------------- */
:root {
    /* Color */
    --bg: #0a0f1c;
    --surface: #101728;
    --surface-2: #161e33;
    --line: #1f2a44;
    --line-strong: #2c3a5a;
    --ink: #e8edf7;
    --ink-2: #b3bdd1;
    --ink-3: #7a849c;
    --ink-4: #4e5a76;
    --accent: #f59e3b;
    --accent-soft: oklch(0.3 0.08 50);
    --accent-ink: oklch(0.85 0.15 60);
    --unread: oklch(0.78 0.16 240);
    --star: oklch(0.78 0.14 80);
    --shadow: 0 1px 0 rgba(0,0,0,.4), 0 16px 40px -16px rgba(0,0,0,.6);
    --glow: 0 1px 0 rgba(0,0,0,.08), 0 6px 16px -4px color-mix(in oklab, var(--accent) 40%, transparent);

    /* Spacing scale (rem, multiples of 4px) */
    --sp-1: 0.25rem;    /* 4px */
    --sp-2: 0.5rem;     /* 8px */
    --sp-3: 0.75rem;    /* 12px */
    --sp-4: 1rem;       /* 16px */
    --sp-5: 1.25rem;    /* 20px */
    --sp-6: 1.5rem;     /* 24px */
    --sp-8: 2rem;       /* 32px */
    --sp-9: 2.25rem;    /* 36px */
    --sp-12: 3rem;      /* 48px */
    --sp-16: 4rem;      /* 64px */
    --sp-20: 5rem;      /* 80px */

    /* Border radius */
    --radius-sm: 0.25rem;    /* 4px */
    --radius-md: 0.375rem;   /* 6px */
    --radius-lg: 0.5rem;     /* 8px */
    --radius-xl: 0.625rem;   /* 10px */
    --radius-2xl: 0.75rem;   /* 12px */
    --radius-3xl: 0.875rem;  /* 14px */
    --radius-pill: 999px;

    /* Type scale */
    --text-2xs: 0.65rem;     /* ~10.5px */
    --text-xs: 0.6875rem;    /* 11px */
    --text-sm: 0.75rem;      /* 12px */
    --text-base: 0.9rem;     /* 14.4px */
    --text-md: 0.95rem;    /* 15.2px */
    --text-lg: 1rem;         /* 16px */
    --text-xl: 1.3125rem;    /* 21px */
    --text-2xl: 1.5rem;      /* 24px */
    --text-3xl: 1.875rem;    /* 30px */

    /* Transition durations */
    --t: 0.1s;
    --t-med: 0.2s;
    --t-slow: 0.3s;
}

html[data-theme="light"] {
    --bg: #f7f6f2;
    --surface: #fdfcf8;
    --surface-2: #f1efe9;
    --line: #e6e3da;
    --line-strong: #d9d5c8;
    --ink: #1a1916;
    --ink-2: #45433d;
    --ink-3: #79766c;
    --ink-4: #a8a59a;
    --accent: oklch(0.62 0.16 55);
    --accent-soft: oklch(0.93 0.05 65);
    --accent-ink: oklch(0.4 0.12 50);
    --unread: oklch(0.62 0.15 250);
    --star: oklch(0.7 0.13 80);
    --shadow: 0 1px 0 rgba(20,18,12,.03), 0 8px 24px -12px rgba(20,18,12,.08);
    --glow: 0 1px 0 rgba(20,18,12,.04), 0 6px 16px -4px color-mix(in oklab, var(--accent) 30%, transparent);
}

/* ---- Reset & Base ----------------------------------------- */
* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

html, body {
    height: 100%;
    overflow: hidden;
    background: var(--bg);
    color: var(--ink);
}

body {
    font-family: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    font-feature-settings: "ss01" 1, "cv11" 1;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    display: flex;
    flex-direction: column;
    line-height: 1.5;
}

::selection {
    background: var(--accent-soft);
    color: var(--accent-ink);
}

.mono {
    font-family: 'Geist Mono', ui-monospace, 'SFMono-Regular', 'Cascadia Code', monospace;
}

.serif {
    font-family: 'Instrument Serif', Georgia, 'Times New Roman', serif;
    font-style: italic;
}

a {
    text-decoration: none;
    color: var(--ink);
}

/* Custom scrollbar */
::-webkit-scrollbar {
    width: 10px;
}
::-webkit-scrollbar-track {
    background: transparent;
}
::-webkit-scrollbar-thumb {
    background: var(--line-strong);
    border-radius: var(--radius-lg);
    border: 2px solid var(--bg);
}
::-webkit-scrollbar-thumb:hover {
    background: var(--ink-4);
}

/* ---- Animations ------------------------------------------- */
@keyframes spin {
    to { transform: rotate(360deg); }
}

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

@keyframes slideIn {
    from { transform: translateX(100%); opacity: 0; }
    to { transform: translateX(0); opacity: 1; }
}

@keyframes markReadStripe {
    0% { left: -100%; }
    100% { left: 0; }
}

/* ---- Topbar ----------------------------------------------- */
.topbar {
    height: 52px;
    width: 100%;
    border-bottom: 1px solid var(--line);
    background: var(--bg);
    position: relative;
    z-index: 30;
    flex-shrink: 0;
}

.topbar-inner {
    display: flex;
    align-items: center;
    gap: var(--sp-3);
    padding: 0 var(--sp-3);
    height: 100%;
}

.topbar-brand {
    width: 248px;
    height: 100%;
    display: flex;
    align-items: center;
    gap: var(--sp-2);
    text-decoration: none;
    color: var(--ink);
    flex-shrink: 0;
}

.brand-logo {
    width: 22px;
    height: 22px;
    border-radius: var(--radius-md);
    background: linear-gradient(135deg, var(--accent) 0%, color-mix(in oklab, var(--accent) 70%, #000) 100%);
    display: grid;
    place-items: center;
    color: #1a1208;
    flex-shrink: 0;
}

.brand-name {
    font-size: 0.9375rem;
    font-weight: 600;
    letter-spacing: -0.01em;
}

.brand-badge {
    font-size: var(--text-xs);
    color: var(--ink-4);
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    padding: 2px 0.375rem;
}

.topbar-search {
    flex: 1;
    max-width: 520px;
    display: flex;
    align-items: center;
    gap: 0.625rem;
    padding: 0.4375rem var(--sp-3);
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    height: 32px;
}

.topbar-search input {
    flex: 1;
    border: none;
    outline: none;
    background: transparent;
    color: var(--ink);
    font-size: var(--text-base);
    font-family: inherit;
}

.topbar-search input::placeholder {
    color: var(--ink-4);
}

.topbar-search-icon {
    color: var(--ink-3);
    width: 14px;
    height: 14px;
    flex-shrink: 0;
}

.topbar-search-kbd {
    font-size: var(--text-2xs);
    color: var(--ink-4);
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    padding: 1px 5px;
    flex-shrink: 0;
}

.topbar-spacer {
    flex: 1;
}

/* ---- Button Primitives ------------------------------------ */
/* Ghost: outlined border, surface hover */
.topbar-btn,
.sort-btn, .filter-btn,
.mark-read-btn,
.btn-action,
.btn-modal-secondary,
.reader-nav-btn,
.reader-icon-btn {
    border: 1px solid var(--line);
    background: none;
    cursor: pointer;
    color: var(--ink-2);
    font-family: inherit;
    transition: background var(--t);
    text-decoration: none;
}

.topbar-btn:hover,
.sort-btn:hover, .filter-btn:hover,
.mark-read-btn:hover,
.btn-action:hover,
.btn-modal-secondary:hover,
.reader-nav-btn:hover,
.reader-icon-btn:hover {
    background: var(--surface-2);
}

/* Icon: 28px square, centered */
.reader-nav-btn,
.reader-icon-btn {
    width: 28px;
    height: 28px;
    display: grid;
    place-items: center;
    border-radius: var(--radius-md);
}

/* Accent: amber fill, brightness hover */
.btn-primary,
.reader-cta-btn,
.btn-modal-primary {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    background: var(--accent);
    color: #1a1208;
    border: none;
    font-size: var(--text-base);
    font-weight: 600;
    cursor: pointer;
    font-family: inherit;
    text-decoration: none;
    white-space: nowrap;
    transition: filter var(--t);
}

.btn-primary:hover,
.reader-cta-btn:hover,
.btn-modal-primary:hover {
    filter: brightness(1.1);
    color: #1a1208;
}

/* ---------------------------------------------------------- */
.topbar-btn {
    width: 32px;
    height: 32px;
    display: grid;
    place-items: center;
    border-radius: var(--radius-lg);
    flex-shrink: 0;
}

.topbar-refresh {
    display: flex;
    align-items: center;
    gap: 0.4375rem;
    padding: 0.3125rem 0.625rem 0.3125rem var(--sp-2);
    background: none;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    cursor: pointer;
    color: var(--ink-2);
    font-size: var(--text-sm);
    white-space: nowrap;
    font-family: inherit;
    transition: background var(--t);
    height: 32px;
}

.topbar-refresh:hover {
    background: var(--surface-2);
}

.topbar-refresh .refresh-icon {
    display: inline-flex;
}

.topbar-refresh .refresh-icon.spinning {
    animation: spin 0.8s linear infinite;
}

.btn-primary {
    padding: 0.375rem var(--sp-3) 0.375rem 0.625rem;
    border-radius: var(--radius-lg);
    box-shadow: var(--glow);
    height: 32px;
}

.topbar-user {
    position: relative;
}

.user-chip {
    display: flex;
    align-items: center;
    gap: var(--sp-2);
    background: none;
    border: 1px solid var(--line);
    padding: 3px var(--sp-2) 3px 3px;
    border-radius: var(--radius-pill);
    cursor: pointer;
    color: var(--ink);
    font-family: inherit;
}

.user-avatar {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--accent-soft);
    color: var(--accent-ink);
    display: grid;
    place-items: center;
    font-size: var(--text-xs);
    font-weight: 600;
}

.user-chip span {
    font-size: var(--text-base);
}

.user-dropdown {
    position: absolute;
    top: 40px;
    right: 0;
    width: 200px;
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius-xl);
    box-shadow: var(--shadow);
    padding: 0.375rem;
    z-index: 40;
    display: none;
}

.user-dropdown.open {
    display: block;
}

.user-dropdown-header {
    padding: var(--sp-2) 0.625rem;
    border-bottom: 1px solid var(--line);
    margin-bottom: var(--sp-1);
}

.user-dropdown-name {
    font-size: var(--text-base);
    font-weight: 500;
    color: var(--ink);
}

.user-dropdown-email {
    font-size: var(--text-xs);
    color: var(--ink-3);
}

.user-dropdown-item {
    display: block;
    width: 100%;
    padding: 0.4375rem 0.625rem;
    text-align: left;
    background: transparent;
    border: none;
    border-radius: var(--radius-md);
    cursor: pointer;
    color: var(--ink-2);
    font-size: var(--text-base);
    font-family: inherit;
    text-decoration: none;
    transition: background var(--t);
}

.user-dropdown-item:hover {
    background: var(--surface-2);
    color: var(--ink);
}

/* ---- App Layout ------------------------------------------- */
.app-container {
    display: flex;
    flex: 1;
    min-height: 0;
    overflow: hidden;
}

.layout-wrapper {
    display: flex;
    flex: 1;
    min-width: 0;
    overflow: hidden;
}

/* ---- Sidebar ---------------------------------------------- */
.sidebar {
    width: 260px;
    flex-shrink: 0;
    border-right: 1px solid var(--line);
    display: flex;
    flex-direction: column;
    background: var(--bg);
    overflow: hidden;
}

.sidebar-content {
    padding: var(--sp-4) var(--sp-3) var(--sp-3);
    overflow-y: auto;
    flex: 1;
}

.sidebar-filters {
    display: flex;
    flex-direction: column;
    gap: 1px;
    margin-bottom: 0.875rem;
}

.filter-item {
    display: grid;
    grid-template-columns: 20px 1fr auto;
    align-items: center;
    gap: 0.625rem;
    width: 100%;
    padding: 0.375rem 0.625rem;
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--radius-md);
    cursor: pointer;
    color: var(--ink-2);
    font-size: var(--text-base);
    text-align: left;
    text-decoration: none;
    transition: background var(--t);
}

.filter-item:hover {
    background: var(--surface-2);
}

.filter-item.active {
    background: var(--accent-soft);
    border-color: color-mix(in oklab, var(--accent) 30%, var(--line));
    color: var(--accent-ink);
}

.filter-item .filter-icon {
    display: grid;
    place-items: center;
    color: var(--ink-3);
}

.filter-item.active .filter-icon {
    color: var(--accent);
}

.filter-item .filter-icon.unread-icon {
    color: var(--unread);
}

.filter-count {
    font-size: var(--text-xs);
    color: var(--ink-3);
    font-weight: 500;
}

.sidebar-section {
    padding: var(--sp-1) 0.625rem var(--sp-2);
    display: flex;
    align-items: center;
    justify-content: space-between;
    color: var(--ink-4);
    font-size: var(--text-2xs);
    text-transform: uppercase;
    letter-spacing: 0.1em;
}

.sidebar-section button {
    background: none;
    border: none;
    cursor: pointer;
    color: var(--ink-4);
    display: grid;
    place-items: center;
    padding: 0;
}

.sidebar-section button:hover {
    color: var(--ink-2);
}

.category-item {
    margin-bottom: 1px;
}

.category-row {
    display: flex;
    align-items: center;
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--radius-md);
    transition: background var(--t);
}

.category-row:hover {
    background: var(--surface-2);
}

.category-row.active {
    background: var(--accent-soft);
    border-color: color-mix(in oklab, var(--accent) 30%, var(--line));
}

.category-toggle {
    width: 22px;
    height: 28px;
    display: grid;
    place-items: center;
    background: none;
    border: none;
    cursor: pointer;
    color: var(--ink-3);
    padding: 0;
    margin-left: var(--sp-1);
    flex-shrink: 0;
}

.category-toggle svg {
    transition: transform 0.12s;
}

.category-item.collapsed .category-toggle svg {
    transform: rotate(-90deg);
}

.category-btn {
    flex: 1;
    display: grid;
    grid-template-columns: 16px 1fr auto;
    align-items: center;
    gap: var(--sp-2);
    background: none;
    border: none;
    cursor: pointer;
    padding: 0.375rem 0.625rem 0.375rem var(--sp-1);
    color: var(--ink-2);
    font-size: var(--text-base);
    text-align: left;
    font-family: inherit;
    text-decoration: none;
    min-width: 0;
}

.category-btn.active {
    color: var(--accent-ink);
}

.category-icon {
    color: var(--ink-3);
}

.category-btn.active .category-icon {
    color: var(--accent);
}

.category-name {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.feeds-list {
    overflow: hidden;
    max-height: 9999px;
    transition: max-height var(--t-med) ease;
}

.category-item.collapsed .feeds-list {
    max-height: 0;
}

.feed-item-link {
    display: grid;
    grid-template-columns: 14px 1fr auto;
    align-items: center;
    gap: var(--sp-2);
    width: 100%;
    padding: 0.3125rem 0.625rem 0.3125rem 1.875rem;
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--radius-md);
    cursor: pointer;
    color: var(--ink-2);
    font-size: var(--text-sm);
    text-decoration: none;
    margin-bottom: 1px;
    transition: background var(--t);
}

.feed-item-link:hover {
    background: var(--surface-2);
}

.feed-item-link.active {
    background: var(--accent-soft);
    border-color: color-mix(in oklab, var(--accent) 30%, var(--line));
    color: var(--accent-ink);
}

.feed-name-text {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    font-weight: 400;
}

.feed-name-text.has-unread {
    font-weight: 600;
}

.count-badge {
    font-size: var(--text-2xs);
    color: var(--ink-3);
    font-weight: 500;
}

.sidebar-add-feed {
    display: flex;
    align-items: center;
    gap: var(--sp-2);
    width: 100%;
    padding: var(--sp-2) 0.625rem;
    margin-top: 0.625rem;
    background: transparent;
    border: 1px dashed var(--line);
    border-radius: var(--radius-md);
    cursor: pointer;
    color: var(--ink-3);
    font-size: var(--text-sm);
    font-family: inherit;
    transition: background var(--t), border-color var(--t), color var(--t);
}

.sidebar-add-feed:hover {
    background: var(--surface-2);
    border-color: var(--line-strong);
    color: var(--ink-2);
}

.sidebar-footer {
    padding: 0.625rem 0.875rem;
    border-top: 1px solid var(--line);
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: var(--text-xs);
    color: var(--ink-4);
    flex-shrink: 0;
    gap: var(--sp-3);
}

/* ---- Source Mark ------------------------------------------ */
.source-mark {
    display: inline-grid;
    place-items: center;
    border-radius: var(--radius-sm);
    color: #0a0f1c;
    font-weight: 700;
    letter-spacing: -0.02em;
    flex-shrink: 0;
    box-shadow: inset 0 1px 0 rgba(255,255,255,.18), 0 1px 0 rgba(0,0,0,.2);
    background: oklch(0.55 0.14 180); /* fallback, JS overrides per-feed */
}

.source-mark-sm {
    width: 13px;
    height: 13px;
    font-size: 7px;
}

.source-mark-md {
    width: 14px;
    height: 14px;
    font-size: 8px;
}

.source-mark-lg {
    width: 18px;
    height: 18px;
    font-size: 10px;
}

.source-mark-xl {
    width: 22px;
    height: 22px;
    font-size: 12px;
    border-radius: var(--radius-md);
}


/* ---- Article List Item ------------------------------------ */
.article-list-item {
    display: grid;
    grid-template-columns: 12px 1fr auto;
    gap: 0.625rem;
    padding: var(--sp-3) var(--sp-4) var(--sp-3) 0.875rem;
    border-left: 3px solid transparent;
    border-bottom: 1px solid var(--line);
    cursor: pointer;
    text-decoration: none;
    color: var(--ink);
    transition: background var(--t);
}

.article-list-item.unread {
    border-left-color: var(--unread);
}

.article-list-item.active {
    border-left-color: var(--accent);
    background: var(--accent-soft);
}

.article-list-item:not(.active):hover {
    background: var(--surface-2);
}

.article-list-item:not(.unread):not(.active) {
    opacity: 0.65;
}

.article-item-dot {
    display: grid;
    place-items: center;
    padding-top: var(--sp-1);
}

.article-item-dot span {
    display: block;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--line-strong);
}

.article-list-item.unread .article-item-dot span {
    background: var(--unread);
}

.article-list-item.active .article-item-dot span {
    background: var(--accent);
}

.article-item-body {
    min-width: 0;
}

.article-item-meta {
    display: flex;
    align-items: center;
    gap: 0.375rem;
    margin-bottom: var(--sp-1);
}

.article-source-name {
    font-size: var(--text-2xs);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--ink-3);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.article-time {
    font-size: var(--text-2xs);
    color: var(--ink-4);
    margin-left: auto;
    flex-shrink: 0;
}

.article-item-title {
    font-size: var(--text-lg);
    font-weight: 500;
    color: var(--ink);
    line-height: 1.35;
    text-wrap: pretty;
}

.article-list-item.unread .article-item-title {
    font-weight: 600;
}

.article-list-item.active .article-item-title {
    color: var(--accent-ink);
}

.article-item-excerpt {
    font-size: var(--text-sm);
    color: var(--ink-3);
    line-height: 1.5;
    margin-top: var(--sp-1);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.article-list-item.active .article-item-excerpt {
    color: color-mix(in oklab, var(--accent-ink) 80%, transparent);
}

.article-star-btn {
    background: none;
    border: none;
    cursor: pointer;
    padding: 2px;
    align-self: start;
    color: var(--ink-4);
    opacity: 0;
    transition: opacity var(--t);
}

.article-list-item:hover .article-star-btn,
.article-list-item.active .article-star-btn,
.article-list-item .article-star-btn.starred {
    opacity: 1;
}

.article-star-btn.starred {
    color: var(--star);
}

/* ---- Article Group Headers -------------------------------- */
.article-group-header {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    padding: 0.625rem clamp(var(--sp-4), 4vw, 1.75rem) 0.375rem;
    background: color-mix(in oklab, var(--bg) 70%, var(--surface-2));
    border-bottom: 1px solid var(--line);
    position: sticky;
    top: 0;
    z-index: 1;
}

.article-group-header.compact {
    padding: var(--sp-2) var(--sp-4) var(--sp-1);
}

.article-group-label {
    font-size: var(--text-2xs);
    text-transform: uppercase;
    letter-spacing: 0.12em;
    color: var(--ink-3);
}

.article-group-line {
    flex: 1;
    height: 1px;
    background: var(--line);
}

.article-group-count {
    font-size: var(--text-2xs);
    color: var(--ink-4);
}

/* ---- Content Column (main pane) -------------------------- */
.content-column {
    flex: 1;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    min-width: 0;
}

/* ---- Page Header ----------------------------------------- */
.page-header {
    padding: var(--sp-6) clamp(var(--sp-4), 4vw, 1.75rem) 0;
}

.page-header-inner {
    display: flex;
    align-items: center;
    gap: var(--sp-3);
    margin-bottom: 0.375rem;
}

.page-title {
    font-size: var(--text-2xl);
    font-weight: 500;
    letter-spacing: -0.015em;
    color: var(--ink);
    line-height: 1.1;
}

.page-title-accent {
    font-size: 1.75rem;
    color: var(--accent);
    margin-left: 1px;
}

.page-subtitle {
    font-size: var(--text-base);
    color: var(--ink-3);
    margin-bottom: var(--sp-2);
    max-width: 560px;
    line-height: 1.5;
}

.unread-badge {
    font-size: var(--text-xs);
    padding: 3px var(--sp-2);
    border-radius: var(--radius-pill);
    background: var(--accent-soft);
    color: var(--accent-ink);
    border: 1px solid color-mix(in oklab, var(--accent) 30%, var(--line));
}

/* ---- Main Content ---------------------------------------- */
.main-content {
    flex: 1;
    overflow-y: auto;
}

/* ---- Controls Bar ---------------------------------------- */
.controls-bar {
    display: flex;
    align-items: center;
    gap: var(--sp-2);
    padding: var(--sp-3) clamp(var(--sp-4), 4vw, 1.75rem);
    border-bottom: 1px solid var(--line);
    flex-shrink: 0;
}

.controls-bar.compact {
    padding: var(--sp-2) var(--sp-4);
}

.sort-btn,
.filter-btn {
    display: flex;
    align-items: center;
    gap: 0.375rem;
    padding: 0.3125rem 0.625rem;
    border-radius: var(--radius-md);
    font-size: var(--text-sm);
}

.filter-btn.active {
    background: var(--accent-soft);
    color: var(--accent-ink);
    border-color: color-mix(in oklab, var(--accent) 30%, var(--line));
}

.controls-spacer {
    flex: 1;
}

/* ---- Mark Read Button ------------------------------------ */
.mark-read-btn {
    display: flex;
    align-items: center;
    gap: 0.375rem;
    padding: 0.3125rem 0.625rem;
    border-radius: var(--radius-md);
    font-size: var(--text-sm);
    position: relative;
    overflow: hidden;
}

.mark-read-btn.animating {
    background: var(--accent);
    color: #1a1208;
    border-color: var(--accent);
}

.mark-read-btn.animating::before {
    content: "";
    position: absolute;
    top: 0;
    width: 200%;
    height: 100%;
    background: repeating-linear-gradient(
        60deg,
        rgba(255,255,255,.3),
        rgba(255,255,255,.3) 10px,
        rgba(255,255,255,.5) 10px,
        rgba(255,255,255,.5) 20px
    );
    z-index: 1;
    animation: markReadStripe 3s infinite linear;
    pointer-events: none;
}

.mark-read-btn.animating span {
    position: relative;
    z-index: 2;
}

/* ---- Sort Dropdown --------------------------------------- */
.sort-dropdown {
    position: relative;
}

.sort-menu {
    position: absolute;
    top: 36px;
    left: 0;
    width: 220px;
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow);
    padding: var(--sp-1);
    z-index: 20;
    display: none;
}

.sort-menu.open {
    display: block;
}

.sort-menu-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    padding: 0.4375rem 0.625rem;
    background: transparent;
    border: none;
    border-radius: var(--radius-md);
    cursor: pointer;
    color: var(--ink);
    font-size: var(--text-base);
    text-align: left;
    font-family: inherit;
    text-decoration: none;
    transition: background var(--t);
}

.sort-menu-item:hover {
    background: var(--surface-2);
}

.sort-menu-item.active {
    background: var(--surface-2);
    color: var(--accent-ink);
}

/* ---- Reader Pane ----------------------------------------- */
.reader-pane {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    background: var(--bg);
    overflow: hidden;
}

.reader-toolbar {
    padding: 0.625rem var(--sp-4);
    border-bottom: 1px solid var(--line);
    display: flex;
    align-items: center;
    gap: var(--sp-2);
    flex-shrink: 0;
}

.reader-nav-btn:disabled {
    opacity: 0.4;
    color: var(--ink-4);
    cursor: not-allowed;
}

.reader-position {
    font-size: var(--text-xs);
    color: var(--ink-3);
    margin-left: var(--sp-1);
}

.reader-toolbar-spacer {
    flex: 1;
}

.reader-icon-btn.starred {
    color: var(--star);
}

.reader-body {
    overflow-y: auto;
    flex: 1;
}

.reader-article {
    max-width: 720px;
    margin: 0 auto;
    padding: var(--sp-9) var(--sp-12) var(--sp-16);
}

.reader-source-strip {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    margin-bottom: 1.125rem;
}

.reader-source-info div:first-child {
    font-size: var(--text-base);
    font-weight: 500;
}

.reader-read-time {
    font-size: var(--text-xs);
    color: var(--ink-3);
    padding: 3px var(--sp-2);
    border: 1px solid var(--line);
    border-radius: var(--radius-pill);
    display: inline-flex;
    align-items: center;
    gap: 0.3125rem;
}

.reader-title {
    font-size: var(--text-3xl);
    font-weight: 600;
    letter-spacing: -0.022em;
    line-height: 1.1;
    margin-bottom: var(--sp-4);
    text-wrap: balance;
    color: var(--ink);
}

.reader-title a {
    color: inherit;
    text-decoration: none;
}

.reader-title a:hover {
    color: var(--accent-ink);
}

.reader-author {
    font-size: var(--text-base);
    color: var(--ink-2);
    margin-bottom: var(--sp-5);
}

.reader-pull-quote {
    font-size: var(--text-xl);
    color: var(--ink-2);
    line-height: 1.5;
    margin-bottom: 1.75rem;
    padding-left: var(--sp-4);
    border-left: 2px solid var(--accent);
    text-wrap: pretty;
}

.reader-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
    margin-bottom: 1.75rem;
}

.tag-chip {
    font-size: var(--text-xs);
    padding: 3px 0.5625rem;
    border-radius: var(--radius-pill);
    background: var(--surface-2);
    border: 1px solid var(--line);
    color: var(--ink-2);
}

.reader-content {
    font-size: var(--text-lg);
    color: var(--ink-2);
    line-height: 1.75;
    text-wrap: pretty;
    word-wrap: break-word;
    overflow-wrap: break-word;
}

.reader-content p {
    margin-bottom: 1rem;
}

.reader-content h1 {
    font-size: 1.8rem;
    margin: 1.75rem 0 0.75rem;
    color: var(--ink);
    line-height: 1.2;
}

.reader-content h2 {
    font-size: 1.4rem;
    margin: 1.5rem 0 0.75rem;
    color: var(--ink);
    line-height: 1.25;
}

.reader-content h3 {
    font-size: 1.2rem;
    margin: 1.25rem 0 0.5rem;
    color: var(--ink);
}

.reader-content h4,
.reader-content h5,
.reader-content h6 {
    font-size: 1rem;
    margin: 1rem 0 0.5rem;
    color: var(--ink);
}

.reader-content ul,
.reader-content ol {
    margin-left: 1.5rem;
    margin-bottom: 1rem;
}

.reader-content li {
    margin-bottom: 0.4rem;
}

.reader-content strong {
    font-weight: 600;
    color: var(--ink);
}

.reader-content a {
    color: var(--accent-ink);
    text-decoration: underline;
    text-decoration-color: color-mix(in oklab, var(--accent) 40%, transparent);
    word-break: break-word;
}

.reader-content a:hover {
    text-decoration-color: var(--accent);
}

.reader-content blockquote {
    border-left: 2px solid var(--accent);
    padding-left: var(--sp-4);
    color: var(--ink-3);
    margin: 1rem 0;
}

.reader-content pre {
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    padding: 1rem;
    overflow-x: auto;
    font-size: 0.9rem;
    margin: 1rem 0;
}

.reader-content code {
    font-family: 'Geist Mono', ui-monospace, monospace;
    font-size: 0.9em;
}

.reader-content pre code {
    font-size: inherit;
}

.reader-content img {
    max-width: 100%;
    height: auto;
    border-radius: var(--radius-md);
    margin: 0.5rem 0;
}

.reader-content iframe {
    max-width: 100%;
    border: none;
    border-radius: var(--radius-md);
}

.reader-content table {
    width: 100%;
    border-collapse: collapse;
    margin: 1rem 0;
    overflow-x: auto;
    display: block;
}

.reader-content table td,
.reader-content table th {
    border: 1px solid var(--line);
    padding: 0.5rem 0.75rem;
    text-align: left;
}

.reader-content table th {
    background: var(--surface);
    font-weight: 600;
    color: var(--ink);
}

.reader-cta {
    margin-top: var(--sp-9);
    padding: var(--sp-4) 1.125rem;
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius-xl);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--sp-3);
}

.reader-cta-info {
    display: flex;
    align-items: center;
    gap: 0.625rem;
}

.reader-cta-btn {
    padding: 0.4375rem var(--sp-3);
    border-radius: var(--radius-lg);
}

.reader-next-teaser {
    display: flex;
    align-items: center;
    gap: var(--sp-3);
    margin-top: 1.75rem;
    padding: 0.875rem var(--sp-4);
    border: 1px dashed var(--line);
    border-radius: var(--radius-xl);
    cursor: pointer;
    text-decoration: none;
    color: var(--ink);
    transition: background var(--t);
}

.reader-next-teaser:hover {
    background: var(--surface-2);
}

.reader-next-eyebrow {
    font-size: var(--text-xs);
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--ink-3);
}

.reader-kbd {
    font-size: var(--text-xs);
    padding: 2px 0.4375rem;
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    color: var(--ink-3);
}

/* ---- Nav Buttons ----------------------------------------- */
.nav-buttons {
    display: flex;
    gap: var(--sp-2);
    align-items: center;
    padding: 0.625rem var(--sp-4);
    border-bottom: 1px solid var(--line);
    flex-shrink: 0;
}

/* ---- Article Action Buttons (.btn-action) ---------------- */
.btn-action {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    height: 28px;
    padding: 0 0.625rem;
    border-radius: var(--radius-md);
    font-size: var(--text-sm);
}

.btn-action.active {
    color: var(--accent-ink);
    background: var(--accent-soft);
    border-color: color-mix(in oklab, var(--accent) 30%, var(--line));
}

/* ---- Empty State ----------------------------------------- */
.empty-state {
    padding: var(--sp-20) 1.75rem;
    text-align: center;
    color: var(--ink-3);
}

.empty-state-icon {
    width: 56px;
    height: 56px;
    margin: 0 auto 1.125rem;
    border-radius: var(--radius-3xl);
    background: var(--surface);
    border: 1px solid var(--line);
    display: grid;
    place-items: center;
}

.empty-state-message {
    font-size: var(--text-lg);
    color: var(--ink-2);
    margin-bottom: 0.375rem;
}

/* ---- Cards (index page) ---------------------------------- */
.page-content {
    padding: var(--sp-4) clamp(var(--sp-4), 4vw, 1.75rem);
}

.card-list {
    display: flex;
    flex-direction: column;
    gap: 0;
}

.card {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: var(--sp-3) var(--sp-4);
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    text-decoration: none;
    color: var(--ink);
    transition: background var(--t);
    margin-bottom: var(--sp-2);
}

.card:hover {
    background: var(--surface-2);
}

.card h2 {
    font-size: var(--text-lg);
    font-weight: 500;
    color: var(--ink);
}

.card-unread {
    font-size: var(--text-xs);
    padding: 2px 0.4375rem;
    border-radius: var(--radius-pill);
    background: var(--accent-soft);
    color: var(--accent-ink);
    border: 1px solid color-mix(in oklab, var(--accent) 30%, var(--line));
}

/* ---- Modal ----------------------------------------------- */
dialog#addFeedModal {
    padding: 2rem;
    border-radius: var(--radius-xl);
    background: var(--surface);
    border: 1px solid var(--line);
    box-shadow: var(--shadow);
    max-width: 500px;
    width: 90%;
    max-height: 90vh;
    overflow-y: auto;
    color: var(--ink);
    margin: auto;
}

dialog#addFeedModal::backdrop {
    background-color: rgba(0,0,0,.5);
}

.modal-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 1.5rem;
    border-bottom: 1px solid var(--line);
    padding-bottom: 1rem;
}

.modal-header h2 {
    font-size: var(--text-lg);
    font-weight: 600;
    color: var(--ink);
    margin: 0;
}

.modal-close {
    background: none;
    border: none;
    cursor: pointer;
    color: var(--ink-3);
    display: grid;
    place-items: center;
    width: 28px;
    height: 28px;
    border-radius: var(--radius-md);
    font-size: 1.125rem;
    line-height: 1;
    transition: background var(--t), color var(--t);
}

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

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

.form-group label {
    display: block;
    margin-bottom: 0.375rem;
    font-size: var(--text-base);
    font-weight: 500;
    color: var(--ink-2);
}

.form-group input,
.form-group select,
.form-group textarea {
    width: 100%;
    padding: var(--sp-2) var(--sp-3);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--surface-2);
    color: var(--ink);
    font-family: inherit;
    font-size: var(--text-base);
    transition: border-color var(--t);
}

.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
    border-color: var(--accent);
    outline: none;
}

.form-group select option {
    background: var(--surface);
}

.modal-message {
    padding: 0.625rem 0.875rem;
    border-radius: var(--radius-md);
    margin-bottom: 1rem;
    font-size: var(--text-base);
    display: none;
}

.modal-message.success {
    background: rgba(0,200,100,.15);
    border: 1px solid rgba(0,200,100,.3);
    color: #4caf7d;
    display: block;
}

.modal-message.error {
    background: rgba(255,80,80,.12);
    border: 1px solid rgba(255,80,80,.25);
    color: #ff6b6b;
    display: block;
}

.modal-actions {
    display: flex;
    gap: var(--sp-2);
    margin-top: 1.5rem;
    justify-content: flex-end;
}

.btn-modal-primary {
    padding: var(--sp-2) var(--sp-4);
    border-radius: var(--radius-md);
}

.btn-modal-secondary {
    background: var(--surface);
    padding: var(--sp-2) var(--sp-4);
    border-radius: var(--radius-md);
    font-size: var(--text-base);
}

/* Legacy modal button compatibility */
.btn-secondary-compact {
    display: inline-block;
    padding: 0.4375rem 0.875rem;
    background: var(--surface-2);
    color: var(--ink-2);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    cursor: pointer;
    text-decoration: none;
    font-size: var(--text-base);
    font-family: inherit;
    transition: background var(--t);
}

.btn-secondary-compact:hover {
    background: var(--surface);
    color: var(--ink);
}

.feeds-detected {
    background: var(--surface-2);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    padding: var(--sp-3);
    margin: var(--sp-3) 0;
}

.feed-option {
    padding: 0.625rem;
    margin: 0.375rem 0;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    cursor: pointer;
    transition: background var(--t);
}

.feed-option:hover {
    background: var(--surface);
}

.feed-option label {
    cursor: pointer;
    display: flex;
    align-items: start;
    gap: 0.625rem;
    margin: 0;
}

.feed-option-info {
    flex: 1;
}

.feed-option-title {
    font-size: var(--text-base);
    font-weight: 500;
    color: var(--ink);
}

.feed-option-url {
    font-size: var(--text-xs);
    color: var(--ink-3);
    word-break: break-all;
    margin-top: 2px;
}

.feed-option-type {
    font-size: var(--text-2xs);
    background: var(--accent-soft);
    color: var(--accent-ink);
    padding: 2px 0.375rem;
    border-radius: 0.1875rem;
    display: inline-block;
    margin-top: var(--sp-1);
}

.feed-option input[type="radio"] {
    margin-top: 2px;
    accent-color: var(--accent);
}

.loading-spinner {
    display: inline-block;
    width: 16px;
    height: 16px;
    border: 2px solid rgba(245,158,59,.3);
    border-top-color: var(--accent);
    border-radius: 50%;
    animation: spin 0.8s linear infinite;
}

/* ---- Notification ---------------------------------------- */
#notification {
    position: fixed;
    top: 20px;
    right: 20px;
    max-width: 400px;
    padding: var(--sp-3) var(--sp-4);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow);
    display: none;
    z-index: 9999;
    animation: slideIn var(--t-slow) ease-out;
    font-size: var(--text-base);
}

#notification.show {
    display: block;
}

#notification.success {
    background: rgba(0,200,100,.15);
    border: 1px solid rgba(0,200,100,.3);
    color: #4caf7d;
}

#notification.error {
    background: rgba(255,80,80,.12);
    border: 1px solid rgba(255,80,80,.25);
    color: #ff6b6b;
}

/* ---- Footer ---------------------------------------------- */
.app-footer {
    border-top: 1px solid var(--line);
    padding: 0.375rem 0.875rem;
    display: flex;
    align-items: center;
    gap: var(--sp-3);
    font-size: var(--text-xs);
    color: var(--ink-4);
    flex-shrink: 0;
    background: var(--bg);
}

.shortcut-hint {
    display: inline-flex;
    align-items: center;
    gap: 0.3125rem;
}

.shortcut-kbd {
    font-size: var(--text-2xs);
    padding: 1px 5px;
    border: 1px solid var(--line);
    border-radius: 0.1875rem;
    color: var(--ink-3);
    background: var(--surface);
}

/* ---- Image Zoom Overlay ---------------------------------- */
.image-zoom-overlay {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,.92);
    z-index: 1000;
    overflow: hidden;
    touch-action: none;
}

.image-zoom-overlay.active {
    display: flex;
    align-items: center;
    justify-content: center;
}

.image-zoom-container {
    position: relative;
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

.image-zoom-container img {
    max-width: none;
    max-height: none;
    min-width: 150%;
    min-height: 150%;
    object-fit: contain;
    cursor: grab;
    user-select: none;
    -webkit-user-select: none;
    -webkit-touch-callout: none;
}

.image-zoom-container img:active {
    cursor: grabbing;
}

.image-zoom-close {
    position: absolute;
    top: 20px;
    right: 20px;
    width: 40px;
    height: 40px;
    background: rgba(255,255,255,.15);
    border: none;
    border-radius: 50%;
    color: white;
    font-size: 1.25rem;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1001;
    transition: background var(--t-med);
}

.image-zoom-close:hover {
    background: rgba(255,255,255,.25);
}

/* ---- Preview Container ----------------------------------- */
.preview-container {
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    padding: 1rem;
    margin: 1rem 0;
    font-size: 0.95rem;
    line-height: 1.75;
    color: var(--ink-2);
}

.preview-container h1 { font-size: 1.8rem; margin: 1.5rem 0 0.75rem; color: var(--ink); }
.preview-container h2 { font-size: 1.4rem; margin: 1.25rem 0 0.6rem; color: var(--ink); }
.preview-container h3 { font-size: 1.2rem; margin: 1rem 0 0.5rem; color: var(--ink); }
.preview-container h4 { font-size: 1rem; margin: 0.75rem 0 0.4rem; color: var(--ink); }

.preview-container p {
    margin: 0.75rem 0;
}

.preview-container img {
    max-width: 100%;
    height: auto;
    margin: 1rem 0;
    border-radius: var(--radius-sm);
}

.preview-container video,
.preview-container iframe {
    max-width: 100%;
    height: auto;
    margin: 1rem 0;
    border-radius: var(--radius-sm);
}

.preview-container a {
    color: var(--accent-ink);
    text-decoration: underline;
    word-break: break-word;
}

.preview-container ul,
.preview-container ol {
    margin-left: 1.5rem;
    margin: 0.75rem 0 0.75rem 1.5rem;
}

.preview-container li {
    margin-bottom: 0.5rem;
}

.preview-container table {
    width: 100%;
    border-collapse: collapse;
    margin: 1rem 0;
    overflow-x: auto;
    display: block;
}

.preview-container table td,
.preview-container table th {
    border: 1px solid var(--line);
    padding: 0.5rem;
}

.preview-container table th {
    background: var(--surface-2);
    font-weight: 600;
    color: var(--ink);
}

.preview-container pre {
    background: color-mix(in oklab, var(--surface-2) 60%, var(--bg));
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    padding: 1rem;
    overflow-x: auto;
    font-size: 0.9rem;
    margin: 1rem 0;
}

.preview-container code {
    font-family: 'Geist Mono', ui-monospace, monospace;
}

.preview-container blockquote {
    border-left: 2px solid var(--accent);
    margin: 1rem 0;
    padding-left: 1rem;
    color: var(--ink-3);
}

/* ---- Article List Container ------------------------------ */
.article-list-container {
    flex: 1;
}

/* ---- Auth Card ------------------------------------------- */
.auth-card {
    max-width: 400px;
    margin: var(--sp-20) auto;
    padding: var(--sp-8);
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius-2xl);
    box-shadow: var(--shadow);
}

.auth-title {
    font-size: var(--text-2xl);
    font-weight: 600;
    margin-bottom: var(--sp-6);
    text-align: center;
    color: var(--ink);
}

/* ---- Loading / Spinner ----------------------------------- */
.loading {
    text-align: center;
    padding: 2rem;
    color: var(--ink-3);
}

.spinner {
    border: 2px solid var(--line);
    border-top-color: var(--accent);
    border-radius: 50%;
    width: 28px;
    height: 28px;
    animation: spin 0.8s linear infinite;
    margin: 0 auto 1rem;
}

/* ---- Mobile sidebar toggle ------------------------------- */
.sidebar-toggle-checkbox {
    display: none;
}

.sidebar-overlay {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,.5);
    z-index: 99;
}

.sidebar-toggle-label {
    display: none;
    width: 32px;
    height: 32px;
    border-radius: var(--radius-lg);
    border: 1px solid var(--line);
    color: var(--ink-2);
    cursor: pointer;
    flex-shrink: 0;
    align-items: center;
    justify-content: center;
}

/* ---- Responsive ------------------------------------------ */

/* Desktop >= 1200px */
@media (min-width: 1200px) {
    .layout-wrapper {
        flex-direction: row;
    }
}

/* Mobile < 768px */
@media (max-width: 767px) {
    body {
        flex-direction: column;
    }

    .topbar-brand {
        width: auto;
        border-right: none;
    }

    .topbar-search {
        display: none;
    }

    .topbar-refresh {
        display: none;
    }

    .brand-badge {
        display: none;
    }

    .sidebar {
        position: fixed;
        left: -280px;
        top: 0;
        width: 280px;
        height: 100vh;
        z-index: 100;
        border-right: 1px solid var(--line-strong);
        transition: left 0.25s ease;
    }

    #sidebar-toggle-checkbox:checked ~ .app-container .sidebar {
        left: 0;
    }

    #sidebar-toggle-checkbox:checked ~ .sidebar-overlay {
        display: block !important;
        pointer-events: auto;
    }

    .sidebar-toggle-label {
        display: flex;
    }

    .app-footer {
        display: none;
    }

    .reader-article {
        padding: var(--sp-5) var(--sp-4) var(--sp-12);
    }

    .reader-title {
        font-size: 1.375rem;
    }

    .reader-content {
        font-size: 0.9375rem;
    }

    .article-list-item {
        padding: 0.625rem 0.875rem 0.625rem var(--sp-3);
    }

    .controls-bar .btn-label,
    .mark-read-btn span {
        display: none;
    }
}

/* Touch devices: clickable images */
@media (hover: none) {
    .reader-content img,
    .preview-container img {
        cursor: pointer;
        transition: opacity var(--t-med);
    }

    .reader-content img:active,
    .preview-container img:active {
        opacity: 0.8;
    }
}
