/* TRM 1.8 — removable theme-mode module. Selectors checked against this TRM/Source theme.
   kg-* selectors are from @tryghost/kg-default-nodes 2.2.1 renderers.
   Images, video, canvas, artwork SVGs and iframe contents are never filtered. */
:root {
    --trm-bg: #f7f5ef;
    --trm-bg-rgb: 247, 245, 239;
    --trm-surface: #fffefa;
    --trm-surface-soft: #edeae2;
    --trm-text: #151613;
    --trm-text-muted: #625f56;
    --trm-border: #d7d3c8;
    --trm-control-border: #8a867a;
    --trm-link: #292c23;
    --trm-button-bg: #20221c;
    --trm-button-text: #f7f5ef;
    --trm-button-hover: #3c4033;
    --trm-focus: #5c634d;
    --trm-error: #a22a26;
    --trm-dock-height: 76px;
    --trm-bottom-obstacle: 0px;
    --trm-viewport-height: 100vh;
    --trm-viewport-top: 0px;
    --trm-dock-total: calc(var(--trm-dock-height) + env(safe-area-inset-bottom, 0px) + var(--trm-bottom-obstacle));
}
@supports (height: 100dvh) { :root { --trm-viewport-height: 100dvh; } }
:root[data-trm-theme="dark"] {
    --trm-bg: #101110;
    --trm-bg-rgb: 16, 17, 16;
    --trm-surface: #191b18;
    --trm-surface-soft: #22251f;
    --trm-text: #f2efe7;
    --trm-text-muted: #b9b5aa;
    --trm-border: #393c34;
    --trm-control-border: #7d8074;
    --trm-link: #e6e3d8;
    --trm-button-bg: #e9e5d9;
    --trm-button-text: #151713;
    --trm-button-hover: #d4d0c3;
    --trm-focus: #c5cbb5;
    --trm-error: #ffaaa0;
    color-scheme: dark;
}
:root[data-trm-theme="light"] { color-scheme: light; }

/* Map Source's semantic variables without redefining the white/black used on photographs. */
:root[data-trm-theme],
:root[data-trm-theme] :is(.gh-navigation, .gh-footer).has-accent-color {
    --background-color: var(--trm-bg);
    --color-primary-text: var(--trm-text);
    --color-darker-gray: var(--trm-text);
    --color-secondary-text: var(--trm-text-muted);
    --color-dark-gray: var(--trm-text-muted);
    --color-darkgrey: var(--trm-text-muted);
    --color-lighter-gray: var(--trm-surface-soft);
    --color-light-gray: var(--trm-border);
    --color-mid-gray: var(--trm-control-border);
    --color-border: var(--trm-border);
    --color-dark-border: var(--trm-control-border);
}
:root[data-trm-theme] body { background: var(--trm-bg); color: var(--trm-text); }
:root[data-trm-theme] ::selection { background: var(--trm-text); color: var(--trm-bg); }

/* A quiet bottom strip keeps the capsule off the visible reading area.
   Normal document scrolling, browser restoration, anchors and the menu are preserved.
   End padding lets the very last link scroll completely above the strip. */
:root[data-trm-mode-ui] {
    scroll-padding-bottom: calc(var(--trm-dock-total) + 24px);
    scrollbar-color: var(--trm-control-border) var(--trm-bg);
}
:root[data-trm-mode-ui] body { padding-bottom: var(--trm-dock-total); }
:root[data-trm-mode-ui] :is(input, textarea, select, [contenteditable="true"]) { scroll-margin-block: 90px; }

/* Actual TRM selectors from the supplied theme. */
:root[data-trm-theme] :is(.trm-site-header, .trm-menu-panel, .trm-post, .trm-latest, .gh-footer, .gh-navigation) {
    background-color: var(--trm-bg);
    color: var(--trm-text);
}
:root[data-trm-theme] :is(.trm-post-title, .trm-post-category, .trm-post-content, .trm-site-logo, .trm-menu-close, .trm-menu-primary a, .trm-menu-secondary a, .trm-menu-secondary button) { color: var(--trm-text); }
:root[data-trm-theme] :is(.trm-post-byline, .trm-post-date, .trm-site-subscribe, .trm-list-row .trm-list-byline, .trm-list-row time, figcaption) { color: var(--trm-text-muted); }
:root[data-trm-theme] :is(.trm-header-rule, .trm-menu-top, .trm-menu-divider, .trm-list-row) { border-color: var(--trm-border); }
:root[data-trm-theme] .trm-post-divider { background: var(--trm-control-border); }
:root[data-trm-theme] .trm-menu-button span { background: var(--trm-text); }
:root[data-trm-theme] .trm-menu-panel { z-index: 30; /* This TRM menu is in document flow. */ }
:root[data-trm-theme] :is(.trm-menu-button, .trm-menu-close, .trm-menu-secondary button):focus-visible { outline: 2px solid var(--trm-focus); outline-offset: 5px; }
:root[data-trm-theme] .gh-dropdown { background: var(--trm-surface); border: 1px solid var(--trm-border); box-shadow: none; }
:root[data-trm-theme] .gh-dropdown li a { color: var(--trm-text) !important; /* Source sets this exact selector !important. */ }

