@font-face {
  font-family: 'Proxima Nova';
  src: url(data:font/ttf;base64,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AykATgLEAE4C/QAzAksATgL9ADMCYABOAkoAJgI6ACACvABOApIACQNzAA4CjAAMAnIACQJJADACDwAwAj8ALwI/AEsB7wAvAj8ALwIzAC8BGwAQARsAEAI+AC8CKABLAOEAPgDh/9ICAgBLAOEASwEMAEsDKABLAicASwI8AC8CPgBLAj4ALwFKAEsB0QAhASYACgInAEsB6gADAt4ADAHmAAwB6gADAicARgHYADQCPAAHAioASwJGAC8CZwBLAf0ASwHrAEsCcgAvAoIALwJ7AEsA5QBLAaYACAIWAEsBygBLAs8ASwJ4AEsClgAvAgoASwKWAC8CIQBLAfgAIAHYABoCbwBLAjwABwL8AAoCNwAJAiMABwIEACcDWgAQAjYAEANDABAB/AAQAfwAEAMdABAB/AAQAicAEAMXABADFwAQAxcAEANCABAA4QA+AOUARADiAAAAAP+SAoEAJAIsABsCTgAWAfAAFgMPACMC2wAfAlAAGgD4ACwA+AARAPgALAD4ABEA8wAoAPMAEQDzACgA8wARAQQABQEEABEBBAAFAQQAEQFUACIA5gA8ArIAPADmADwA5gA5AOYAOQDmADwA5gA8Ac4AEgGMAAoBVwA2AMcANgGGADYBhgA5AOYALwDmADkBLAAeASwAHgJRAB4CUQAeA0EAHgNBAB4A5gA8AOYAPAJRACoB+AAgASgAAAEoAAABsAATAjT//QDTAE4B8wAdAfMAHQHzAB0B8wAdAMsAIgFmACIBegApAZoAKAGOADwBjgA8AZUAKADwADwBSgAbAM4ACQGEACEA6wAOAYQAMQGEACoBhAAnAYQALAGEACYBagAhAYQAKQGEACYAoQAaAKEAFwCLABwBcgAYALcAEgCOACEBhAAhAOsADgGEADEBhAAqAYQAJwGEACwBhAAmAWoAIQGEACkBhAAmAKEAGgChABcAiwAcAXIAGAC3ABIAjgAhAYQAIQDrAA4BhAAxAYQAKgGEACcBhAAsAYQAJgFqACEBhAApAYQAJgCK/1QBhAAhAOsADgGEADEBhAAqAYQAJwGEACwBhAAmAWoAIQGEACkBhAAmArcAMgABAAADmP7WAAAEnv6c/1QEcAABAAAAAAAAAAAAAAAAAAABCgADAi4BkAAFAAgCigJYAAAASwKKAlgAAAFeADYBIQAAAgAFBgMAAAIABAAA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AAABBQAGAAEADwAAAQYABgABABcAAAEHAAAAAQAHAAAAAQAGAAAAAQATAAAAAQAWABkANABqAEgAagCMAMAA1AECAVQDkAP2BFYEagR+BJIEqATCBUIFpgYQBloGpAbeBvgHDAABAAAAAQAIAAEABgA7AAEAAQBVAAEAAAABAAgAAgG4AAoA/wEAAQEBAgEDAQQBBQEGAQcBCAABAAAAAQAIAAIBlgAKAPQA9QD2APcA+AD5APoA+wD8AP0ABgAAAAEACAADAAEAEgABACIAAAABAAAAGAACAAIAwQDBAAAA/gEIAAEAAgABAPQA/QAAAAEAAAABAAgAAQAGAD0AAQABAMEAAQAAAAEACAACAFQAEADUANUA1gDXANgA2QDaANsA3ADdAN4A3wDjAOAA4gDhAAEAAAABAAgAAgAmABAA5ADlAOYA5wDoAOkA6gDrAOwA7QDuAO8A8wDwAPIA8QABABAAAwAFAAYABwAIAAkACgALAAwADQCbAJwAqACrALcAvwAGAAAAFQAwAEIAVABoAIgAngDEANYA8AEKARoBLAE+AVgBeAGIAZoBsgHMAfICDAADAAEAhAABAuAAAAABAAAAGAADAAEAcgABAEAAAAABAAAAGAADAAIAKABgAAECvAAAAAEAAAAYAAMAAgAUAEwAAQAaAAAAAQAAABgAAQABAKgAAQABAFwAAwACACwBJAABAX4AAQGuAAEAAAAYAAMAAwGCABYBDgABAZgAAAABAAAAGAACAAIAAwADAAAABQANAAEAAwACAOgA6AABACYAAQFCAAAAAwABANYAAQAUAAEBMAABAAAAGAABAAEAYAADAAIAFAC8AAEBFgAAAAEAAAAYAAEAAQDSAAMAAgBoAKIAAQDiAAAAAAADAAEAWAABANIAAAABAAAAGAADAAIARgCAAAEAJgABAMAAAAADAAEANAABABQAAQCuAAEAAAAYAAEAAQBbAAMAAgAUABoAAQCUAAAAAQAAABgAAQABAM8AAQABAAYAAwACAG4ANAABAHQAAAAAAAMAAQBeAAEAZAAAAAEAAAAYAAMAAgBMABIAAQAsAAEAUgAAAAEAAQAFAAMAAQA0AAEAFAABADoAAQAAABgAAQABAF8AAwACABQAGgABACAAAAABAAAAGAABAAEA0QABAAEABwABAAEATwADAAEANAABABQAAQBEAAEAAAAYAAEAAQBhAAMAAgAUABoAAQAqAAAAAQAAABgAAQABANMAAgACAAMAAwAAAAgADQABAAEAAQBUAAEAAAABAAgAAgBCAB4AaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAewB8AH0AfgB/AIAAgQCCAIMAlQCuALAAAgAEADAASgAAAJQAlAAbAK0ArQAcAK8ArwAdAAEAAAABAAgAAgBCAB4AaQBpAGoAawBsAG0AbgBvAHEAcgBzAHQAdQB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgACBAIIAggCDAJEAAgADAEsAUQAAAFMAaAAHAJAAkAAdAAEAAAABAAgAAQAGAAEAAQABAEsAAQAAAAEACAABAAYAAQABAAEAWAABAAAAAQAIAAEABgABAAEAAQBmAAEAAAABAAgAAQAGAAEAAQACADYAbwABAAAAAQAIAAIACgACAMsAygABAAIAsQCyAAQAAAABAAgAAQByAAEACAAMABoAIgAqADIAOgBAAEYATABSAFgAXgBkAIwAAwBRAFUAjQADAFEAVgCOAAMAUQBYAI8AAwBRAFkAhAACAE0AhQACAFEAhgACAFQAhwACAFUAiAACAFYAiQACAFcAigACAFgAiwACAFkAAQABAFEAAQAAAAEACAACADQAFwAOABAAEgATABQAFQAWABcAGAAZAAMABQAGAAcACAAJAAoACwAMAA0AlgCZAL8AAgAGABoAGgAAABwAJQABACcALwALAJcAlwAUAJoAmgAVAMAAwAAWAAEAAAABAAgAAgA0ABcAJQAnACgAKQAqACsALAAtAC4ALwAaABwAHQAeAB8AIAAhACIAIwAkAJcAmgDAAAIABwADAAMAAAAFAA4AAQAQABAACwASABkADACWAJYAFACZAJkAFQC/AL8AFgABAAAAAQAIAAIAMgAWAA4ADwAQABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAAgACAAMADQAAACUALwALAAEAAAABAAgAAgAyABYAAwAEAAUABgAHAAgACQAKAAsADAANACUAJgAnACgAKQAqACsALAAtAC4ALwACAAIADgAQAAAAEgAkAAMAAQAAAAEACAACABoACgCdAJ4AoQCiAKUApgC4ALoAvAC+AAEACgCbAJwAnwCgAKMApAC3ALkAuwC9AAEAAAABAAgAAQAGAAEAAQAEAAMADgAaACUAAQAAAAEACAABAAYAAQABAAEAEAABAAAAAQAIAAIAKgASAMwAzQDOAM8A0ADRANIA0wD/AQABAQECAQMBBAEFAQYBBwEIAAEAEgBLAE8AVABbAFwAXwBgAGEA9AD1APYA9wD4APkA+gD7APwA/QAA) format('truetype');
  font-weight: 400;
  font-style: normal;
}
@font-face {
  font-family: 'Proxima Nova';
  src: url(data:font/ttf;base64,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) format('truetype');
  font-weight: 700;
  font-style: normal;
}
  :root { --grad-purple: #8000FF; --grad-pink: #E000FF; --charcoal: #2B262E; }
  /* Belt-and-suspenders alongside the viewport meta tag's user-scalable=no: pan-x pan-y
     allows normal scrolling/panning but excludes pinch-zoom specifically. Harmless on
     desktop since touch-action only governs touch input, which desktop pointer/keyboard
     zoom doesn't use. */
  html, body { touch-action: pan-x pan-y; }
  [data-theme="light"] { --bg: #FAF2F6; --card: #FEF9FF; --ink: #1A1A1A; --muted: #6B6B6B; --header-content: var(--ink); --icon-grad-start: #E000FF; --icon-grad-end: #8000FF; --reciprocal-ink: #2B262E; --switch-off: #D6D1DC; }
  [data-theme="dark"]  { --bg: #2B262E; --card: #37313A; --ink: #F0F0F0; --muted: #A8A5A9; --header-content: var(--ink); --icon-grad-start: #EF75FF; --icon-grad-end: #9429FF; --reciprocal-ink: #FEF9FF; --switch-off: #55505A; }
  /* Theme toggle fades rather than blinks: data-theme flips instantly (it's just an
     attribute), and none of the many elements reading --bg/--ink/etc via inline styles
     or classes had any transition of their own to animate that change, so every one of
     them snapped straight to the new color. A universal transition catches all of them,
     inline-styled or not, without having to hunt down every single usage. Elements with
     their own more specific transition (e.g. icon hover scale) simply keep that instead -
     harmless, since those are small icons rather than the large blinking areas this fixes. */
  *, *::before, *::after {
    transition: background-color 0.35s ease, border-color 0.35s ease, color 0.35s ease, stop-color 0.35s ease, box-shadow 0.35s ease;
  }
  * { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
  html, body { height: 100%; overscroll-behavior-y: contain; }
  body {
    margin: 0;
    background: #ECE7F0;
    font-family: 'Proxima Nova', -apple-system, "Roboto", "Segoe UI", system-ui, sans-serif;
  }
  /* On phones this fills the real viewport edge to edge. On wider screens it becomes a
     centered column instead of stretching a phone-shaped app across the whole window. */
  .app-shell {
    width: 100%; height: calc(var(--vh, 1vh) * 100);
    margin: 0 auto;
    background: var(--bg);
    display: flex; flex-direction: column;
    position: relative; overflow: hidden;
  }
  .screen { width: 100%; height: 100%; background: var(--bg); overflow: hidden;
    display: flex; flex-direction: column; position: relative; }
  .views-wrapper { position: relative; flex: 1; min-height: 0; overflow: hidden; }
  /* Global, not scoped to desktop - .views-wrapper still occupies its own box (and, on
     mobile, was intercepting clicks) even with everything inside it individually hidden,
     since a wrapper claiming layout space is a separate thing from its children being
     display:none. This has to disappear entirely whenever login is showing, on every
     viewport, not just desktop - a mobile-only @media block here was the actual bug. */
  body.login-active .views-wrapper { display: none; }
  #mainView, #savedView, #likedView, #hashtagView, #detailView, #settingsView, #aboutView, #loginView { position: absolute; inset: 0; height: 100%; min-height: 0; }
  #sharedHeader { position: absolute; top: 0; left: 0; right: 0; z-index: 25; }
  #sharedHeader::before {
    /* No backdrop-filter here deliberately: .header (this same element) has an opaque
       background and overflow:hidden, so blurring "what's behind it" is a no-op - the only
       visible effect was ever the darkening tint. Two adjacent elements each running their
       own backdrop-filter blur was producing a visible seam right at the boundary where the
       header ends and the content below's own (separately blurred) scrim begins; dropping
       the blur here removes that boundary mismatch at the source instead of trying to
       overlap around it (which .header's overflow:hidden would clip anyway). */
    content: ''; position: absolute; inset: 0; z-index: 1;
    background: rgba(0,0,0,0.35);
    opacity: 0; pointer-events: none;
    transition: opacity 0.22s ease;
  }
  #sharedHeader.menu-dimmed::before { opacity: 1; }
  .view-content { height: 100%; min-height: 0; display: flex; flex-direction: column; padding-top: var(--header-height, 79px); }

  /* Shared-axis depth transitions - going deeper into the app (forward) vs coming back out
     (backward). Both views overlap during the transition (see position:absolute above), then
     the outgoing one gets display:none once it finishes. */
  .view-exiting { transition: transform 0.32s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.13s cubic-bezier(0.4, 0, 1, 1); }
  .view-entering { transition: transform 0.32s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.19s cubic-bezier(0, 0, 0.2, 1) 0.13s; }
  .view-enter-forward { opacity: 0; transform: scale(0.94); z-index: 2; }
  .view-exit-forward { opacity: 0; transform: scale(1.06); z-index: 1; }
  .view-enter-backward { opacity: 0; transform: scale(1.06); z-index: 1; }
  .view-exit-backward { opacity: 0; transform: scale(0.94); z-index: 2; }
  .header { background: var(--bg); flex-shrink: 0; overflow: hidden; position: relative; }
  .header:has(.dropdown.open) { overflow: visible; }
  .appbar { display: flex; align-items: center; padding: 18px 4px; gap: 4px; position: relative; }
  .appbar-side { min-width: 90px; display: flex; align-items: center; flex-shrink: 0; margin-left: 8px; margin-right: 12px; }
  .appbar-side.chevrons { padding-top: 3px; }
  .appbar-side.right { justify-content: flex-end; gap: 4px; }
  .appbar-center { flex: 1; position: relative; height: 48px; }
  .appbar-logo {
    position: absolute; inset: 0; display: flex; justify-content: center; align-items: center;
    opacity: 1; transform: scale(1); pointer-events: auto; cursor: pointer;
    transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
  }
  .appbar-logo.hidden-for-search { opacity: 0; transform: scale(0.9); pointer-events: none; }
  .appbar-logo img { height: 28px; }
  .appbar-search {
    position: absolute; top: 0; bottom: 0; left: -20px; right: -20px; display: flex; align-items: center;
    opacity: 0; transform: scale(0.9); pointer-events: none;
    transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    background: var(--card); border-radius: 24px; box-shadow: 0 1px 3px rgba(0,0,0,0.15);
  }
  .appbar-search.active { opacity: 1; transform: scale(1); pointer-events: auto; }
  .search-input {
    width: 100%; height: 100%; border: none; outline: none; background: transparent; color: var(--ink);
    font-size: 15px; font-family: inherit; padding: 0 44px 0 52px; }
  input::placeholder {
    color: #d4cdd5;
    opacity: 1; /* Ensures Firefox displays the full color */	
  }
  .search-clear-btn {
    position: absolute; right: 14px; top: 50%; transform: translateY(-50%);
    width: 26px; height: 26px; display: none; align-items: center; justify-content: center;
    background: none; border: none; cursor: pointer; padding: 0; -webkit-tap-highlight-color: transparent;
  }
  .search-clear-btn.visible { display: flex; }
  #searchToggleBtn {
    transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1), top 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    z-index: 5;
  }
  .logo-light, .logo-dark { display: block; margin-left: auto; margin-right: auto; }
  .logo-dark { display: none; }
  [data-theme="dark"] .logo-light { display: none; }
  [data-theme="dark"] .logo-dark { display: block; }
  .icon-btn { background: none; border: none; color: var(--header-content); cursor: pointer; padding: 8px;
    display: flex; align-items: center; justify-content: center; border-radius: 50%; }
  .menu-btn { position: relative; z-index: 20; }
  @media (hover: hover) and (pointer: fine) {
    .icon-btn:hover { background: rgba(255,255,255,0.15); }
    .dropdown-item:hover { background: rgba(128,128,128,0.15); }
  }
  .icon-btn svg { width: 25px; height: 28px; }
  .menu-btn svg { width: 27px; height: 27px; }
  /* Desktop-detail-view-only feature (see updateSharedHeaderForView in app.js, which
     already checks isDesktopLayout() before ever showing this) - this is a hard backstop
     on top of that, not a duplicate of it: scoped to mobile widths specifically, so it
     can never conflict with the desktop media query's own handling of this element, but
     guarantees these buttons stay hidden on mobile even in a resize/timing edge case the
     JS check might not catch (a window resized across the desktop breakpoint without
     re-triggering that check, for instance). */
  @media (max-width: 549px) {
    #headerDetailChevrons { display: none !important; }
  }
  /* Matches the menu button's own deliberately-larger icon size - both buttons already
     sit at an identical 4px offset from their respective screen edges (confirmed by
     direct measurement), but the back arrow's icon was smaller (22px vs 27px) inside
     that same offset, which is what actually read as sitting further from the edge even
     though the outer button box wasn't. */
  #sharedBackSlot .icon-btn svg { width: 27px; height: 27px; }
  .menu-dot { transition: y 0.25s cubic-bezier(0.4, 0, 0.2, 1), height 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s ease; transform-origin: 12px 12px; }
  .menu-btn.open .menu-dot-top { y: 2.5px; height: 19px; transform: rotate(45deg); }
  .menu-btn.open .menu-dot-mid { transform: scale(0); opacity: 0; }
  .menu-btn.open .menu-dot-bottom { y: 2.5px; height: 19px; transform: rotate(-45deg); }
  .dropdown { position: absolute; top: calc(100% - 15px); right: 11px; background: var(--card); color: var(--ink);
    border-radius: 12px; box-shadow: 0 8px 24px rgba(0,0,0,0.25); min-width: 210px; overflow: hidden; z-index: 20; display: none;
    transform-origin: top right; }
  .dropdown.open { display: block; }
  .dropdown.animating { transition: transform 0.26s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.2s ease; }
  .dropdown.collapsed { transform: scale(0.25); opacity: 0; }
  .dropdown-scrim {
    position: absolute; inset: 0; z-index: 9;
    background: rgba(0,0,0,0.35);
    backdrop-filter: blur(2px); -webkit-backdrop-filter: blur(2px);
    opacity: 0; pointer-events: none;
    transition: opacity 0.22s ease;
  }
  .dropdown-scrim.open { opacity: 1; pointer-events: auto; }
  .dropdown-item { padding: 15px 20px; font-size: 15px; font-weight: 600; cursor: pointer; display: flex; align-items: center; gap: 13px; }
  .dropdown-item svg { width: 21px; height: 21px; flex-shrink: 0; }
  .list { flex: 1; min-height: 0; overflow-y: auto; padding: 0 14px calc(20px + var(--bottombar-height, 56px) + 50px + env(safe-area-inset-bottom, 0px)); }

  .bottom-bar {
    /* Shifted up by the ad's own fixed height (matching .ad-slot-mobile-bottom's height
       below exactly) rather than sitting at the true bottom:0 anymore - the ad slot is
       what occupies that true bottom edge now, always visible, never collapsing. This bar
       keeps its existing collapse-on-scroll behavior, just via a different mechanic now:
       it slides down (transform, see setupBottomBarCollapse in app.js) rather than
       shrinking its own height, and z-index 15 (below the ad's 16) means that slide goes
       behind the always-visible ad rather than briefly overlapping/covering it partway
       through the animation, which is what looked like the bar "blocking" the ad. */
    position: absolute; bottom: calc(50px + env(safe-area-inset-bottom, 0px)); left: 0; right: 0; z-index: 15;
    background: var(--bg);
    box-shadow: 0 -2px 8px rgba(0,0,0,0.08);
  }
  .bottom-bar-inner {
    position: relative;
    display: flex; align-items: center; justify-content: center; gap: 20px;
    /* No longer adds env(safe-area-inset-bottom) here - that clearance is the ad slot's
       own responsibility now (see .ad-slot-mobile-bottom below), since this bar itself no
       longer sits at the screen's true bottom edge. */
    padding: 16px 20px 16px 20px;
  }
  .bottombar-btn {
    background: none; border: none; padding: 6px; cursor: pointer;
    display: flex; align-items: center; justify-content: center;
    min-height: 0; position: relative;
    -webkit-tap-highlight-color: transparent;
  }
  .bottombar-indicator {
    position: absolute;
    top: 0;
    height: 3px;
    border-radius: 0;
    background: var(--ink);
    transition: left 0.25s cubic-bezier(0.4, 0, 0.2, 1), width 0.25s cubic-bezier(0.4, 0, 0.2, 1);
  }
  .bottombar-icon { width: 20px; height: 20px; min-height: 0; flex-shrink: 0; }
  .bottombar-icon path, .bottombar-icon rect { transition: fill 0.2s ease; }
  .bottombar-btn[data-platform=""] .bottombar-icon rect { fill: url(#gradBottomAll); }
  .bottombar-btn[data-platform="reddit"] .bottombar-icon path { fill: url(#gradBottomReddit); }
  .bottombar-btn[data-platform="youtube"] .bottombar-icon path { fill: url(#gradBottomYoutube); }
  .bottombar-btn[data-platform="x"] .bottombar-icon path { fill: url(#gradBottomX); }
  .bottombar-btn[data-platform="instagram"] .bottombar-icon path { fill: url(#gradBottomInstagram); }
  .bottombar-btn[data-platform="facebook"] .bottombar-icon path { fill: url(#gradBottomFacebook); }
  .bottombar-btn[data-platform="tiktok"] .bottombar-icon path { fill: url(#gradBottomTiktok); }
  .bottombar-btn.active .bottombar-icon path, .bottombar-btn.active .bottombar-icon rect { fill: var(--ink); }
  /* Shared placeholder look for every ad slot below, until real AdSense units replace them -
     dashed border and muted text make it visually obvious this is scaffolding, not a bug,
     while still reserving the correct final size so layout doesn't shift once real ads load. */
  .ad-placeholder {
    width: 100%; height: 100%;
    display: flex; align-items: center; justify-content: center;
    border: 1px dashed var(--muted); border-radius: 8px;
    color: var(--muted); font-size: 12px; text-align: center; padding: 4px;
    box-sizing: border-box;
  }
  .ad-slot-mobile-bottom {
    /* Always visible, fixed at the screen's true bottom edge - deliberately never
       collapses/hides the way .bottom-bar above it does, since an ad that disappears on
       scroll defeats the point of showing it in the first place. Its own height includes
       env(safe-area-inset-bottom) directly, since it - not .bottom-bar anymore - is what
       actually needs to clear a phone's home indicator now. */
    position: absolute; bottom: 0; left: 0; right: 0; z-index: 16;
    height: calc(50px + env(safe-area-inset-bottom, 0px));
    padding: 4px 14px calc(4px + env(safe-area-inset-bottom, 0px)) 14px;
    box-sizing: border-box;
    display: flex; align-items: center; justify-content: center;
    background: var(--bg);
  }
  /* Login screen top banner - unlike the other ad slots, this one appears on both mobile
     and desktop (the login screen itself isn't split into separate templates the way the
     rest of the app is), so it's responsive by default here rather than following the
     mobile/desktop split pattern used elsewhere. Base size fits comfortably above the
     login form on a narrow phone screen; the desktop override further down sizes it up
     to match the same 728x90 leaderboard size used for the main app's own desktop top
     banner. */
  .ad-slot-login-top {
    width: 100%; max-width: 728px; height: 50px; flex-shrink: 0;
    margin: 50px auto 16px;
    display: flex; align-items: center; justify-content: center;
  }
  .settings-body { flex: 1; min-height: 0; overflow-y: auto; padding: 10px 14px 20px; }
  .list { display: flex; flex-direction: column; gap: 18px; }
  /* Mobile only (reset back to 0 in the desktop override below) - the base .list padding
     has no top inset at all, so the first card sat flush against the header above it. */
  .list > *:first-child { margin-top: 3px; }
  .card { display: flex; align-items: stretch; height: 132px; flex-shrink: 0; background: var(--card); border-radius: 20px; overflow: hidden;
    box-shadow: 0 1px 2px rgba(0,0,0,0.08), 0 4px 10px rgba(0,0,0,0.10); transition: box-shadow 0.15s ease, transform 0.1s ease; }
  [data-theme="light"] .card { box-shadow: 0 1px 3px 0 rgba(60,64,67,0.20), 0 2px 3px 1px rgba(60,64,67,0.10); }
  .card:active { box-shadow: 0 1px 2px rgba(0,0,0,0.10); transform: scale(0.99); }
  /* Applied to a card only on the exact paintList() call where it's genuinely new (see
     lastPaintedCount's own doc comment in app.js) - slides up and fades in rather than the
     instant, jarring "pop" a plain innerHTML swap gives new DOM nodes by default. `both`
     fill mode holds the 0%-keyframe state (invisible, offset) for the brief instant before
     the animation actually starts, so there's no single-frame flash of the full, final
     card before the animation takes over. */
  @keyframes card-enter-anim {
    from { opacity: 0; transform: translateY(24px); }
    to { opacity: 1; transform: translateY(0); }
  }
  .card-entering { animation: card-enter-anim 0.45s cubic-bezier(0.2, 0.8, 0.2, 1) both; }
  /* Loading placeholder shown at the bottom of the feed while more posts are being fetched
     - reuses .card/.comfort-card directly (added alongside that class, not instead of it)
     so it automatically matches the real card's exact size/shape/radius with no separate
     dimensions to keep in sync as those change. The shimmer itself is a soft light band
     sweeping left-to-right on a loop, the standard "content is coming" pattern, rather than
     a spinner or bare text, which gives no sense of *where* on the page something is about
     to appear. */
  .skeleton-card { background: var(--card); position: relative; overflow: hidden; cursor: default; }
  /* Shown briefly inside .detail-image while activateVideoEmbed()'s own async oEmbed fetch
     is in flight (Reddit/Instagram only - YouTube/TikTok resolve their iframe synchronously
     with no wait at all) - reuses the exact same shimmer sweep as the feed's own loading
     skeletons above, just filling this specific container's size instead of a whole card's. */
  .embed-loading { position: absolute; inset: 0; background: var(--card); overflow: hidden; }
  .skeleton-shimmer {
    position: absolute; inset: 0;
    background: linear-gradient(90deg, transparent, rgba(255,255,255,0.35), transparent);
    background-size: 200% 100%;
    animation: skeleton-wipe 1.4s ease-in-out infinite;
  }
  [data-theme="dark"] .skeleton-shimmer { background: linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent); background-size: 200% 100%; }
  @keyframes skeleton-wipe {
    0% { background-position: 150% 0; }
    100% { background-position: -50% 0; }
  }

  /* In-feed ad, sized to match its surroundings so it scrolls past like a natural part of
     the feed rather than a foreign element - the compact (non-comfort) variant matches
     .card's own fixed 132px height and rounded-rect look exactly; the .comfort variant
     (added further below, near .comfort-card) approximates that wider card's own total
     footprint instead, since .comfort-card itself has no fixed height of its own to match
     (it's sized by its thumb's aspect-ratio plus its text content, which varies per post). */
  .in-feed-ad-slot {
    width: 100%; height: 132px; flex-shrink: 0;
    background: var(--card); border-radius: 20px; overflow: hidden;
    box-shadow: 0 1px 2px rgba(0,0,0,0.08), 0 4px 10px rgba(0,0,0,0.10);
  }
  [data-theme="light"] .in-feed-ad-slot { box-shadow: 0 1px 3px 0 rgba(60,64,67,0.20), 0 2px 3px 1px rgba(60,64,67,0.10); }
  .thumb { width: 136px; flex-shrink: 0; height: 100%; background-size: cover; background-position: center; border-radius: 20px; position: relative; overflow: hidden; }
  /* A separate layer for the actual background image/color, instead of putting it
     directly on .thumb/.comfort-thumb/.tile themselves - those containers also hold the
     icon and NSFW/video/carousel badge as real children, and CSS filter (used for the
     NSFW blur) applies to an element's entire rendered output INCLUDING its children, not
     just its own background. Blurring this layer alone keeps the badge sitting on top of
     it sharp and legible. */
  .thumb-bg { position: absolute; inset: 0; background-size: cover; background-position: center; border-radius: 20px; }
  /* Fully covers thumb-bg rather than sitting on top of it semi-transparently - a
     text-only post's title rendered here needs to read clearly regardless of whichever
     platform color would otherwise show through underneath. Light mode: white background,
     black text. Dark mode inverts to black background, white text - see the dark-mode
     overrides further down. */
  .thumb-text-fallback {
    position: absolute; inset: 0; background: #FAF2F6;
    display: flex; align-items: center; padding: 12px; box-sizing: border-box;
  }
  .thumb-text-fallback-content {
    display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical;
    overflow: hidden; color: #111; font-weight: 800; font-size: 13px; line-height: 1.4;
  }
  /* .comfort-thumb is a much bigger box than .thumb (full card width, 16:9) - the same
     13px that reads fine on the compact card looked lost/tiny in that much extra space. */
  .comfort-thumb .thumb-text-fallback-content { font-size: 22px; -webkit-line-clamp: 4; }
  /* Roughly the first half of the title, called out in the app's own pink-purple gradient -
     box-decoration-break makes each line-fragment of the highlight get its own matching
     rounded corners when the highlighted words wrap across more than one line, instead of
     one fragment's corners looking cut off where the line breaks. Text color here is the
     inverse of whatever thumb-text-fallback-content is using in the current theme, so the
     highlight always reads clearly against the gradient regardless of mode - white text on
     it in light mode (where the surrounding text is black), black text on it in dark mode
     (where the surrounding text is white). */
  .thumb-text-highlight {
    background: linear-gradient(135deg, var(--grad-purple), var(--grad-pink));
    color: #fff;
    padding: 1px 4px;
    border-radius: 0; /* deliberately square, breaking from the pill shape used everywhere else */
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
  }
  /* Matches the larger comfort-thumb font-size above - the same 1px/4px padding that looks
     right at 13px would look cramped and too tight around 22px text. */
  .comfort-thumb .thumb-text-highlight { padding: 2px 6px; }
  [data-theme="dark"] .thumb-text-fallback { background: #1a0521; }
  [data-theme="dark"] .thumb-text-fallback-content { color: #faf2f6; }
  [data-theme="dark"] .thumb-text-highlight { color: #1a0521; }
  .media-badge {
    position: absolute; top: 5px; right: 5px; background: rgba(0,0,0,0.18);
    border-radius: 11px; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center;
  }
  /* Text, not an icon, so it needs real width instead of the fixed circle above - and
     more opaque than the plain icon badges, since white text needs more contrast to stay
     legible over a blurred thumbnail than a simple shape does. */
  .media-badge-nsfw {
    width: auto; padding: 0 7px; background: rgba(0,0,0,0.6);
    font-size: 9px; font-weight: 800; letter-spacing: 0.3px; color: white;
  }

  .comfort-card { display: flex; flex-direction: column; flex-shrink: 0; background: var(--card); border-radius: 20px; overflow: hidden;
    box-shadow: 0 1px 2px rgba(0,0,0,0.08), 0 4px 10px rgba(0,0,0,0.10); }
  /* Approximates .comfort-card's own total footprint (16:9 thumb + text content + actions
     row) as one fixed height, since that card itself has no single fixed height of its own
     to copy - it's sized by its thumb's aspect-ratio plus whatever its text content and
     actions row need, which varies per post. 250px is a reasonable middle-ground estimate
     of that combined height at typical content lengths. */
  .in-feed-ad-slot.comfort { height: 250px; }
  .comfort-thumb { width: 100%; aspect-ratio: 16/9; background-size: cover; background-position: center; position: relative;
    display: flex; align-items: center; justify-content: center; }
  .comfort-thumb svg { width: 44px; height: 44px; opacity: 0.5; }
  .comfort-content { padding: 14px; cursor: pointer; position: relative; }
  .comfort-content .title { font-size: 14px; font-weight: 700; margin: 8px 0 0; }
  .comfort-content .caption { font-size: 13px; color: var(--ink); opacity: 0.8; margin: 6px 0 0;
    display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
  .comfort-content .meta { font-size: 11px; color: var(--muted); margin-top: 6px; }
  .comfort-divider { height: 1px; background: rgba(128,128,128,0.18); margin: 10px 14px 0; }
  .content { flex: 1; min-width: 0; padding: 10px 12px; display: flex; flex-direction: column; justify-content: center; position: relative; }
  .platform-chip { display: inline-flex; align-items: center; gap: 5px; padding: 3px 8px; border-radius: 999px; margin-bottom: 5px; width: fit-content; }
  .platform-chip svg { width: 13px; height: 13px; flex-shrink: 0; }
  .platform-chip span { font-size: 10.5px; font-weight: 800; color: white; }
  .title { font-size: 13px; font-weight: 600; color: var(--ink); line-height: 1.35; margin: 0 0 4px;
    display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
  .hashtag-link {
    background: linear-gradient(135deg, var(--icon-grad-start), var(--icon-grad-end));
    -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent; color: transparent;
    cursor: pointer;
  }
  .hashtag-row {
    display: flex; flex-wrap: wrap; gap: 4px 10px;
    font-size: 13px; font-weight: 600; margin: 6px 0 0;
  }
  /* Desktop comfort-card-only "See more" toggle and its collapsible block - see
     renderExpandableHashtagRow()/toggleHashtagExpand() in app.js for the JS half of this.
     Plain, muted text (not the gradient hashtag-link treatment) so it doesn't visually
     compete with the hashtags themselves. */
  .hashtag-more-toggle {
    color: var(--muted); cursor: pointer; text-decoration: underline;
    font-weight: 600;
  }
  /* flex-basis:100% forces this onto its own full-width line within .hashtag-row's own
     flex-wrap layout, rather than trying to squeeze in beside the last visible tag. Uses
     CSS grid's 0fr<->1fr row-track trick to animate open/closed - one of the only ways to
     smoothly transition to/from a content-driven "auto" height, which the card itself also
     needs (its own height is just normal document flow, not fixed), without hardcoding a
     pixel value that would need to match this specific hashtag block's actual rendered
     height on every different post. */
  .hashtag-expand-wrap {
    flex-basis: 100%;
    display: grid; grid-template-rows: 0fr;
    transition: grid-template-rows 0.3s ease;
  }
  .hashtag-expand-wrap.expanded { grid-template-rows: 1fr; }
  .hashtag-expand-inner {
    overflow: hidden; min-height: 0;
    display: flex; flex-wrap: wrap; gap: 4px 10px;
  }
  .hashtag-view-title { font-size: 18px; font-weight: 700; color: var(--ink); margin: 4px 14px 10px; }
  .shared-header-title { display: none; }
  .meta { font-size: 10.5px; color: var(--muted); }
  .navhint { text-align: center; font-size: 10px; color: #b8b8b8; padding: 8px 0 2px; letter-spacing: 0.5px; }
  /* Shown above the feed when the currently-filtered platform's own poller has been
     failing/stale (see platformStatus in app.js) - same card background/shadow/radius as
     every real post card in this app (.card, .comfort-card), in both themes identically
     via var(--card) rather than a separate light/dark override pair, so it reads as one
     more card in the feed rather than a distinct banner/alert component of its own. */
  .platform-failure-banner {
    margin: 14px 14px 12px; padding: 10px 14px;
    background: var(--card); color: var(--ink);
    border-radius: 20px; font-size: 12.5px; line-height: 1.4;
    text-align: center;
    box-shadow: 0 1px 2px rgba(0,0,0,0.08), 0 4px 10px rgba(0,0,0,0.10);
  }
  .settings-label { font-size: 11px; font-weight: 800; letter-spacing: 0.6px; color: var(--muted); margin: 14px 0 8px; }
  .settings-label:first-child { margin-top: 4px; }
  .settings-label.desktop-only-setting, .option.desktop-only-setting { display: none; }
  .option { display: flex; align-items: center; gap: 12px; padding: 11px 6px; border-radius: 10px; cursor: pointer; }
  .radio { width: 20px; height: 20px; border-radius: 50%; border: 2px solid var(--muted); flex-shrink: 0; position: relative; overflow: hidden; }
  .radio.selected {
    border: none;
    background: linear-gradient(135deg, var(--icon-grad-start), var(--icon-grad-end));
  }
  .option-label { font-size: 15px; color: var(--ink); flex: 1; }
  .toggle-row { display: flex; align-items: center; gap: 10px; padding: 10px 6px; }
  .toggle-row svg { width: 20px; height: 20px; }
  .toggle-row .chip-icon { width: 26px; height: 26px; border-radius: 6px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
  .toggle-row .chip-icon svg { width: 14px; height: 14px; }

  .notif-banner {
    position: fixed; top: 14px; left: 50%; transform: translateX(-50%) translateY(-140%);
    width: 340px; max-width: calc(100vw - 32px);
    background: var(--card); color: var(--ink);
    border-radius: 14px; box-shadow: 0 8px 24px rgba(0,0,0,0.3);
    padding: 12px 14px; display: flex; align-items: flex-start; gap: 10px;
    z-index: 999; opacity: 0; transition: transform 0.3s ease, opacity 0.3s ease;
  }
  .notif-banner.visible { transform: translateX(-50%) translateY(0); opacity: 1; }
  .notif-banner-icon { width: 26px; height: 26px; flex-shrink: 0; margin-top: 1px; border-radius: 7px; display: flex; align-items: center; justify-content: center; }
  .notif-banner-icon svg { width: 15px; height: 15px; }
  .notif-banner-title { font-size: 12.5px; font-weight: 800; margin-bottom: 2px; }
  .notif-banner-body { font-size: 12px; color: var(--muted); line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

  .modal-overlay {
    position: fixed; top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0,0,0,0.45); z-index: 1000;
    display: flex; align-items: center; justify-content: center;
  }
  .modal-box {
    width: 280px; max-width: calc(100vw - 48px);
    background: var(--bg); color: var(--ink);
    border-radius: 16px; padding: 20px; box-shadow: 0 12px 32px rgba(0,0,0,0.3);
  }
  .modal-title { font-size: 16px; font-weight: 800; margin-bottom: 8px; }
  .modal-body { font-size: 13.5px; color: var(--muted); line-height: 1.45; margin-bottom: 18px; }
  .modal-actions { display: flex; justify-content: flex-end; gap: 8px; }
  .modal-btn { padding: 8px 14px; border-radius: 8px; font-size: 13.5px; font-weight: 700; cursor: pointer; }
  .modal-btn.secondary { color: var(--muted); }
  .modal-btn.primary { background: linear-gradient(135deg, var(--grad-purple), var(--grad-pink)); color: white; }
  /* Hidden by default (mobile) - the desktop media query below shows and positions this
     for the Settings modal there; mobile already has the shared header's own back arrow
     for closing, so this stays unused/hidden on that layout entirely. */
  .desktop-modal-close { display: none; }
  .desktop-modal-back { display: none; }
  .settings-modal-backdrop { display: none; }
  .desktop-refresh-indicator { display: none; }
  /* Both desktop-only ad slots below follow the same mobile-hidden-by-default pattern as
     .desktop-refresh-indicator just above - shown via the desktop media query override
     further down instead. */
  .ad-slot-desktop-top { display: none; }
  .ad-slot-desktop-detail-bottom { display: none; }
  .sidebar-ad-slot { display: none; }
  .switch { width: 38px; height: 22px; border-radius: 12px; background: var(--switch-off); position: relative; cursor: pointer; flex-shrink: 0; margin-left: auto; transition: background 0.2s; }
  .switch.on { background: linear-gradient(90deg, var(--icon-grad-start), var(--icon-grad-end)); }
  .switch::after { content: ''; position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: white; transition: left 0.15s; }
  .switch.on::after { left: 18px; }
  .about-body { padding: 30px 20px; text-align: center; }

  .tile-grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-auto-rows: min-content; gap: 6px; }
  .tile { aspect-ratio: 1; background-size: cover; background-position: center; position: relative;
    border-radius: 14px; overflow: hidden;
    box-shadow: 0 1px 2px rgba(0,0,0,0.08), 0 4px 10px rgba(0,0,0,0.10);
    display: flex; align-items: center; justify-content: center; cursor: pointer; }
  .tile-icon svg { width: 44px; height: 44px; opacity: 0.5; }

  /* Sits exactly one full track-height above/below the current post (bottom:100%/
     top:100% against #detailTrack, its own positioned parent), so translateY-ing it by
     that same track height during a drag (see detailPullMove/End in app.js) slides it
     fully into the spot the current post is sliding out of - never resized or
     repositioned on its own, only ever moved in lockstep with #detailBody by that same
     transform. Purely a slide-position box otherwise - no background, radius, or shadow
     of its own (see .detail-peek-card just below for that), so nothing here risks
     disturbing that same math. The gap toward the current post is handled by
     .detail-peek-card's own --peek-inset instead of a separate fixed offset here - a
     fixed value on this element couldn't have grown/shrunk with the drag the way the
     inset on the other three sides does, which was exactly the mismatch (one side static,
     three sides animating) that made the top look like it "never changed." */
  .detail-peek {
    position: absolute; left: 0; right: 0; height: 100%;
  }
  #detailPeekPrev { bottom: 100%; margin-bottom: 50px; }
  #detailPeekNext { top: 100%; }

  /* The card's own outer shell - inset (grown by detailPullMove/End, shrinking back to 0
     as it lands) and the box-shadow suggesting it's the layer on top both live here.
     Deliberately no overflow:hidden on this element itself - a child's box-shadow gets
     clipped by any ancestor that hides its own overflow, and the actual content-clipping
     (rounding the real post content to these same corners) happens one layer further in
     instead (.detail-peek-card-content, just below), specifically so it doesn't also clip
     this shadow. */
  .detail-peek-card {
    position: absolute; inset: 0;
    border-radius: 30px;
    box-shadow: 0 10px 32px rgba(0,0,0,0.55);
    transition: box-shadow 0.2s ease;
    /* Shrinks/grows the whole card from its center, purely visually - transform never
       affects layout, so children (the actual post text/images) are always laid out at
       this element's true, full size and never reflow, regardless of what this is set
       to. This replaced an inset-based approach (changing top/bottom/left/right
       directly) that did change layout size, which was the source of two different
       bugs: reflowing text as the card's real width changed, and - once left/right were
       made static to stop that - losing the grow effect and the visible gap on that
       axis entirely, since only top/bottom were still animating by then. Scale doesn't
       have that tradeoff: every side shrinks/grows together, uniformly, always. */
    transform: scale(var(--peek-scale, 1));
    transform-origin: center;
    /* At rest (no drag in progress) this card's own bottom/top edge sits exactly at the
       visible boundary, so its shadow - which projects beyond that edge by design -
       would otherwise bleed into the visible content area with nothing dragging at all.
       Default to invisible and fade in with drag progress instead (see detailPullMove's
       own per-frame opacity update, same idea as the chevron's own fade-in) so the card,
       shadow included, is only ever visible once a drag has actually begun revealing it. */
    opacity: 0;
  }
  .detail-peek-card.landing { box-shadow: none; }
  /* Where the real post content (image/video thumbnail, title, caption, stats, actions -
     see renderDetailPeekHTML in app.js) actually lives, and where overflow:hidden +
     border-radius belong instead of .detail-peek-card itself - clipping the content to
     the card's own rounded corners without also clipping that card's own box-shadow,
     which needs to extend past those same corners to read as elevated above whatever's
     beneath it. */
  .detail-peek-card-content {
    position: absolute; inset: 0; border-radius: inherit; overflow: hidden;
    display: flex; flex-direction: column;
    background: var(--bg);
  }
  .detail-peek-card-content > * { position: relative; z-index: 1;}

  /* Pure swipe-direction indicators now, not clickable nav buttons the way the old
     always-visible desktop version was - opacity is driven directly by drag progress in
     detailPullMove (app.js), fading in as the peek card itself does. Direction is
     inverted from what these positions might suggest at first glance, on request: the top
     one points down and the bottom one points up, rather than each pointing away from the
     center the way a plain "there's more above/below" hint would. */
  .pull-chevron {
    position: absolute; left: 50%;
    width: 28px; height: 28px; opacity: 0; z-index: 5;
    pointer-events: none;
    transition: opacity 0.15s linear;
    filter: drop-shadow(0 1px 2px rgba(0,0,0,0.15));
  }
  /* Positioned entirely from app.js (see positionChevronAgainstCard), measured live
     against the peek card's own actual rendered edge each frame/transition rather than
     computed from a formula - this is what keeps it a consistent CHEVRON_GAP away from
     the card's real edge throughout the whole drag, not just at the start or end.
     transform here only ever does translateX for horizontal centering; top/bottom (the
     vertical position) are set directly as pixel values, not via translateY, since a
     live-measured pixel target is simplest to apply as an absolute position. */

  .pull-indicator {
    display: flex; align-items: center; justify-content: center;
    height: 0; overflow: hidden; flex-shrink: 0;
    transition: height 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
  }
  .pull-indicator.visible { height: 56px; }
  .ptr-spinner-wrap { display: inline-flex; }
  .ptr-spinner {
    width: 30px; height: 30px;
    opacity: 0;
    transition: transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.15s linear;
  }
  .ptr-spinner.spinning { animation: ptr-rotate 0.85s linear infinite; }
  @keyframes ptr-rotate { to { transform: rotate(-360deg); } }

  @keyframes icon-pop {
    0% { transform: scale(1); }
    30% { transform: scale(1.4); }
    55% { transform: scale(0.9); }
    75% { transform: scale(1.08); }
    100% { transform: scale(1); }
  }
  /* Permanently inline-flex (not just while .icon-pop is active) - these spans wrap a bare
     SVG with no display set, which defaults to block and reserves a few px of baseline
     "descender space" below it (a standard quirk with inline-level replaced content). If that
     switched to inline-flex only when .icon-pop applied, the row would visibly shrink by
     that same few px the moment you tapped like/save, shifting every icon in the row. Setting
     it here unconditionally means the animation itself never changes display, so there's
     nothing to shift. */
  #likeIcon, #saveIcon, [id^="feedLikeIcon-"], [id^="feedSaveIcon-"] { display: inline-flex; }
  .icon-pop { display: inline-flex; animation: icon-pop 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); }

  /* Was an inline style attribute directly in index.html - moved here since an inline
     style's specificity beats any regular CSS rule regardless of selector, which silently
     defeated the desktop media query's own #detailBody override further down in this same
     file (confirmed directly: the override's padding value was correctly present in this
     stylesheet, but never actually took visual effect for exactly this reason). As a real,
     ordinary rule here instead, that later, more specific override now works the normal
     way. Mobile-only bottom clearance (its own bottom nav bar + safe-area-inset), not
     relevant on desktop at all, which has no such bottom bar to clear in the first place. */
  #detailBody {
    padding: 0 0 calc(20px + env(safe-area-inset-bottom, 0px));
    height: 100%;
    /* Never shows a visible scrollbar - functionality without the visual clutter, same
       reasoning as .desktop-sidebar's own identical rule elsewhere in this file. This is
       what actually solves the landing-jump problem: a scrollbar-gutter reservation
       (tried and reverted) depends on guessing the right width to reserve, which varies
       by device and doesn't always match, and reserving too much read as ugly, wasted
       padding on the incoming card. With no visible scrollbar at all, there's nothing
       that can appear or disappear to cause a jump in the first place. */
    scrollbar-width: none; -ms-overflow-style: none;
  }
  #detailBody::-webkit-scrollbar { display: none; }

  .detail-image {
    width: calc(100% - 32px); margin: 0 16px; aspect-ratio: 1/1; position: relative; cursor: pointer; overflow: hidden;
    display: flex; align-items: center; justify-content: center;
  }
  /* YouTube specifically, on request - every other platform now shares the 1:1 default
     just above. */
  .detail-image-youtube { aspect-ratio: 16/9; }
  /* Peek-only gap between the card's own outline and the image, on request - scoped to
     .detail-peek-card-content specifically so it only ever affects the preview, never
     #detailBody's own .detail-image (which keeps using the base rule's margin-top:0,
     completely untouched by this). A variable rather than a flat 20px specifically so
     detailPullEnd's own landing branch can animate it down to 0 in step with everything
     else finishing (scale, position, opacity) - by the time openDetail() actually swaps
     in the real post, this has already reached 0, so there's nothing left to jump. */
  .detail-peek-card-content .detail-image { margin-top: var(--peek-image-gap, 20px); }
  /* Targets any iframe that ends up inside here regardless of platform or how it got
     there - YouTube/TikTok's are inserted directly by this app's own code (see
     videoEmbedHTML() in app.js), Reddit/Instagram's are generated later by their own
     embed scripts (widgets.js/embed.js) processing a blockquote, so their iframe's exact
     markup isn't under this app's direct control the same way. One CSS rule here covers
     all four rather than needing each platform's own embed-generation path to separately
     remember to round its own corners.
     Deliberately clip-path, not border-radius, and deliberately on the iframe itself, not
     a wrapper around it - confirmed as a real, current cross-browser difference: plain
     border-radius on a wrapper renders fine in Chrome/Safari but produces visibly choppy,
     unrounded corners in Firefox specifically, since iframes are replaced elements and
     border-radius alone doesn't reliably clip a replaced element's own rendered content
     in every engine. clip-path's `round` syntax, applied to the iframe directly, is the
     one approach confirmed to render smooth, correctly-clipped corners consistently
     across Chrome, Firefox, and Safari. */
  .detail-image iframe { clip-path: inset(0% 0% 0% 0% round 20px);
    width: 100% !important; height: 100% !important; position: absolute !important; inset: 0 !important; }
  /* Covers the brief moment before Instagram/Reddit's own script replaces this with the
     real iframe above - without this, the raw blockquote (styled by neither this app nor
     yet by the platform's own script) could flash at whatever size it naturally falls
     back to before snapping to the real embed's size a moment later. */
  .detail-image blockquote { width: 100%; height: 100%; margin: 0; box-sizing: border-box; }
  .detail-image svg { width: 84px; height: 84px; opacity: 0.5; }
  .video-play-overlay {
    position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
    width: 64px; height: 64px;
    display: flex; align-items: center; justify-content: center; pointer-events: none;
  }
  .detail-platform-icon {
    position: absolute; top: 18px; left: 18px;
  }
  .detail-platform-icon svg { height: 32px; width: auto; opacity: 0.5; }
  .carousel-gallery { overflow: hidden; touch-action: pan-y; }
  .carousel-track { display: flex; width: 100%; height: 100%; }
  .carousel-slide {
    flex: 0 0 100%; width: 100%; height: 100%; background-size: cover; background-position: center; position: relative;
  }
  .carousel-dots {
    position: absolute; bottom: 10px; left: 50%; transform: translateX(-50%);
    display: flex; gap: 6px; z-index: 2;
  }
  .carousel-dot { width: 6px; height: 6px; border-radius: 50%; background: rgba(255,255,255,0.5); transition: background 0.2s; }
  .carousel-dot.active { background: #fff; }
  .detail-content { padding: 16px; }
  .detail-title { font-size: 18px; font-weight: 700; margin: 12px 0 0; color: var(--ink); }
  .detail-caption { font-size: 14px; color: var(--ink); opacity: 0.85; margin: 8px 0 0; line-height: 1.4; }
  /* Collapsed by default (matches .caption-truncated being the one actually shown) -
     .caption-expanded toggles which of the two is visible, added/removed entirely in JS
     by toggleCaptionExpand() rather than swapping the text content itself, so there's
     nothing here that needs re-inserting or re-escaping the caption text on every click. */
  .caption-full { display: none; }
  .detail-caption.caption-expanded .caption-truncated { display: none; }
  .detail-caption.caption-expanded .caption-full { display: inline; }
  /* Single button for both See More and See Less (label text swapped in JS, see
     toggleCaptionExpand) - same pill/gradient look an earlier version used for a
     separate, dedicated back button, now just always visible instead of appearing only
     once expanded. display:block (not inline-flex) puts it on its own line below the
     caption text rather than beside it. */
  .caption-toggle-btn {
    display: block; margin-top: 12px;
    padding: 8px 16px; border-radius: 20px; border: none; cursor: pointer;
    background: linear-gradient(135deg, var(--icon-grad-start), var(--icon-grad-end));
    color: #fff; font-size: 13px; font-weight: 600;
  }
  /* Grows then shrinks back to normal once per cycle - iteration-count:2 (rather than
     baking two cycles into the keyframes themselves) repeats that same cycle twice,
     giving two distinct pulses rather than one long, blurred-together motion. Triggered
     by pulseCaptionToggleBtn() (see app.js) whenever a swipe attempt springs back
     specifically because the caption is expanded - a direct "this is why" cue pointing at
     the one control that actually lets the user out of this state. transform-origin left
     center keeps the button anchored to where it already sits (display:block, own line)
     rather than growing from its own center and shifting the whole row visually. */
  @keyframes captionBtnPulse {
    0% { transform: scale(1); }
    50% { transform: scale(1.15); }
    100% { transform: scale(1); }
  }
  .caption-toggle-btn.pulse {
    animation: captionBtnPulse 0.35s ease-in-out 2;
    transform-origin: left center;
  }
  .detail-meta { font-size: 12px; color: var(--muted); margin: 8px 0 0; }
  /* Pairs .detail-meta with the timestamp on a shared row instead of each sitting on its
     own full-width line - space-between naturally pushes them to opposite ends without
     needing the absolute positioning the card versions use (there's no defined "card edge"
     in the detail view to anchor a corner against the way there is on a card). */
  .detail-meta-row { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
  /* Small and muted on purpose - meant to be there for whoever's actually looking for it,
     not to compete for attention with the title/caption. Absolutely positioned into the
     top-right corner on both card styles (each given position:relative to anchor it) -
     inside .detail-meta-row, it isn't absolutely positioned at all, just taking that row's
     normal end position instead, since the detail view has no card edge to anchor a
     corner against the way a card does. */
  .post-timestamp { font-size: 10.5px; color: var(--muted); opacity: 0.75; white-space: nowrap; flex-shrink: 0; }
  .content .post-timestamp, .comfort-content .post-timestamp {
    position: absolute; top: 10px; right: 12px;
  }

  /* Real engagement numbers from the post's own native platform - a larger top margin than
     most spacing in this card on purpose, separating this row from the score line above it
     more than the other lines are separated from each other. Absent entirely (rather than
     rendered empty) when a platform has no such data - see engagementStatsHTML() in
     app.js. */
  .engagement-stats { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 14px 0 0; }
  .engagement-stats-group { display: flex; align-items: center; gap: 22px; }
  .engagement-stat { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--muted); }
  .engagement-stat svg { flex-shrink: 0; opacity: 0.7; }
  .detail-divider { height: 1px; background: rgba(128,128,128,0.2); margin: 16px 0 0; }
  .actions-row { display: flex; align-items: center; padding: 6px 0; }
  .action-slot { flex: 1; display: flex; align-items: center; justify-content: center; padding: 16px 0; cursor: pointer; position: relative; }
  .action-slot svg { width: 26px; height: 26px; }
  .action-sep { width: 1px; height: 26px; background: rgba(128,128,128,0.2); }
  /* Mobile: pinned near the bottom of the screen regardless of form height (desktop
     overrides this back to normal flow, right after Forgot password, below). */
  #skipForNow { position: absolute; bottom: 64px; left: 0; right: 0; }

  /* ============================================================
     Desktop layout - a persistent left sidebar (search always
     visible, platform filters and account nav) replaces the
     mobile bottom bar and hamburger menu; the feed becomes a
     single comfort-style card stream, image-left/content-right,
     with more breathing room than mobile ever needed.
     ============================================================ */
  @media (min-width: 550px) {

    /* Mobile treats the whole app as a fixed-height "shell" that never itself scrolls -
       instead, individual panels (the sidebar, the feed) each get their own internal
       scrollbar. On desktop this reads as two separate scrollbars competing for
       attention instead of the one, familiar browser-native scrollbar a normal webpage
       has - so here the page itself is allowed to grow to fit its content and scroll
       normally, with only the sidebar staying fixed in place via position:sticky. */
    html, body { height: auto; overscroll-behavior-y: contain; }
    .app-shell {
      max-width: 1020px; margin: 0 auto;
      height: auto; min-height: 100vh;
      overflow: visible;
    }
    body { background: var(--bg); }
    /* Sits as a sibling before #screen so its height directly pushes the whole page -
       sidebar and feed together - down when it opens, rather than being scoped to just
       one column's own internal content. */
    .desktop-refresh-indicator {
      display: flex; align-items: center; justify-content: center;
      height: 0; overflow: hidden;
      transition: height 0.3s ease;
    }
    .desktop-refresh-indicator svg { width: 28px; height: 28px; opacity: 0; transition: opacity 0.2s ease; }
    .desktop-refresh-indicator svg.spinning { animation: ptr-rotate 0.85s linear infinite; }
    .desktop-refresh-indicator.visible { height: 60px; }
    .desktop-refresh-indicator.visible svg { opacity: 1; }
    /* AD SLOT: Desktop top banner, shown here (overriding the mobile-hidden base rule
       above) since it only makes sense above the wider desktop layout. Centered to the
       same max-width as the rest of the page content (.screen's own 1020px cap) rather
       than stretching the full browser width on very wide monitors. */
    .ad-slot-desktop-top {
      display: flex; align-items: center; justify-content: center;
      width: 100%; max-width: 728px; height: 90px;
      margin: 14px auto 0;
    }
    /* Hidden/shown opposite each other via the same body.detail-active toggle (see
       showView() in app.js) - a post being open swaps the top leaderboard out for this
       smaller one instead, rather than ever showing both at once. 60px tall specifically
       to read as a visibly smaller, second banner next to the top one's 90px, not a
       same-sized ad in a different spot. */
    body.detail-active .ad-slot-desktop-top { display: none; }
    /* display:none by default even here on desktop (not just the mobile-hidden default
       rule elsewhere) - without this, this rule's own positioning/sizing would apply
       unconditionally on any desktop view, and the body.detail-active rule just below
       would then be redundant rather than the thing actually controlling visibility. */
    .ad-slot-desktop-detail-bottom {
      display: none; align-items: center; justify-content: center;
      position: fixed; bottom: 0; left: 50%; transform: translateX(-50%);
      width: 100%; max-width: 1020px;
      height: 60px; padding: 0 20px 0 260px; box-sizing: border-box;
      /* Reserves the sidebar's own 260px as space this box's background doesn't paint
         over (background-clip excludes the padding band), rather than an absolute
         left:260px offset that only ever matched the sidebar's real position when the
         viewport happened to be exactly 1020px wide - see the rule comment above for the
         actual bug that produced. pointer-events:none for that same reserved band, so an
         empty strip of this fixed box never intercepts clicks meant for the sidebar
         underneath it; restored to auto on .ad-placeholder itself just below, for once a
         real, clickable ad occupies it. */
      background: var(--bg); background-clip: content-box;
      pointer-events: none;
      /* Without an explicit z-index this only ever gets stack level 0 (z-index:auto) -
         .screen is position:relative and sits AFTER this element in the DOM (.screen is a
         later sibling within .app-shell), so even though .screen itself never sets a
         z-index either, being positioned is enough to place its entire painted subtree
         (background plus every descendant, since #detailBody's own content is otherwise
         unpositioned) in that same stack-level-0 group - and within that group later DOM
         order wins, so .screen's content was painting straight over this ad instead of
         the other way around. 10 clears that (and #sharedHeader's own 25 above, in case a
         future layout change ever brings them into the same region) without reaching into
         the 998+ range reserved for actual modal overlays further down this file. */
      z-index: 10;
    }
    /* Ad removed from detail view on request - stays permanently hidden (matching the
       base display:none rule above) rather than appearing here. */
    /* A real ad unit (Google or otherwise) comes in a fixed size, not something that
       stretches to fill whatever column it's dropped into - 468x60 ("Full Banner") is the
       conventional fit for this position, matching the placeholder text below, and matches
       the same fixed-width treatment .ad-slot-desktop-top already gives its own 728px
       leaderboard rather than letting either stretch edge to edge. max-width:100% is a
       fallback for the rare case the right column itself is narrower than 468px. auto
       pointer-events since the parent above turns them off for its own reserved padding.*/
    .ad-slot-desktop-detail-bottom .ad-placeholder { width: 468px; max-width: 100%; pointer-events: auto; }
    /* Login screen's own top banner - unlike .ad-slot-desktop-top just above (which is
       hidden entirely pre-login, base rule elsewhere), this one is visible on both mobile
       and desktop already; this override just sizes it up to match that same 90px
       leaderboard height once there's enough width for it. */
    .ad-slot-login-top { height: 90px; margin-top: 50px; margin-bottom: 24px; }
    .screen { flex-direction: row; height: auto; min-height: 100vh; overflow: visible; }
    /* Desktop previously never showed this view at all (every card click went straight to
       openExternal instead) - now that it does, .detail-image/.detail-content need their
       own width constraint here, since without one they'd stretch across the entire wide
       desktop content column edge-to-edge, which looked stretched and oversized in
       testing. 900px is deliberately wider than this column typically measures (confirmed
       directly: 760px at a 1440px viewport) - width:100% below means it actually fills
       whatever the column's own real width is, and this cap only matters at all on a very
       wide viewport, protecting against an oversized image on an ultrawide display rather
       than constraining it on an ordinary one the way the previous, narrower 640px value
       was actually doing.
       .detail-image's own margin is separately zeroed out just below - its 16px value is
       meant for mobile's own edge-to-edge layout, not doubled up on top of this padding
       here too (that combination was the actual reason the media looked inset well past
       what this padding alone would produce, not filling the column the way the rest of
       this view's own content already does). */
    /* Bottom padding here specifically clears .ad-slot-desktop-detail-bottom's own fixed
       60px height (plus a small buffer) - that ad is position:fixed, so without this,
       this view's own content would scroll underneath it and end up visually covered by
       it rather than stopping short with room to spare, the same reason mobile's own
       #detailBody padding (its default, un-overridden rule elsewhere) similarly clears
       its own fixed bottom ad banner there. */
    #detailBody { max-width: 900px; margin: 0 auto; width: 100%; padding: 0 20px 20px; box-sizing: border-box; }
    #detailBody .detail-image { margin: 0; width: 100%; }
    /* .detail-content's own 16px padding (its base rule, shared with mobile) stacks on top
       of #detailBody's 20px above - on mobile #detailBody itself has no horizontal padding
       of its own (see its base rule), so that 16px was the only inset and lined up with
       .detail-image's own matching 16px margin (also its base rule). Desktop's #detailBody
       padding above is a separate, later addition that .detail-image accounts for (via its
       own margin:0 override just above) but .detail-content never did, so the title/
       caption/stats ended up 20+16=36px from the edge while the image sat at just 20px -
       confirmed directly by rendering this layout and comparing their left edges. Left/
       right specifically, not all four sides - the top/bottom 16px is still real vertical
       rhythm between the image and the text below it. */
    #detailBody .detail-content { padding-left: 0; padding-right: 0; }
    /* Mirrors #detailBody's own desktop box model exactly (max-width/centering/padding,
       plus the same two child-scoped fixes just above) - .detail-peek-card-content holds
       the exact same .detail-image/.detail-content markup now (see renderDetailPeekHTML
       in app.js), and without this it would render full-width instead of matching
       #detailBody's own 900px-capped, centered column, with the same left-edge
       misalignment between image and caption those two rules above already fixed for the
       real detail view. */
    .detail-peek-card-content { max-width: 900px; margin: 0 auto; padding: 0 20px 20px; box-sizing: border-box; }
    .detail-peek-card-content .detail-image { margin: var(--peek-image-gap, 20px) 0 0; width: 100%; }
    .detail-peek-card-content .detail-content { padding-left: 0; padding-right: 0; }
    .views-wrapper { overflow: visible; }
    /* Every view except the settings modal (which keeps its own dedicated fixed/centered
       positioning, defined later) switches from the mobile stacking scheme - each view
       sized exactly to its parent via position:absolute;inset:0, with only one shown at
       a time - to sitting in normal document flow, sized to its own content, so the page
       can grow around whichever one is currently visible. */
    #mainView, #savedView, #likedView, #hashtagView, #aboutView, #detailView {
      position: static; height: auto; min-height: 0;
    }
    /* The login screen is a sibling of the sidebar/views-wrapper inside .screen, which
       becomes a row flexbox here - without an explicit flex-grow it was only ever as
       wide as its own shrink-to-fit content, landing scrunched on the left instead of
       using the space now that the sidebar (hidden during login) isn't there to fill it.
       min-height matches the sidebar's own 100vh so "Skip for now" (position:absolute;
       bottom:40px within this element) actually sits near the bottom of the real page. */
    #loginView { flex: 1; min-height: 100vh; }
    /* Caps the form itself to a comfortable card width - #loginView's own inline
       align-items:center then centers this narrower block in the middle of all that
       new width instead of the fields stretching edge-to-edge across the page. */
    #loginFormWrap { max-width: 380px; }
    #loginLogoRow { padding-top: 32px; }
    /* Desktop: matches the same spacing rhythm as the two links right above it
       (Sign up is 14px below the button, Forgot password 10px below that) instead of
       being pinned near the bottom of the whole page - it now just follows Forgot
       password in the same centered column, at that same 10px. */
    #skipForNow { position: static; margin-top: 10px; }

    .desktop-sidebar {
      display: flex !important;
      flex-direction: column;
      width: 260px; flex-shrink: 0;
      padding: 24px 14px 28px;
      gap: 2px;
      border-right: 1px solid rgba(128,128,128,0.15);
      position: sticky; top: 0; height: 100vh;
      overflow-y: auto;
      box-sizing: border-box;
      /* Scrollable (in case its own nav content ever exceeds the viewport height) but
         never shows a visible scrollbar - functionality without the visual clutter. */
      scrollbar-width: none; -ms-overflow-style: none;
    }
    .desktop-sidebar::-webkit-scrollbar { display: none; }
    /* Wins over the rule above via higher specificity (two classes vs one), even though
       both use !important - toggled via the login-active body class in
       updateSidebarForViewport(), since a plain JS style.display could never win against
       the sidebar's own !important rule on its own. */
    body.login-active .desktop-sidebar { display: none !important; }
    /* This main-app banner is a sibling of #screen (outside the login/main view split
       entirely, alongside #desktopRefreshIndicator), so it was never actually tied to
       login state at all - confirmed directly, it was showing stacked above the login
       screen's own dedicated banner (.ad-slot-login-top) rather than being hidden while
       login is active, the way the rest of the main app's chrome already correctly is. */
    body.login-active .ad-slot-desktop-top { display: none !important; }
    .sidebar-logo { padding: 0 10px 22px; cursor: pointer; }
    .sidebar-logo img { height: 26px; transition: transform 0.15s ease; }
    /* Matches the same hover-scale used on icon buttons elsewhere (.icon-btn svg,
       .desktop-modal-close svg) - a plain zoom now that the click no longer morphs the
       logo into a spinner itself (see triggerSidebarRefresh in populateSidebar). */
    #sidebarLogoSlot:hover img { transform: scale(1.07); }
    .sidebar-search {
	  box-shadow: 0 1px 2px rgba(0,0,0,0.02), 0 4px 7px rgba(0,0,0,0.03);
      position: relative;
      display: flex; align-items: center; gap: 10px;
      background: var(--card); border: none;
      border-radius: 22px; padding: 10px 14px; margin: 0 2px 20px;
      height: 45px; flex-shrink: 0; box-sizing: border-box; overflow: hidden;
    }
    /* The border itself is a CONSTANT 3px, transparent, from the very start - never
       changes width on focus, so nothing about the box's actual size or content area
       shifts by even a pixel between states, unlike an earlier version of this that
       changed 1px to 3px directly (box-sizing:border-box kept the outer box the same
       size, but the shrinking content area was still a real, if small, layout change).
       The visible gradient itself lives entirely on this ::before pseudo-element instead,
       sized and masked into a ring shape matching that 3px border exactly - toggling its
       opacity (rather than swapping backgrounds or border colors directly) is what
       actually animates smoothly, since opacity is natively transitionable in a way a
       change between two different gradients never is. */
    .sidebar-search::before {
      content: '';
      position: absolute; inset: 0px;
      border-radius: inherit;
      padding: 2px;
      background: linear-gradient(135deg, var(--icon-grad-start), var(--icon-grad-end));
      -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
      -webkit-mask-composite: xor;
      mask-composite: exclude;
      opacity: 0;
      transition: opacity 0.2s ease;
      pointer-events: none;
      box-sizing: border-box;
    }
    .sidebar-search:focus-within::before { opacity: 1; }
    .sidebar-search-input {
      border: none; background: transparent; outline: none; flex: 1;
      font-size: 14px; color: var(--ink); font-family: inherit; min-width: 0;
    }
    .sidebar-search-clear-btn {
      display: flex; align-items: center; justify-content: center;
      width: 22px; height: 22px; flex-shrink: 0;
      background: none; border: none; cursor: pointer; padding: 0;
      -webkit-tap-highlight-color: transparent;
      opacity: 0; pointer-events: none; transition: opacity 0.2s ease;
    }
    .sidebar-search-clear-btn.visible { opacity: 1; pointer-events: auto; }
    .sidebar-nav-item {
      display: flex; align-items: center; gap: 14px;
      padding: 11px 16px; border-radius: 999px; cursor: pointer;
      font-size: 15px; font-weight: 600; color: var(--ink);
      -webkit-tap-highlight-color: transparent;
      transition: background-color 0.2s ease;
    }
    .sidebar-nav-item:hover { background: none; }
    .sidebar-nav-item.active { background: rgba(128,128,128,0.12); }
    .sidebar-nav-item .nav-icon { width: 22px; height: 22px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; }
    .sidebar-nav-item .nav-icon svg { width: 100%; height: 100%; transition: transform 0.15s ease; }
    .sidebar-nav-item:hover .nav-icon svg { transform: scale(1.15); }
    /* border-top instead of height:1px + background - a real height on a flex child can
       land on a non-integer sub-pixel row depending on what's above it, which browsers
       then anti-alias inconsistently (one line crisp, the other slightly soft) even with
       identical CSS on both. A border is rendered through a separate, more consistently
       crisp hairline path regardless of exact sub-pixel position. */
    .sidebar-divider { height: 0; border-top: 1px solid var(--ink); opacity: 0.12; flex-shrink: 0; margin: 14px 10px; }
    /* AD SLOT: Sidebar square, shown here (overriding the mobile-hidden base rule above).
       aspect-ratio:1/1 rather than a fixed pixel size - the sidebar itself is 260px wide
       with 14px of its own side padding (see .desktop-sidebar), so a square scaled to that
       available ~232px width fits naturally instead of a standard 250x250 AdSense unit
       slightly overflowing it. */
    .sidebar-ad-slot {
      display: flex; align-items: center; justify-content: center;
      width: 100%; aspect-ratio: 1/1;
      margin: 0 0 4px;
    }
    .sidebar-preview-row {
      display: flex; gap: 6px;
      padding: 2px 10px 10px;
    }
    .sidebar-preview-tile {
      flex: 1; aspect-ratio: 1; min-width: 0;
      background-size: cover; background-position: center;
      border-radius: 8px; position: relative; cursor: pointer;
      display: flex; align-items: center; justify-content: center;
      overflow: hidden;
    }
    /* These sit in a cramped 3-across row inside the sidebar itself, nowhere near the
       room the Saved/Liked grid pages have - keeps the icon proportional instead of
       inheriting the full-size 44px meant for those larger tiles. */
    .sidebar-preview-tile .tile-icon svg { width: 22px; height: 22px; }
    .sidebar-preview-more {
      position: absolute; inset: 0;
      background: rgba(0,0,0,0.45);
      display: flex; align-items: center; justify-content: center;
	  border-radius: 20px;
    }

    .views-wrapper { flex: 1; min-width: 0; }

    /* The mobile header's logo/search/menu all live in the sidebar now - only the
       back-button slot still earns its keep, for closing out of the detail view. */
    #sharedHeader .appbar-center, #sharedHeader .appbar-side.right { display: none; }
    .appbar { min-height: 48px; }
    /* Constrained to the main-content column (not the full screen) so it can never
       overlap the sidebar's own logo/nav - this was rendering as a full-width opaque
       bar directly on top of the sidebar's logo before this fix. Background is only
       shown when there's actually a back button in it (mainView has none), so the
       feed itself isn't sitting under a pointless empty bar most of the time. */
    /* Desktop-only padding (12px top/bottom, vs the base rule's 18px) - kept out of the
       shared base rule above so mobile's own header keeps its original 18px instead of
       picking up this desktop-specific value too. #sharedHeader's height and
       .view-content's padding-top just below are set to match: 12px top padding +
       #sharedBackSlot's 42px icon-btn [26px icon + 8px padding each side] + 12px bottom
       padding = 66px content height, plus 2px so the arrow keeps a touch more clearance
       below it than its own 12px top/left inset - forcing either of those two rules
       shorter than that clips off that same bottom clearance, leaving the arrow sitting
       flush against the content below it instead. */
    #sharedHeader { left: 260px; background: transparent; height: 68px !important; pointer-events: none; }
    /* No background even when showing the back button - it floats directly over
       whatever content is there rather than sitting on its own bar/box. Pointer-events
       still needs to flip to auto in this state so the arrow itself stays clickable. */
    #sharedHeader.showing-back { pointer-events: auto; }
    .appbar { max-width: 760px; margin: 0 auto; padding: 12px 0; }
    #sharedBackSlot { min-width: auto; gap: 12px; margin-left: 18px; }
    #sharedBackSlot .icon-btn svg { width: 26px; height: 26px; }
    .shared-header-title { display: block; font-size: 20px; font-weight: 700; color: var(--ink); }
    /* Desktop's bigger comfort-cards get a slightly larger, more-inset timestamp than the
       compact mobile card uses - both the larger card size and the extra breathing room
       from the corner read as more deliberate at this scale, where 10px/12px starts
       looking a little cramped relative to everything else being bigger too. */
    .comfort-content .post-timestamp { font-size: 12px; top: 15px; right: 17px; }
    /* The header now carries the title inline with the arrow instead - the separate,
       stacked title further down in each view's own content would just duplicate it. */
    .hashtag-view-title { display: none; }
    .view-content { padding-top: 68px !important; }
    /* mainView specifically matches the sidebar's own 28px top padding exactly (see
       .desktop-sidebar above) - it never shows a back button, so it doesn't need the
       larger reserved space the other views keep for that (which is there so the back
       arrow doesn't collide with each view's own top-left content, like the Settings
       page's "Appearance" label sitting right where the arrow would otherwise be). */
    #mainView .view-content { padding-top: 0 !important; }

    .bottom-bar { display: none !important; }
    /* No longer automatically covered by the rule above now that this ad slot is a
       separate sibling element rather than nested inside .bottom-bar - needs its own
       explicit desktop-hide rule. */
    .ad-slot-mobile-bottom { display: none !important; }

    /* One unified card style everywhere on desktop - no compact/comfort toggle - built
       from the comfort card's own markup (title, caption, dedicated hashtag line, meta)
       since that's the richer of the two, just reflowed image-left/content-right instead
       of image-top/content-below. .card never actually renders on desktop (both feed and
       search results force the comfort markup there - see isDesktopLayout() call sites),
       so only .comfort-card needs the grid treatment below. */
    .view-content { height: auto; overflow: visible; }
    .list { max-width: 760px; margin: 0 auto; padding: 0 24px 28px !important; overflow-y: visible; height: auto; }
    /* Restores the same 14px top padding the shared rule above used to give every .list
       alike, but only for the main feed - #list sits directly under mainView's own
       in-flow logo/search row (not a hidden title like Saved/Liked/Hashtag's own
       .hashtag-view-title just above), so it's the one case that still reads correctly
       with that same breathing room. */
    #list { padding-top: 14px !important; }
    .list > *:first-child { margin-top: 0; }
    /* .tile-grid (Saved/Liked) needs an explicit width - as a grid container within a
       flex column parent, its 1fr columns were falling back to each tile's own minimum
       intrinsic content size (28px, matching the tile icon) rather than distributing the
       available space, since the grid itself had no definite width to stretch to. */
    .tile-grid { width: 100%; box-sizing: border-box; }
    .comfort-card {
      display: grid;
      /* The image spans both rows (full card height) as a square matching that combined
         height - 240px content + 71px actions is stable across every card, since both
         are fixed by padding/icon size, not by how much title/caption text a post has. */
      grid-template-columns: 311px 1fr;
      grid-template-rows: 240px 71px;
      grid-template-areas:
        "thumb content"
        "thumb actions";
      min-height: 0;
      box-shadow: 0 0 6px rgba(0,0,0,0.10);
    }
    [data-theme="light"] .comfort-card { box-shadow: 0 1px 2px 0 rgba(60,64,67,0.30), 0 1px 3px 1px rgba(60,64,67,0.15); }
    /* Lets one specific card grow taller than the shared 240px/71px baseline when its own
       hashtag block is expanded (see .hashtag-expand-wrap.expanded and
       toggleHashtagExpand() in app.js) - :has() reacts directly to that class appearing
       anywhere inside this card, so nothing here needs the JS toggle function to know
       about or reach up into the card/content/thumb elements at all, just the one
       hashtag-block class it already sets. minmax(240px, auto) keeps every non-expanded
       card's normal height as the floor, only growing past it for whichever single card
       actually needs the room right now. */
    .comfort-card:has(.hashtag-expand-wrap.expanded) { grid-template-rows: minmax(240px, auto) 71px; }
    .comfort-card:has(.hashtag-expand-wrap.expanded) .comfort-content { height: auto; min-height: 240px; overflow: visible; }
    .comfort-card:has(.hashtag-expand-wrap.expanded) .comfort-thumb { height: auto; align-self: stretch; }
    .comfort-thumb {
      grid-area: thumb;
      width: 311px; height: 311px;
      /* Rounded on its own on all four corners - in a left/right layout only the two
         corners that happen to land on the card's own outer edge get rounded via the
         card's clip; the inner-facing corners (top-right, bottom-right) stay square
         unless the image is given this same radius independently. */
      border-radius: 20px;
      overflow: hidden;
      flex-shrink: 0;
      aspect-ratio: auto;
    }
    .comfort-content {
      grid-area: content;
      /* Locked height by default so every card ends up the same overall size regardless of
         how much title/caption text a given post has - overflow:hidden keeps a long
         caption from pushing this box (and the whole card) taller than that. Overridden
         below (via :has(), reacting to the expanded hashtag block's own class rather than
         needing JS to toggle a class up here too) specifically for a card whose hashtags
         are currently expanded, letting just that one card grow past the shared baseline
         instead of clipping the very content "See more" was supposed to reveal. */
      height: 240px;
      box-sizing: border-box;
      overflow: hidden;
      padding: 20px 22px;
      display: flex; flex-direction: column; justify-content: center;
    }
    .comfort-content .title { font-size: 17px; margin-top: 0; }
    .comfort-content .caption { font-size: 14.5px; -webkit-line-clamp: 2; }
    .comfort-content .meta { font-size: 12.5px; }
    /* Icons sit below the content column only, not spanning under the image - the
       divider is hidden as a separate element (it isn't part of this grid at all) in
       favor of a border-top on actions-row itself, matching the divider's own color. */
    .comfort-divider { display: none; }
    /* Smaller badge, more clearance from the thumbnail's corner, and a smaller icon
       within it so there's real breathing room from the circle's own edge - all three
       sat too tight together at the mobile sizing once viewed at desktop's larger
       thumbnail size. */
    .media-badge { top: 10px; right: 10px; width: 20px; height: 20px; border-radius: 10px; }
    .media-badge svg { width: 10px !important; height: 10px !important; }
    .media-badge-nsfw { width: auto; padding: 0 8px; font-size: 10px; }
    .actions-row { grid-area: actions; border-top: 1px solid rgba(128,128,128,0.18); }
    .mobile-only-setting { display: none; }
    .settings-label.desktop-only-setting { display: block; }
    .option.desktop-only-setting { display: flex; }
    .icon-btn:hover { background: none; }
    .icon-btn svg { transition: transform 0.15s ease; }
    .icon-btn:hover svg { transform: scale(1.15); }
    /* The refresh spinner's own layout box measures as exactly centered in testing here
       (both the element itself within its container, and the icon's artwork within its
       own viewBox), but per direct report it renders visibly off-center on an actual
       desktop browser - shifting it down slightly, per the specific fix requested, rather
       than the "re-center" alternative given centering already measures correctly on
       this end. Applied via transform on a separate wrapper (transform never affects
       layout sizing) so it can't conflict with the spinner's own independently-managed
       transform, used by both JS (scale/rotate during the drag) and the spin animation. */
    .ptr-spinner-wrap { transform: translateY(4px); }
    /* Matches the mobile dropdown menu's own blurred backdrop, which this modal didn't
       have before (just a plain dark tint). */
    .modal-overlay { backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px); }

    /* Settings becomes a centered popup dialog on desktop rather than a full view-swap
       away from the feed - there's no swipe-driven "screen" metaphor here the way there
       is on mobile, so a dialog fits the larger-screen convention better. Built on top of
       the same #settingsView element (still part of the normal view stack / closeSub()
       flow) rather than a separate modal, so nothing about the underlying navigation
       needs to change - just how it's presented. */
    #settingsView {
      position: fixed;
      top: 50%; left: 50%; transform: translate(-50%, -50%);
      width: 480px; max-width: calc(100vw - 320px);
      height: auto; max-height: 80vh;
      background: var(--bg); border-radius: 16px;
      box-shadow: 0 20px 60px rgba(0,0,0,0.35);
      z-index: 1000;
      overflow: hidden;
    }
    /* A real, separate element rather than #settingsView's own ::before - a pseudo-element,
       even at z-index:-1, still paints within its parent's own stacking context, which
       places it ON TOP of that parent's own background (the root of a stacking context
       always paints its background first, before any of its descendants including
       negative-z-index ones) - that was darkening the whole modal box instead of just
       providing a backdrop behind it. This element is a true sibling, so it stacks
       beneath the modal in real paint order instead. */
    .settings-modal-backdrop {
      position: fixed; inset: 0; z-index: 999;
      background: rgba(0,0,0,0.45);
      backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
      opacity: 1; transition: opacity 0.16s ease;
    }
    .settings-modal-backdrop.closing { opacity: 0; }
    #settingsView .view-content { padding-top: 0 !important; flex: 0 1 auto; min-height: 0; overflow-y: auto; }
    /* Same flex-basis:0 fix as view-content above, one level deeper - settings-body is
       also a flex child (of view-content, itself a flex column), so it needs the same
       treatment for view-content to correctly size around its actual content. */
    #settingsView .settings-body { flex: 0 1 auto; overflow: visible; }
    /* The shared view-swap system animates .view-content (a child), not the outer view
       element - that's invisible on mobile since the outer view has no distinct look of
       its own there, but here the outer box (rounded corners, shadow, fixed position) is
       the modal itself, so having only the content pop/scale separately inside an
       already-fully-formed box looked disjointed. Neutralized here and replaced with a
       single clean animation on the box as a whole instead. */
    #settingsView .view-content.view-entering,
    #settingsView .view-content.view-exiting,
    #settingsView .view-content.view-enter-forward,
    #settingsView .view-content.view-exit-forward,
    #settingsView .view-content.view-enter-backward,
    #settingsView .view-content.view-exit-backward {
      opacity: 1 !important; transform: none !important; transition: none !important;
    }
    #settingsView { animation: settingsModalPopIn 0.2s cubic-bezier(0.2, 0.8, 0.3, 1); }
    @keyframes settingsModalPopIn {
      from { opacity: 0; transform: translate(-50%, -50%) scale(0.92); }
      to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
    }
    /* Reverse of the pop-in above, added via JS right before the modal is actually
       hidden (see closeSub()) - the id+class combination outweighs the plain #settingsView
       rule above on specificity, so this one wins for as long as the class is present. */
    #settingsView.settings-modal-closing {
      animation: settingsModalPopOut 0.16s cubic-bezier(0.4, 0, 1, 1) forwards;
    }
    @keyframes settingsModalPopOut {
      from { opacity: 1; transform: translate(-50%, -50%) scale(1); }
      to { opacity: 0; transform: translate(-50%, -50%) scale(0.92); }
    }
    #settingsView .settings-body { padding: 28px; }
    /* The About panel's content is cloned from #aboutView's innerHTML only (not its
       .about-body wrapper - see openSettingsAbout()), so it loses that wrapper's own
       top padding along the way - added back here, a bit more generous than the 28px
       settings-body already contributes, so the logo isn't crowded against the back/X
       buttons sitting just above it. */
    #settingsAboutContent { padding-top: 28px; }
    .desktop-modal-close {
      position: absolute; top: 16px; right: 16px; z-index: 2;
      width: 32px; height: 32px; border-radius: 50%;
      align-items: center; justify-content: center;
      background: none; border: none; cursor: pointer;
      -webkit-tap-highlight-color: transparent;
    }
    .desktop-modal-close svg { transition: transform 0.15s ease; }
    .desktop-modal-close:hover svg { transform: scale(1.15); }
    #settingsView .desktop-modal-close { display: flex; }
    /* Mirrors .desktop-modal-close exactly (same size/shape, left instead of right) so
       the About panel's back button sits at the same inset from its corner as the X
       does from its own - previously this was a normal in-flow .option row, inset by
       the settings-body's own padding on top of its own, landing nowhere near the X. */
    .desktop-modal-back {
      position: absolute; top: 16px; left: 16px; z-index: 2;
      width: 32px; height: 32px; border-radius: 50%;
      align-items: center; justify-content: center;
      background: none; border: none; cursor: pointer;
      -webkit-tap-highlight-color: transparent;
    }
    .desktop-modal-back svg { transition: transform 0.15s ease; }
    .desktop-modal-back:hover svg { transform: scale(1.15); }
    #settingsView .desktop-modal-back { display: flex; }
    .sidebar-email-popup {
      /* Positioned below the item (not to the right) - overflow-y:auto on the sidebar
         itself implicitly clips horizontal overflow too (per the CSS spec's rule for
         when only one axis is set to non-visible), so anything extending past the
         sidebar's own width here would get cut off. */
      position: absolute; left: 12px; right: 12px; top: 100%; margin-top: 4px;
      padding: 8px 12px;
      background: var(--card); border: 1px solid rgba(128,128,128,0.25);
      border-radius: 8px; box-shadow: 0 4px 16px rgba(0,0,0,0.15);
      font-size: 13px; font-weight: 500; color: var(--ink); z-index: 30;
      overflow-wrap: break-word;
    }
  }