/* Article prose inherits its surface. Do not override authored text colors inside visual cards. */
:root[data-trm-theme] .gh-content { color: var(--trm-text); }
:root[data-trm-theme] .gh-content > :is(h1,h2,h3,h4,h5,h6,p,ul,ol,dl) { color: var(--trm-text); }
:root[data-trm-theme] .gh-content > :is(p,ul,ol,dl,blockquote) a,
:root[data-trm-theme] :is(figcaption a, .trm-archive-link) { color: var(--trm-link); text-decoration: underline; text-underline-offset: .16em; }
:root[data-trm-theme] :is(blockquote:not([class]), .kg-blockquote-alt) { color: var(--trm-text); border-color: var(--trm-control-border); }
:root[data-trm-theme] .gh-content hr { background: var(--trm-border); }
:root[data-trm-theme] .gh-content :is(pre, :not(pre) > code) { color: var(--trm-text); background: var(--trm-surface-soft); }
:root[data-trm-theme] .gh-content pre code { background: transparent; color: inherit; }
:root[data-trm-theme] .gh-content table { color: var(--trm-text); border-color: var(--trm-border); }
:root[data-trm-theme] .gh-content table th { color: var(--trm-text); background: var(--trm-surface-soft); }
:root[data-trm-theme] .gh-content table :is(th,td) { border-color: var(--trm-border); }
:root[data-trm-theme] .kg-embed-card { color: var(--trm-text-muted); }
:root[data-trm-theme] :is(.kg-nft-card a.kg-nft-card-container, .kg-nft-metadata) { background: var(--trm-surface); color: var(--trm-text); }
:root[data-trm-theme] :is(.kg-nft-title, .kg-nft-creator span, .kg-nft-card p.kg-nft-description) { color: var(--trm-text); }
:root[data-trm-theme] .kg-nft-creator { color: var(--trm-text-muted); }

/* Native Ghost cards; inline colors on artwork/header/photo cards retain their editorial intent. */
:root[data-trm-theme] :is(.kg-toggle-card, .kg-audio-card, .kg-file-card a.kg-file-card-container, .kg-product-card .kg-product-card-container),
:root[data-trm-theme] .kg-bookmark-card a.kg-bookmark-container {
    color: var(--trm-text);
    background-color: var(--trm-surface);
    border-color: var(--trm-border);
    box-shadow: inset 0 0 0 1px var(--trm-border);
}
:root[data-trm-theme] .kg-bookmark-card a.kg-bookmark-container,
:root[data-trm-theme] .kg-bookmark-card a.kg-bookmark-container:hover {
    background: var(--trm-surface) !important; /* Source uses !important for this card. */
    color: var(--trm-text) !important;
}
:root[data-trm-theme] :is(.kg-bookmark-description, .kg-bookmark-metadata, .kg-file-card-caption, .kg-file-card-metadata, .kg-audio-current-time, .kg-audio-time) { color: var(--trm-text-muted); }
:root[data-trm-theme] :is(.kg-bookmark-description, .kg-bookmark-metadata > *:not(img), .kg-file-card-caption, .kg-file-card-filesize) { opacity: 1; /* Already muted by the palette; do not reduce text contrast twice. */ }
:root[data-trm-theme] :is(.kg-audio-title, .kg-toggle-heading-text, .kg-product-card-title, .kg-file-card-title) { color: var(--trm-text); }
:root[data-trm-theme] .kg-file-card-icon svg { color: var(--trm-text); }
:root[data-trm-theme] .kg-callout-card.kg-callout-card-grey { background: var(--trm-surface-soft); color: var(--trm-text); }
:root[data-trm-theme] :is(.kg-callout-card:not(.kg-callout-card-accent), .kg-product-card-description) a { color: var(--trm-link); }
:root[data-trm-theme] .kg-toggle-content a { color: var(--trm-link); }
:root[data-trm-theme] .kg-toggle-card-icon { color: var(--trm-text); }
:root[data-trm-theme] .kg-toggle-card-icon svg { stroke: currentColor; }
:root[data-trm-theme] .kg-audio-card button { color: var(--trm-text); }
:root[data-trm-theme] .kg-audio-card input { accent-color: var(--trm-text); }
:root[data-trm-theme] .kg-audio-player-container input[type="range"] { color: var(--trm-text); }
:root[data-trm-theme] .kg-audio-player-container input[type="range"]::-webkit-slider-thumb { background: var(--trm-text); }
:root[data-trm-theme] .kg-audio-player-container input[type="range"]::-moz-range-thumb { background: var(--trm-text); }
:root[data-trm-theme] .kg-audio-thumbnail.placeholder { background: var(--trm-button-bg); color: var(--trm-button-text); }
:root[data-trm-theme] .kg-audio-thumbnail.placeholder svg { fill: currentColor; }
:root[data-trm-theme] :is(.kg-audio-play-icon, .kg-audio-pause-icon, .kg-audio-mute-icon, .kg-audio-unmute-icon) svg { fill: currentColor; }

/* Ghost signup cards with no background image: UI colors override the card's inline UI styles.
   Background-image/header/callout-color cards retain their authored color pair. */
:root[data-trm-theme] .kg-signup-card:not(:has(.kg-signup-card-image)) { background-color: var(--trm-surface) !important; }
:root[data-trm-theme] .kg-signup-card:not(:has(.kg-signup-card-image)) :is(.kg-signup-card-heading,.kg-signup-card-subheading,.kg-signup-card-disclaimer) { color: var(--trm-text) !important; }
:root[data-trm-theme] :is(.gh-form, .gh-form:hover, .kg-signup-card-fields) { background: var(--trm-surface-soft); color: var(--trm-text); }
:root[data-trm-theme] :is(.gh-form-input, .kg-signup-card-input) { color: var(--trm-text); background: transparent; }
:root[data-trm-theme] :is(.gh-form-input, .kg-signup-card-input)::placeholder { color: var(--trm-text-muted); opacity: 1; }
:root[data-trm-theme] :is(.gh-form-input, .kg-signup-card-input):focus-visible { outline: 2px solid var(--trm-focus); outline-offset: -3px; }
:root[data-trm-theme] .gh-content :is(input:not([type="hidden"]):not([type="range"]), textarea, select) { color: var(--trm-text); background-color: var(--trm-surface); border-color: var(--trm-control-border); }
:root[data-trm-theme] :is(.gh-button, .kg-button-card .kg-btn, .kg-product-card a.kg-product-card-button) { background: var(--trm-button-bg); color: var(--trm-button-text); }
:root[data-trm-theme] .kg-signup-card-button { background: var(--trm-button-bg) !important; color: var(--trm-button-text) !important; }
:root[data-trm-theme] .kg-signup-card-fields { border-color: var(--trm-control-border); }
:root[data-trm-theme] :is(.gh-button, .kg-signup-card-button, .kg-btn, .kg-toggle-card-icon):focus-visible { outline: 2px solid var(--trm-focus); outline-offset: 3px; }
:root[data-trm-theme] .gh-form > button.gh-button { background: var(--trm-button-bg); color: var(--trm-button-text); }
:root[data-trm-theme] [data-members-error] { color: var(--trm-error); }

/* Native paywall remains server-enforced; only its presentation changes. */
:root[data-trm-theme] .trm-public-preview::after { background: linear-gradient(to bottom, rgba(var(--trm-bg-rgb),0), var(--trm-bg)); }
:root[data-trm-theme] .gh-content .trm-paywall { color: var(--trm-text); background: var(--trm-bg); }
:root[data-trm-theme] .gh-content .trm-paywall-title { color: var(--trm-text); }
:root[data-trm-theme] .gh-content .trm-paywall-description { color: var(--trm-text-muted); }
:root[data-trm-theme] .gh-content .trm-paywall-button { background: var(--trm-button-bg); color: var(--trm-button-text); border-color: var(--trm-button-bg); }
:root[data-trm-theme] .gh-content .trm-paywall-button:hover { background: var(--trm-button-hover); }
:root[data-trm-theme] .trm-paywall-signin a { color: var(--trm-link); }
:root[data-trm-theme] .trm-paywall a:focus-visible { outline-color: var(--trm-focus); }

/* Optional hooks for custom HTML cards you own; these are TRM attributes, not Ghost classes. */
:root[data-trm-theme] [data-trm-surface] { background-color: var(--trm-surface); color: var(--trm-text); border-color: var(--trm-border); }
:root[data-trm-theme] [data-trm-surface="soft"] { background-color: var(--trm-surface-soft); }
:root[data-trm-theme] [data-trm-surface] a { color: var(--trm-link); }

/* Asset swapping, with an accessible wordmark fallback if no dark asset is configured. */
.trm-mode-logo-dark { display: none; }
:root[data-trm-theme="dark"] .trm-mode-logo-light { display: none; }
:root[data-trm-theme="dark"] .trm-mode-logo-dark { display: block; }
.trm-mode-wordmark { display: block; font: 500 13px/1.5 Arial, Helvetica, sans-serif; letter-spacing: .24em; text-transform: uppercase; color: var(--trm-text); white-space: normal; text-align: center; }
.trm-site-logo .trm-mode-wordmark { width: 340px; max-width: 58vw; }
.gh-footer-logo { min-height: 40px; display: flex; align-items: center; }
.gh-footer-logo .trm-mode-wordmark { font-size: 11px; line-height: 1.3; letter-spacing: .16em; }

/* Floating capsule, 56 × 30 visual / 56 × 46 hit target. Native button semantics. */
.trm-theme-dock { display: none; }
:root[data-trm-mode-ui] .trm-theme-dock {
    position: fixed;
    display: flex;
    justify-content: flex-end;
    align-items: flex-start;
    inset: calc(var(--trm-viewport-top) + var(--trm-viewport-height) - var(--trm-dock-total)) 0 auto;
    height: calc(var(--trm-dock-height) + env(safe-area-inset-bottom, 0px));
    padding: 6px max(24px, env(safe-area-inset-right, 0px)) 0;
    background: var(--trm-bg);
    z-index: 1200; /* Above Ghost card controls; below this theme's PhotoSwipe (1500) and Ghost Portal. */
}
.trm-theme-toggle[hidden] { display: none !important; }
.trm-theme-toggle {
    appearance: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 56px;
    width: 56px;
    height: 46px;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    color: var(--trm-text);
    cursor: pointer;
    touch-action: manipulation;
    -webkit-tap-highlight-color: transparent;
}
.trm-theme-toggle:focus-visible { outline: 2px solid var(--trm-focus); outline-offset: 3px; border-radius: 17px; }
.trm-theme-track { position: relative; display: block; width: 56px; height: 30px; border: 1px solid var(--trm-control-border); border-radius: 16px; background: var(--trm-surface); }
.trm-theme-thumb { position: absolute; width: 24px; height: 24px; inset: 2px auto auto 2px; border-radius: 50%; background: var(--trm-text); transform: translateX(0); transition: transform 200ms cubic-bezier(.25,.6,.3,1); }
.trm-theme-icon { position: absolute; top: 6px; width: 16px; height: 16px; transition: color 200ms ease; }
.trm-theme-sun { left: 6px; color: var(--trm-bg); }
.trm-theme-moon { right: 6px; color: var(--trm-text-muted); }
:root[data-trm-theme="dark"] .trm-theme-thumb { transform: translateX(26px); }
:root[data-trm-theme="dark"] .trm-theme-sun { color: var(--trm-text-muted); }
:root[data-trm-theme="dark"] .trm-theme-moon { color: var(--trm-bg); }
.trm-theme-toggle:hover .trm-theme-track { border-color: var(--trm-text); }

@media (max-width: 800px) {
    :root { --trm-dock-height: 72px; }
    :root[data-trm-mode-ui] .trm-theme-dock { padding-inline: max(16px, env(safe-area-inset-right, 0px)); }
    .trm-site-logo .trm-mode-wordmark { font-size: 9px; max-width: 55vw; }
}
@media (max-height: 480px) { :root { --trm-dock-height: 58px; } }
@media (prefers-reduced-motion: reduce) { .trm-theme-thumb, .trm-theme-icon { transition: none; } }
@media (forced-colors: active) {
    .trm-theme-track { border-color: ButtonText; background: Canvas; }
    .trm-theme-thumb { background: Highlight; forced-color-adjust: none; }
    .trm-theme-icon { color: ButtonText; }
    .trm-theme-toggle:focus-visible { outline-color: Highlight; }
}
/* Printing stays on paper, regardless of a saved screen preference. */
@media print {
    :root[data-trm-theme] { --trm-bg: #fff; --trm-bg-rgb: 255,255,255; --trm-surface: #fff; --trm-surface-soft: #eee; --trm-text: #111; --trm-text-muted: #444; --trm-border: #ccc; --trm-link: #111; color-scheme: light; }
    :root[data-trm-mode-ui] body { padding-bottom: 0; }
    :root[data-trm-mode-ui] .trm-theme-dock { display: none; }
    :root[data-trm-theme] .trm-mode-logo-light { display: block; }
    :root[data-trm-theme] .trm-mode-logo-dark { display: none; }
}
