@import "./tokens.css"; @tailwind base; @tailwind components; @tailwind utilities; @layer base { html { font-size: 100%; } @media (min-width: theme('screens.lg')) { html { font-size: 75%; } } *, *::before, *::after { scrollbar-width: thin; scrollbar-color: var(--scrollbar-thumb) transparent; } *::-webkit-scrollbar { width: var(--scrollbar-width); height: var(--scrollbar-width); } *::-webkit-scrollbar-track { background: var(--scrollbar-track); } *::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: var(--radius-sm); } *::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-thumb-hover); } body { font-family: var(--font-family-sans); background-color: var(--color-page); color: var(--color-text-strong); line-height: 1.5; margin: 0; padding: 0; overflow-x: hidden; } #nip71TagsFieldset > legend, #editNip71TagsFieldset > legend { margin-left: 0; padding: 0; } #app { background-color: var(--color-page); color: inherit; } html.modal-open, body.modal-open { overflow: hidden; height: 100%; } body.modal-open #app { overflow: hidden; } body.modal-open #sidebar, body.modal-open #sidebarOverlay { pointer-events: none; opacity: 0; visibility: hidden; } body.modal-open #sidebar { z-index: var(--z-sidebar-overlay); } body.modal-open #sidebarOverlay { z-index: calc(var(--z-sidebar-overlay) - 1); } #sidebar.is-modal-hidden, #sidebarOverlay.is-modal-hidden { pointer-events: none; opacity: 0; visibility: hidden; } [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak, .ng-hide:not(.ng-hide-animate) { display: none !important; } ng\:form { display: block; } .ng-animate-shim { visibility: hidden; } .ng-anchor { position: absolute; } } @layer components { .ds-header { @apply flex items-center justify-start py-sm; } .ds-metric-probe { position: absolute; top: 0; left: 0; visibility: hidden; pointer-events: none; contain: layout size style; inline-size: 0; block-size: var(--ds-metric-probe-length, 0); overflow: hidden; } .ds-header__logo { @apply h-2xl-plus w-auto max-w-none; } .focus-ring { @apply outline-none focus-visible:ring-2 focus-visible:ring-info focus-visible:ring-opacity-70 focus-visible:ring-offset-2 focus-visible:ring-offset-surface focus-visible:transition-shadow focus-visible:duration-fast focus-visible:ease-out; } .bv-logo { --logo-wordmark-color: var(--color-logo-wordmark); --logo-accent-color: var(--color-logo-accent); --logo-background-color: var(--color-logo-background); } .bv-logo[data-variant="inverse"] { --logo-wordmark-color: var(--color-logo-wordmark-inverse); --logo-background-color: var(--color-logo-background-inverse); } .bv-logo[data-wordmark="current"] { --logo-wordmark-color: currentColor; } .bv-logo[data-accent="current"] { --logo-accent-color: currentColor; } .bv-logo[data-background="transparent"] { --logo-background-color: transparent; } .bv-logo__wordmark { fill: var(--logo-wordmark-color); color: var(--logo-wordmark-color); } .bv-logo__accent { fill: var(--logo-accent-color); color: var(--logo-accent-color); } .bv-logo__background { fill: var(--logo-background-color); color: var(--logo-background-color); } .markdown-prose { @apply prose max-w-none leading-relaxed text-text-strong; } .markdown-prose :where(pre, code) { @apply font-mono; } [data-floating-anchor="true"] { anchor-name: --floating-panel; } [data-floating-panel] { --floating-transform-origin-inline: 50%; --floating-transform-origin-block: 50%; --floating-fallback-top: auto; --floating-fallback-left: auto; position: fixed; inset: auto; top: var(--floating-fallback-top); left: var(--floating-fallback-left); right: auto; bottom: auto; transform-origin: var(--floating-transform-origin-inline) var(--floating-transform-origin-block); } [data-floating-panel][data-floating-strategy="absolute"] { position: absolute; } [data-floating-panel][data-floating-mode="anchor"] { position-anchor: --floating-panel; } [data-floating-panel][data-floating-placement="top"] { --floating-transform-origin-block: 100%; } [data-floating-panel][data-floating-placement="bottom"] { --floating-transform-origin-block: 0%; } [data-floating-panel][data-floating-placement="left"] { --floating-transform-origin-inline: 100%; } [data-floating-panel][data-floating-placement="right"] { --floating-transform-origin-inline: 0%; } [data-floating-panel][data-floating-placement="top"][data-floating-alignment="start"], [data-floating-panel][data-floating-placement="bottom"][data-floating-alignment="start"], [data-floating-panel][data-floating-placement="top"][data-floating-alignment="end"], [data-floating-panel][data-floating-placement="bottom"][data-floating-alignment="end"] { --floating-transform-origin-inline: 50%; } [data-floating-panel][data-floating-dir="ltr"][data-floating-placement="top"][data-floating-alignment="start"], [data-floating-panel][data-floating-dir="ltr"][data-floating-placement="bottom"][data-floating-alignment="start"] { --floating-transform-origin-inline: 0%; } [data-floating-panel][data-floating-dir="ltr"][data-floating-placement="top"][data-floating-alignment="end"], [data-floating-panel][data-floating-dir="ltr"][data-floating-placement="bottom"][data-floating-alignment="end"] { --floating-transform-origin-inline: 100%; } [data-floating-panel][data-floating-dir="rtl"][data-floating-placement="top"][data-floating-alignment="start"], [data-floating-panel][data-floating-dir="rtl"][data-floating-placement="bottom"][data-floating-alignment="start"] { --floating-transform-origin-inline: 100%; } [data-floating-panel][data-floating-dir="rtl"][data-floating-placement="top"][data-floating-alignment="end"], [data-floating-panel][data-floating-dir="rtl"][data-floating-placement="bottom"][data-floating-alignment="end"] { --floating-transform-origin-inline: 0%; } [data-floating-panel][data-floating-placement="left"][data-floating-alignment="start"], [data-floating-panel][data-floating-placement="right"][data-floating-alignment="start"] { --floating-transform-origin-block: 0%; } [data-floating-panel][data-floating-placement="left"][data-floating-alignment="end"], [data-floating-panel][data-floating-placement="right"][data-floating-alignment="end"] { --floating-transform-origin-block: 100%; } .popover { @apply relative inline-flex; } .popover__panel { @apply focus-ring absolute left-0 top-full z-overlay-floating mt-2 min-w-menu max-w-popover-safe origin-top rounded-lg border border-border border-opacity-40 bg-panel px-popup-inline py-popup-block text-sm text-text shadow-lg transition-transform transition-opacity duration-[var(--motion-duration-base)] ease-[var(--motion-ease-out)] opacity-0 scale-95 pointer-events-none; } .popover__panel[data-state="open"] { @apply pointer-events-auto opacity-100 scale-100; } .ds-overlay-backdrop { position: fixed; inset: 0; display: flex; align-items: center; justify-content: center; background: var(--overlay-backdrop-color); backdrop-filter: blur(var(--overlay-backdrop-blur)); -webkit-backdrop-filter: blur(var(--overlay-backdrop-blur)); } .popover__panel[data-variant="zap"] { background: var(--color-overlay-veil); color: var(--color-subtle); border: var(--border-width-hairline) solid var(--color-border-translucent-stronger); box-shadow: var(--shadow-popover-zap); backdrop-filter: blur(var(--popover-backdrop-blur)); -webkit-backdrop-filter: blur(var(--popover-backdrop-blur)); } .btn { @apply focus-ring inline-flex items-center justify-center gap-2 rounded-full border border-transparent bg-info-strong px-5 py-2.5 text-base font-semibold text-white shadow-lg transition duration-base ease-in-out; } .btn:hover { @apply bg-info; } .btn:focus-visible { @apply bg-info-pressed; } .btn:disabled { @apply pointer-events-none cursor-not-allowed opacity-60 shadow-none; } .progress, [data-progress-meter] { --progress-height: var(--progress-height-md); --progress-track: var(--progress-track-color); --progress-fill: var(--progress-fill-color); --progress-radius-current: var(--progress-radius); display: block; width: 100%; height: var(--progress-height); border: none; border-radius: var(--progress-radius-current); overflow: hidden; background-color: var(--progress-track); appearance: none; } .progress::-webkit-progress-bar, [data-progress-meter]::-webkit-progress-bar { background-color: var(--progress-track); border-radius: var(--progress-radius-current); } .progress::-webkit-progress-value, [data-progress-meter]::-webkit-progress-value { background-color: var(--progress-fill); border-radius: var(--progress-radius-current); transition: width var(--progress-transition-duration) var(--progress-transition-ease); } .progress::-moz-progress-bar, [data-progress-meter]::-moz-progress-bar { background-color: var(--progress-fill); border-radius: var(--progress-radius-current); transition: width var(--progress-transition-duration) var(--progress-transition-ease); } .progress[data-variant="surface"], [data-progress-meter][data-variant="surface"], .progress.progress--surface, [data-progress-meter].progress--surface { --progress-track: var(--color-panel); } .progress[data-variant="accent"], [data-progress-meter][data-variant="accent"], .progress.progress--accent, [data-progress-meter].progress--accent { --progress-fill: var(--color-info-strong); } .progress[data-variant="blog"], [data-progress-meter][data-variant="blog"], .progress.progress--blog, [data-progress-meter].progress--blog { --progress-height: var(--blog-carousel-progress-height); --progress-track: var(--blog-carousel-progress-track); --progress-fill: var(--blog-carousel-progress-active); --progress-radius-current: var(--blog-carousel-progress-radius); } .btn-ghost { @apply btn border border-border border-opacity-60 bg-transparent text-text shadow-none; } .btn-ghost:hover { @apply bg-panel-hover text-text; } .btn-ghost:focus-visible { @apply bg-panel-hover; } .btn-ghost:disabled { @apply pointer-events-none opacity-50 shadow-none; } .btn-ghost[data-variant="critical"] { @apply border border-critical border-opacity-60 text-critical; } .btn-ghost[data-variant="critical"]:hover, .btn-ghost[data-variant="critical"]:focus-visible { @apply bg-critical bg-opacity-20 text-critical-strong; } .btn-ghost[data-state="active"], .btn-ghost[aria-pressed="true"] { @apply border-transparent bg-primary text-white shadow-md; } .btn-ghost[data-state="active"]:hover, .btn-ghost[data-state="active"]:focus-visible, .btn-ghost[aria-pressed="true"]:hover, .btn-ghost[aria-pressed="true"]:focus-visible { @apply bg-info-strong; } .modal-progress { width: var(--progress-width, 0%); transition: width var(--motion-duration-base, 160ms) var(--motion-ease-out, ease-out); } .cloudflare-progress__fill { width: var(--cloudflare-progress-width, 0%); transition: width var(--motion-duration-base, 160ms) var(--motion-ease-out, ease-out); } .blog-embed-shell { height: var(--blog-embed-height); } /* * Blog carousel component styles * Tokens consumed here are defined in css/tokens.css under the * "Blog carousel tokens" section: * --blog-carousel-gap * --blog-carousel-slide-radius * --blog-carousel-slide-min-height * --blog-carousel-slide-background * --blog-carousel-slide-foreground * --blog-carousel-slide-scale-inactive * --blog-carousel-progress-height * --blog-carousel-progress-radius * --blog-carousel-progress-track * --blog-carousel-progress-active */ .blog-carousel { position: relative; display: grid; gap: var(--blog-carousel-gap); --blog-carousel-index: 0; --blog-carousel-track-duration: var(--motion-duration-slow, 320ms); --blog-carousel-track-ease: var(--motion-ease-out, ease-out); --blog-carousel-slide-duration: var(--motion-duration-base, 160ms); --blog-carousel-progress-duration: var(--motion-duration-slow, 320ms); --blog-carousel-per-page: 1; } .blog-carousel[data-transition="instant"] { --blog-carousel-track-duration: 0s; --blog-carousel-slide-duration: 0s; } .blog-carousel__viewport { position: relative; overflow: hidden; border-radius: var(--blog-carousel-slide-radius); } .blog-carousel__track { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, calc(100% / var(--blog-carousel-per-page))); gap: var(--blog-carousel-gap); width: 100%; margin: 0; padding: 0; list-style: none; transform: translate3d(calc(var(--blog-carousel-index) * -100%), 0, 0); transition: transform var(--blog-carousel-track-duration) var(--blog-carousel-track-ease); will-change: transform; } .blog-carousel__track[data-transition="instant"] { --blog-carousel-track-duration: 0s; } .blog-carousel[data-index="0"] { --blog-carousel-index: 0; } .blog-carousel[data-index="1"] { --blog-carousel-index: 1; } .blog-carousel[data-index="2"] { --blog-carousel-index: 2; } .blog-carousel[data-index="3"] { --blog-carousel-index: 3; } .blog-carousel[data-index="4"] { --blog-carousel-index: 4; } .blog-carousel[data-index="5"] { --blog-carousel-index: 5; } .blog-carousel[data-index="6"] { --blog-carousel-index: 6; } .blog-carousel[data-index="7"] { --blog-carousel-index: 7; } .blog-carousel[data-index="8"] { --blog-carousel-index: 8; } .blog-carousel__slide { position: relative; display: grid; align-content: stretch; min-height: var(--blog-carousel-slide-min-height); border-radius: var(--blog-carousel-slide-radius); background: var(--blog-carousel-slide-background); color: var(--blog-carousel-slide-foreground); overflow: hidden; box-shadow: var(--shadow-md); opacity: 0.55; transform: scale(var(--blog-carousel-slide-scale-inactive)); transition: opacity var(--blog-carousel-slide-duration) var(--motion-ease-in-out, ease-in-out), transform var(--blog-carousel-slide-duration) var(--blog-carousel-track-ease), box-shadow var(--blog-carousel-slide-duration) var(--blog-carousel-track-ease); } .blog-carousel__slide[data-active="true"] { opacity: 1; transform: scale(1); box-shadow: var(--shadow-lg); z-index: 1; } .blog-carousel__slide[data-state="leaving"] { opacity: 0.25; } .blog-carousel__slide[data-inert="true"] { pointer-events: none; } .blog-carousel[data-per-page="1"] { --blog-carousel-per-page: 1; } .blog-carousel[data-per-page="2"] { --blog-carousel-per-page: 2; } .blog-carousel[data-per-page="3"] { --blog-carousel-per-page: 3; } .blog-carousel[data-per-page="4"] { --blog-carousel-per-page: 4; } .blog-carousel__controls { display: flex; justify-content: flex-end; gap: var(--space-sm); } .blog-progress { position: relative; display: flex; align-items: center; width: 100%; } .blog-progress [data-progress-meter] { flex: 1 1 auto; } @media (prefers-reduced-motion: reduce) { .blog-carousel { --blog-carousel-track-duration: 0s; --blog-carousel-slide-duration: 0s; --blog-carousel-progress-duration: 0s; } .blog-carousel__track { transition-duration: 0s; } .blog-carousel__slide { transition-duration: 0s; } } .blog-emoji-showdown { font-family: var(--font-family-mono); text-decoration-line: underline; text-decoration-style: dashed; text-decoration-color: var(--color-blog-teal-accent); text-underline-position: under; } .blog-task-list-item { list-style-type: none; } .blog-task-checkbox { margin: 0 0.35em 0.25em -1.6em; vertical-align: middle; } .blog-table-align { text-align: left; } .blog-table-align--left { text-align: left; } .blog-table-align--right { text-align: right; } .blog-table-align--center { text-align: center; } .blog-ztr-watermark { float: right; opacity: 0.2; } .badge { @apply inline-flex items-center gap-1 rounded-full border border-status-neutral-border bg-status-neutral-surface px-3 py-1 text-2xs font-semibold uppercase tracking-extra-wide text-status-neutral-on; } .badge[data-variant="info"] { @apply border-status-info-border bg-status-info-surface text-status-info-on; } .badge[data-variant="success"] { @apply border-status-success-border bg-status-success-surface text-status-success-on; } .badge[data-variant="warning"] { @apply border-status-warning-border bg-status-warning-surface text-status-warning-on; } .badge[data-variant="critical"] { @apply border-status-danger-border bg-status-danger-surface text-status-danger-on; } .badge[data-variant="private"] { @apply border-status-private-border bg-status-private-surface text-status-private-on; } .badge[data-variant="neutral"] { @apply border-status-neutral-border bg-status-neutral-surface text-status-neutral-on; } .pill { @apply inline-flex items-center gap-2 rounded-full border border-status-neutral-border bg-status-neutral-surface px-3 py-1 text-xs font-medium text-status-neutral-on; } .pill[data-size="compact"] { @apply px-2 py-0.5 text-2xs; } .pill[data-variant="info"] { @apply border-status-info-border bg-status-info-surface text-status-info-on; } .pill[data-variant="success"] { @apply border-status-success-border bg-status-success-surface text-status-success-on; } .pill[data-variant="warning"] { @apply border-status-warning-border bg-status-warning-surface text-status-warning-on; } .pill[data-variant="critical"] { @apply border-status-danger-border bg-status-danger-surface text-status-danger-on; } .pill[data-variant="private"] { @apply border-status-private-border bg-status-private-surface text-status-private-on; } .pill[data-variant="neutral"] { @apply border-status-neutral-border bg-status-neutral-surface text-status-neutral-on; } .overlay-scrim { background-color: var(--surface-overlay); } .overlay-scrim[data-strength="muted"] { background-color: var(--surface-overlay-muted); } .overlay-scrim[data-strength="strong"] { background-color: var(--surface-overlay-strong); } .overlay-panel { background-color: var(--surface-overlay-panel); } .overlay-panel[data-variant="soft"] { background-color: var(--surface-overlay-panel-soft); } .overlay-panel[data-variant="glass"] { background-color: var(--surface-overlay-panel-glass); } .menu { @apply flex flex-col gap-1 py-2; } .menu__heading { @apply px-4 pb-2 text-xs font-semibold uppercase tracking-wide text-muted; } .menu__separator { @apply my-2 h-px bg-border bg-opacity-20; } .menu__item { @apply focus-ring relative flex w-full items-center gap-3 rounded-md px-4 py-2 text-sm font-medium text-text transition-colors duration-[var(--motion-duration-fast)] ease-[var(--motion-ease-in-out)]; } .menu__item:hover { @apply bg-panel-hover text-text; } .menu__item[data-state="active"] { @apply bg-info bg-opacity-20 text-info-strong; } .menu__item[data-variant="critical"] { @apply text-critical-strong; } .menu__item[data-variant="critical"]:hover { @apply bg-critical bg-opacity-20; } .menu__item:disabled, .menu__item[aria-disabled="true"] { @apply cursor-not-allowed bg-transparent text-muted opacity-60; } .menu__item:disabled:hover, .menu__item[aria-disabled="true"]:hover { @apply bg-transparent text-muted; } .card { --video-card-lift-translate-y: 0; --video-card-backdrop-opacity: 0; --video-card-backdrop-translate-y: 1.25rem; --video-card-backdrop-scale: 1.08; --video-card-backdrop-blur: var(--blur-thumbnail-blur); @apply focus-ring relative rounded-lg border border-transparent bg-card text-text shadow-md transition duration-base ease-in-out; transform: translate3d(0, var(--video-card-lift-translate-y), 0); transition-property: transform, box-shadow, border-color, background-color, color; will-change: transform; isolation: isolate; } .card::before { content: ""; position: absolute; inset: 0; z-index: 0; opacity: var(--video-card-backdrop-opacity); background-image: var(--video-card-thumb-url, none); background-position: center; background-repeat: no-repeat; background-size: cover; transform: translate3d(0, var(--video-card-backdrop-translate-y), 0) scale(var(--video-card-backdrop-scale)); filter: blur(var(--video-card-backdrop-blur)); transition: opacity var(--motion-duration-base) var(--motion-ease-in-out), transform var(--motion-duration-base) var(--motion-ease-in-out), filter var(--motion-duration-base) var(--motion-ease-in-out); pointer-events: none; will-change: opacity, transform, filter; } .card > * { position: relative; z-index: 1; } .card:hover, .card:focus-within { --video-card-lift-translate-y: -0.35rem; --video-card-backdrop-opacity: 0.85; --video-card-backdrop-translate-y: 0.15rem; --video-card-backdrop-scale: 1.12; --video-card-backdrop-blur: 24px; @apply shadow-lg; } .card:focus-visible { @apply border-info border-opacity-40 shadow-lg; } .card[data-state="critical"] { @apply border border-critical border-opacity-40 bg-card-critical; } .card[data-state="private"] { @apply bg-card-private shadow-lg; } .card[data-state="disabled"] { @apply opacity-60 shadow-none; } .form-control { @apply focus-ring block w-full rounded-md border border-border-subtle bg-surface-alt px-3 py-2 text-sm text-text shadow-sm transition duration-base ease-in-out placeholder:text-muted; } .form-control:hover { @apply border-border; } .form-control:focus-visible { @apply border-info-strong; } .form-control:disabled { @apply cursor-not-allowed bg-surface text-muted opacity-60; } .form-control:invalid { @apply border-critical border-opacity-60; } .form-control[data-state="locked"], .input[data-state="locked"], .textarea[data-state="locked"], .select[data-state="locked"], textarea.form-control[data-state="locked"], select.form-control[data-state="locked"] { @apply cursor-default border-border-sidebar-strong bg-overlay-panel-soft text-muted; } .form-control[data-state="locked"]:focus-visible, .input[data-state="locked"]:focus-visible, .textarea[data-state="locked"]:focus-visible, .select[data-state="locked"]:focus-visible, textarea.form-control[data-state="locked"]:focus-visible, select.form-control[data-state="locked"]:focus-visible { @apply border-border-sidebar-strong outline-none ring-0 ring-offset-0 shadow-none; } .form-control[data-state="locked"]:disabled, .input[data-state="locked"]:disabled, .textarea[data-state="locked"]:disabled, .select[data-state="locked"]:disabled, textarea.form-control[data-state="locked"]:disabled, select.form-control[data-state="locked"]:disabled { @apply cursor-default opacity-100; } .input { @apply form-control; } .textarea { @apply form-control min-h-[var(--form-textarea-min-height)] resize-y; } .select { @apply form-control appearance-none pr-10; --select-arrow-color: var(--color-border); background-image: linear-gradient(135deg, transparent 50%, var(--select-arrow-color) 50%), linear-gradient(45deg, var(--select-arrow-color) 50%, transparent 50%), linear-gradient(to right, var(--color-border-subtle), var(--color-border-subtle)); background-position: right var(--form-select-icon-offset) center, right var(--form-select-icon-gap) center, right var(--form-select-icon-hit-area) center; background-size: var(--form-select-icon-size) var(--form-select-icon-size), var(--form-select-icon-size) var(--form-select-icon-size), var(--form-select-divider-width) 60%; background-repeat: no-repeat; } .select:hover { --select-arrow-color: var(--color-border); } .select:focus-visible { --select-arrow-color: var(--color-info-strong); } .select:disabled { --select-arrow-color: var(--color-border-subtle); } .select:invalid { --select-arrow-color: var(--color-critical); } .checkbox { @apply focus-ring inline-flex h-5 w-5 cursor-pointer appearance-none items-center justify-center rounded border border-border-subtle bg-surface-alt text-white transition duration-base ease-in-out; } .checkbox:hover { @apply border-border; } .checkbox:disabled { @apply cursor-not-allowed border-border-subtle bg-surface text-muted opacity-60; } .checkbox::after { content: ""; @apply pointer-events-none h-2 w-3 border-b-2 border-r-2 border-white opacity-0 transition duration-base ease-in-out; transform: rotate(45deg) translateY(var(--form-checkbox-checkmark-offset)) scale(0.85); } .checkbox:checked, .checkbox[aria-checked="true"] { @apply border-info-strong bg-info-strong; } .checkbox:checked::after, .checkbox[aria-checked="true"]::after { @apply opacity-100; transform: rotate(45deg) translateY(var(--form-checkbox-checkmark-offset)) scale(1); } .switch { @apply focus-ring relative inline-flex h-6 w-11 cursor-pointer items-center rounded-full border border-border-subtle bg-border-subtle transition-colors duration-base ease-in-out; } .switch::before { content: ""; @apply pointer-events-none absolute left-0.5 top-1/2 h-5 w-5 -translate-y-1/2 transform rounded-full bg-surface shadow-md transition duration-base ease-in-out; } .switch:disabled { @apply cursor-not-allowed border-border-subtle bg-surface text-muted opacity-60; } .switch[aria-checked="true"], .switch.is-on { @apply border-info-strong bg-info-strong; } .switch[aria-checked="true"]::before, .switch.is-on::before { @apply translate-x-5; } @media (prefers-reduced-motion: reduce) { .form-control, .checkbox, .checkbox::after, .switch, .switch::before, .popover__panel, .menu__item { transition: none !important; } } .bv-modal { @apply fixed inset-0 z-[var(--z-modal-root)] flex items-center justify-center p-6 sm:p-8; } .bv-modal[hidden], .bv-modal.hidden { display: none !important; } .bv-modal__panel { @apply focus-ring relative z-[var(--z-modal-content)] w-full max-w-modal rounded-modal-xl border border-border-translucent px-8 pb-8 pt-7 text-left text-text shadow-modal transition duration-base ease-out; background-color: var(--color-modal-surface, var(--color-overlay-panel)); } .bv-modal__panel:focus-visible { @apply border-border-translucent-bright; } .bv-modal-backdrop { @apply absolute inset-0 z-[var(--z-modal-overlay)] backdrop-saturate-150; background-color: var(--color-modal-backdrop, var(--color-overlay-muted)); backdrop-filter: blur(var(--blur-modal-backdrop)); -webkit-backdrop-filter: blur(var(--blur-modal-backdrop)); } .bv-modal-backdrop[data-variant="veil"] { @apply backdrop-blur-3xl; background-color: var(--color-overlay-veil); } .bv-modal-backdrop[data-variant="muted"] { background-color: var(--color-overlay-muted); } .modal-sheet { @apply bv-modal__panel relative my-0 w-full overflow-hidden lg:max-w-4xl; max-width: var(--modal-sheet-inline-max); } .modal-header { @apply flex items-start justify-between gap-md px-8 pb-4 pt-7; background: transparent; border: 0; } .modal-header[data-variant="flush"] { @apply px-0 pb-0 pt-0; background: transparent; } .modal-header__title { @apply text-xl font-bold text-text; } .modal-close { @apply focus-ring flex h-10 w-10 items-center justify-center rounded-full bg-overlay-black bg-opacity-40 text-muted transition duration-base ease-out; } .modal-close:hover { @apply bg-overlay-black bg-opacity-60 text-text; } .modal-body { @apply space-y-5 px-8 pb-8 pt-2; } .modal-body { scrollbar-width: thin; } .modal-body::-webkit-scrollbar { width: var(--scrollbar-thin-width); } .modal-body::-webkit-scrollbar-track { background: transparent; } .modal-body::-webkit-scrollbar-thumb { background: var(--color-border-translucent); border-radius: var(--radius-full); } /* Modal embed containers ensure iframe wrappers respect modal sizing tokens. */ .modal-embed-frame { @apply flex h-modal-embed w-full max-h-modal-embed flex-col; } .modal-footer { @apply flex flex-col gap-3 px-8 pb-8 pt-4; } .modal-alert { @apply flex items-start gap-3 rounded-md border border-warning-strong border-opacity-60 px-4 py-3 text-sm text-warning-strong; backdrop-filter: blur(var(--blur-modal-alert)); background-color: var(--color-warning-glass); } .modal-alert__icon { @apply mt-0.5 h-5 w-5 flex-shrink-0 text-warning-strong; } .modal-tile { @apply rounded-xl border border-border-translucent bg-overlay-panel-soft px-5 py-4 text-sm text-text-frosted; background-color: var(--color-overlay-panel-glass-soft); } .modal-tile > h3 { @apply text-base font-semibold text-text; } .modal-primary { @apply btn w-full justify-center; } .grid-stack { @apply grid gap-lg; } .grid-stack[data-variant="cards"] { @apply grid-cols-1 sm:grid-cols-2 xl:grid-cols-3; } .grid-stack[data-orientation="vertical"] { @apply flex flex-col gap-md; } .bv-stack { @apply flex flex-col gap-lg; } .bv-stack--tight { @apply gap-md; } .bv-grid-video { @apply grid gap-xl py-lg; grid-template-columns: repeat(auto-fill, minmax(var(--grid-card-min-width), 1fr)); } .card[data-alert="nsfw-owner"] { @apply border border-critical border-opacity-40 bg-black; } .card[data-alert="nsfw-owner"]:hover { @apply border-opacity-60 shadow-lg; } .card img[data-thumbnail-state="blurred"] { @apply transition duration-base ease-in-out; filter: blur(var(--blur-thumbnail-blur)); transform: scale(1.05); } .card[data-owner-is-viewer="true"][data-url-health-state="offline"][data-stream-health-state="unhealthy"] { @apply border border-critical border-opacity-40 bg-card-critical; } .video-visibility-toggle { @apply inline-flex items-center gap-1 rounded-full border border-border bg-panel px-1 py-1; } .video-visibility-toggle__option { @apply inline-flex items-center justify-center rounded-full border border-transparent bg-panel px-3 py-2 text-xs font-semibold uppercase text-muted transition duration-base ease-in-out; } .video-visibility-toggle__option:not(.is-disabled):hover { @apply bg-panel-hover text-text; } .video-visibility-toggle__option[data-active="true"] { @apply border border-info border-opacity-60 text-text shadow-lg; } .video-visibility-toggle__option.is-disabled { @apply cursor-not-allowed opacity-45; } .video-modal__container { @apply flex h-full min-h-screen w-full flex-1 flex-col; } .player-modal__container { @apply video-modal__container; } #playerModal > .bv-modal__panel { max-width: none; width: 100%; height: 100%; padding: 0; border-radius: 0; box-shadow: none; border: none; background: transparent; display: flex; align-items: stretch; } .video-modal__panel { position: relative; z-index: var(--z-modal-content); display: flex; flex: 1 1 auto; width: 100%; min-height: 100%; flex-direction: column; overflow: visible; padding: 0; margin: 0; border: none; border-radius: 0; background-color: var(--color-surface); box-shadow: none; } #playerModal .watch-container { width: 100%; max-width: var(--layout-player-max-width); margin-inline: auto; padding-inline: clamp(var(--space-md), 3vw, var(--space-xl)); } #playerModal .modal-info-panel { display: flex; flex-direction: column; gap: var(--space-lg); } #playerModal h2#videoTitle { margin: 0; font-size: clamp( var(--font-size-xl), calc(var(--font-size-modal-title-base) + 0.5vw), var(--font-size-xl-plus) ); font-weight: 600; line-height: 1.3; color: var(--color-text); } #playerModal .modal-meta { font-size: var(--font-size-sm); line-height: 1.4; color: var(--color-text-muted); } #playerModal .modal-view-count { font-weight: 600; color: var(--color-text); } #playerModal .channel-card { display: flex; align-items: center; gap: var(--space-md); padding: var(--space-md-plus) var(--space-lg); border-radius: var(--radius-xl); border: var(--border-width-hairline) solid var(--color-border-translucent); background-color: var(--color-surface); box-shadow: var(--shadow-sm); } @media (max-width: theme('screens.xs')) { #playerModal .modal-nav .icon-button { width: var(--space-xl); height: var(--space-xl); min-width: var(--space-xl); min-height: var(--space-xl); } #playerModal .watch-container { padding-inline: var(--space-sm); } #playerModal .channel-card { gap: var(--space-sm); padding: var(--space-sm) var(--space-md); } } #playerModal .channel-card__avatar { flex-shrink: 0; width: var(--avatar-size-lg); height: var(--avatar-size-lg); border-radius: var(--radius-full); overflow: hidden; background-color: var(--color-border-subtle); } #playerModal .channel-card__avatar img { display: block; width: 100%; height: 100%; object-fit: cover; } #playerModal .channel-card__name { margin: 0; font-size: var(--font-size-lg); font-weight: 600; color: var(--color-text); } #playerModal .channel-card__npub { margin: 0; font-size: var(--font-size-sm); color: var(--color-text-muted); } #playerModal .description-panel { padding: var(--space-md-plus) var(--space-lg); border-radius: var(--radius-xl); border: var(--border-width-hairline) solid var(--color-border-translucent); background-color: var(--color-surface); box-shadow: var(--shadow-sm); } #playerModal .description-panel p { margin: 0; font-size: var(--font-size-sm); line-height: 1.6; color: var(--color-text); } .player-modal__content { @apply video-modal__panel; } #playerModal .modal-nav { @apply sticky top-0 z-overlay-nav transition-transform duration-150 translate-y-0; background-color: var(--color-overlay-darker); background-image: linear-gradient( 180deg, var(--color-overlay-panel-gradient-start) 0%, var(--color-overlay-panel-gradient-end) 100% ); border-bottom: var(--border-width-hairline) solid var(--color-border-translucent); backdrop-filter: blur(var(--modal-nav-backdrop-blur)); -webkit-backdrop-filter: blur(var(--modal-nav-backdrop-blur)); } #playerModal .modal-nav__bar { @apply flex w-full items-center gap-3 px-2 py-2 sm:px-4; } #playerModal .modal-nav__context { @apply text-xs font-semibold uppercase tracking-wide text-muted; } #playerModal .modal-nav .modal-actions { @apply flex items-center gap-2; margin-left: auto; } #playerModal .modal-nav .icon-button { @apply inline-flex items-center justify-center rounded-full text-muted transition duration-150 ease-out; width: var(--icon-size-lg); height: var(--icon-size-lg); background: var(--color-surface-tint-subtle); border: var(--border-width-hairline) solid var(--color-border-translucent-medium); color: var(--color-text-muted); } #playerModal .modal-nav .icon-button:hover, #playerModal .modal-nav .icon-button:focus-visible { background: var(--color-border-translucent-bright); border-color: var(--color-border-translucent-strong); color: var(--color-text); } .modal-nav--hidden { @apply -translate-y-full; } .modal-nav--visible { @apply translate-y-0; } .video-modal__layout { @apply grid gap-6 lg:gap-8; } @media (min-width: theme('screens.lg')) { .video-modal__layout { grid-template-columns: minmax(0, var(--video-modal-primary-fr)) minmax(var(--video-modal-secondary-min), var(--video-modal-secondary-fr, 1fr)); } } .revert-modal__layout { @apply grid gap-6; } @media (min-width: theme('screens.lg')) { .revert-modal__layout { grid-template-columns: minmax(var(--revert-modal-sidebar-min), var(--revert-modal-sidebar-width)) minmax(0, 1fr); } } .video-modal__primary { @apply flex flex-col gap-6; } .video-modal__secondary { @apply flex flex-col gap-4; } .video-modal__video { position: relative; background-color: var(--color-black); padding-block: clamp(var(--space-xs), 2.5vw, var(--space-md-plus)); } @media (min-width: theme('screens.lg')) { .video-modal__video { position: sticky; top: calc(var(--space-2xl) + var(--space-xl)); } } #playerModal .video-modal__video video { border-radius: var(--radius-lg); box-shadow: var(--shadow-video-modal); max-height: min(80vh, calc(100vw * 9 / 16)); object-fit: contain; } .video-modal__media { display: block; aspect-ratio: 16 / 9; width: 100%; object-fit: contain; } .video-modal__details { @apply flex flex-col gap-6; } .video-modal__meta { @apply border-b border-border border-opacity-20 pb-4; } .video-modal__actions-row { @apply flex flex-wrap items-center gap-3; } .video-modal__action-button { @apply inline-flex h-11 items-center justify-center gap-2 rounded-full border border-border border-opacity-30 bg-panel px-3 text-sm font-semibold text-text transition duration-base ease-out hover:bg-panel-hover; min-width: var(--video-modal-action-min-width); } .video-modal__action-label { @apply hidden sm:inline; } .video-modal__action-icon { @apply h-5 w-5; } .video-modal__channel, .video-modal__description, .video-modal__stats { @apply rounded-2xl border border-border border-opacity-20 bg-surface px-6 py-5 shadow-sm; } .video-modal__progress { @apply h-2 w-full overflow-hidden rounded-full bg-border-subtle; } .video-modal__stat-metrics { @apply flex flex-wrap items-center justify-between gap-3 text-sm text-muted; } .profile-pane { @apply min-h-modal-pane flex flex-col gap-lg; } .profile-pane.hidden { display: none; } /* Torrent helper classes */ .beacon-hidden-download, [data-beacon-hidden-download], .torrent-download-anchor { display: none !important; } .beacon-clipboard-offscreen, [data-beacon-clipboard-state="offscreen"], [data-beacon-clipboard="offscreen"], .torrent-clipboard-textarea { position: fixed; top: 0; left: var(--offscreen-offset); opacity: 0; width: 0; height: 0; pointer-events: none; } .beacon-toast-motion, .torrent-toast-motion { transition-property: opacity, transform; will-change: opacity, transform; opacity: 0; transform: translateY(var(--toast-translate)); } .beacon-toast-motion[data-beacon-motion="enter"], .beacon-toast-motion[data-beacon-motion="show"], .torrent-toast-motion[data-beacon-motion="enter"], .torrent-toast-motion[data-beacon-motion="show"] { opacity: 1; transform: translateY(0); } .beacon-toast-motion[data-beacon-motion="exit"], .torrent-toast-motion[data-beacon-motion="exit"] { opacity: 0; transform: translateY(var(--toast-translate)); } .torrent-toast { @apply pointer-events-auto w-full max-w-md rounded-lg px-4 py-3 text-sm font-medium tracking-tight shadow-lg ring-1 ring-inset; } .torrent-toast--info { @apply border border-border-translucent bg-surface text-text; } .torrent-toast--success { @apply border border-info border-opacity-60 bg-info text-white; } .torrent-toast--error { @apply border border-critical border-opacity-60 bg-critical text-white; } .torrent-toast--warn { @apply border border-warning-strong border-opacity-70 bg-warning-strong text-warning-strong; } .profile-switcher { @apply card flex flex-col gap-lg; } .profile-switcher__badge { @apply badge self-start; } .profile-switcher__header { @apply flex flex-col gap-sm sm:flex-row sm:items-center sm:justify-between; } .profile-switcher__intro { @apply flex flex-col gap-2xs; } .profile-switcher__title { @apply text-base font-semibold text-text; } .profile-switcher__subtitle { @apply text-sm text-muted; } .profile-switcher__list { @apply flex flex-col gap-md; } .profile-switcher__helper { @apply text-xs text-muted; } .profile-card { @apply card relative flex cursor-pointer flex-col gap-md p-4 text-text transition duration-base ease-out hover:shadow-lg focus-visible:border-info focus-visible:border-opacity-60 focus-visible:shadow-lg sm:flex-row sm:items-center; } .profile-card--active { @apply border-info border-opacity-60 shadow-lg; } .profile-card__avatar { @apply flex h-12 w-12 flex-none items-center justify-center overflow-hidden rounded-full border border-border border-opacity-30 bg-surface; } .profile-card__avatar img { @apply h-full w-full rounded-full object-cover; } .profile-card--active .profile-card__avatar { @apply border-info border-opacity-70 ring-2 ring-info ring-opacity-20; } .profile-card__meta { @apply flex min-w-0 flex-1 flex-col gap-sm; } .profile-card__topline { @apply flex w-full flex-wrap items-center gap-sm sm:justify-between; } .profile-card__label { @apply text-xs font-semibold uppercase tracking-wide text-info; } .profile-card__name { @apply truncate text-sm font-semibold text-text; } .profile-card__npub { @apply break-all font-mono text-xs text-muted; } .profile-card__action, .profile-nav-button { @apply btn-ghost ml-auto flex-shrink-0 px-3 py-1 text-xs; } .profile-switcher__add { @apply card hover:bg-info/10 flex cursor-pointer items-center gap-4 border border-dashed border-border border-opacity-40 bg-surface text-left text-muted transition duration-base ease-out hover:border-info hover:border-opacity-60 hover:text-text focus-visible:border-info focus-visible:border-opacity-60; } .profile-switcher__addAvatar { @apply flex h-12 w-12 flex-none items-center justify-center rounded-full border border-dashed border-current bg-surface; } .profile-switcher__addAvatar svg { @apply h-5 w-5; } .profile-switcher__addCopy { @apply flex flex-col gap-1 text-left; } .profile-switcher__addTitle { @apply text-sm font-semibold text-inherit; } .profile-switcher__addHint { @apply text-xs text-muted; } .watch-history-grid { @apply flex w-full flex-col gap-5 py-6 sm:gap-6; } .watch-history-grid.watch-history-grid--modal { @apply gap-5 py-0 sm:gap-6; } .watch-history-card { @apply card flex flex-wrap items-stretch gap-5 p-4 transition duration-base ease-out hover:-translate-y-0.5 hover:shadow-lg sm:gap-6 sm:p-5; } .watch-history-card--private { @apply border-info border-opacity-60; } .watch-history-card__primary { @apply flex min-w-0 flex-1 flex-wrap items-stretch gap-4 sm:flex-nowrap; } .watch-history-card__thumbnail { @apply block flex-none text-text no-underline sm:w-56; } .watch-history-card__thumbnailInner { @apply aspect-video w-full overflow-hidden rounded-lg bg-surface; } .watch-history-card__thumbnailInner img { @apply h-full w-full object-cover; } .watch-history-card__details { @apply flex min-w-0 flex-1 flex-col justify-center gap-sm; } .watch-history-card__title { @apply cursor-pointer text-lg font-semibold leading-snug text-text transition duration-base ease-out; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .watch-history-card__title:hover, .watch-history-card__title:focus { @apply text-info; } .watch-history-card__created { @apply text-sm text-muted; } .watch-history-card__meta { @apply flex min-w-0 flex-col justify-between gap-4 sm:min-w-56 sm:flex-none sm:basis-64; } .watch-history-card__watched { @apply text-sm text-border-subtle; } .watch-history-card__creator { @apply flex items-center gap-3; } .watch-history-card__creatorAvatar { @apply flex h-10 w-10 items-center justify-center rounded-full bg-panel transition duration-base ease-out hover:ring-2 hover:ring-info hover:ring-opacity-50 focus-visible:ring-2 focus-visible:ring-info focus-visible:ring-opacity-50; } .watch-history-card__creatorAvatar img { @apply h-full w-full rounded-full object-cover; } .watch-history-card__creatorName { @apply cursor-pointer bg-transparent p-0 text-left text-base font-medium text-muted transition duration-base ease-out hover:text-info focus-visible:text-info; } .watch-history-card__actions { @apply flex flex-wrap items-center gap-3; } .watch-history-card__action { @apply inline-flex items-center justify-center gap-2 rounded-full border border-transparent bg-panel px-4 py-2 text-sm font-medium text-muted transition duration-base ease-out hover:border-border hover:bg-surface-alt hover:text-text focus-visible:border-border focus-visible:bg-surface-alt focus-visible:text-text; } .watch-history-card__action--primary { @apply bg-info-strong text-white hover:bg-info-pressed focus-visible:bg-info-pressed; } .watch-history-card__action--danger { @apply bg-critical text-white hover:bg-critical-strong focus-visible:bg-critical-strong; } } @layer components { .container { max-width: var(--layout-docs-max-width); margin: 0 auto; padding: var(--space-md); } .fade-in { opacity: 0; animation: interface-fade-in 280ms ease-out forwards; animation-delay: var(--fade-in-delay, 0ms); } .fade-in-delay-100 { --fade-in-delay: 100ms; } .fade-in-delay-200 { --fade-in-delay: 200ms; } .fade-in-delay-300 { --fade-in-delay: 300ms; } .fade-in-delay-400 { --fade-in-delay: 400ms; } .card[data-motion="enter"] { opacity: 0; animation: card-motion-enter 220ms ease-out forwards; } .icon-button { display: inline-flex; align-items: center; justify-content: center; width: var(--icon-size-lg); height: var(--icon-size-lg); min-width: var(--icon-size-lg); min-height: var(--icon-size-lg); flex: 0 0 var(--icon-size-lg); line-height: 0; background-color: var(--color-neutral-700); color: var(--color-white); border: none; border-radius: var(--radius-full); cursor: pointer; transition: background-color 200ms ease, box-shadow 200ms ease; } .icon-button:hover { background-color: var(--color-neutral-600); } .icon-button:focus, .icon-button:active { outline: none; box-shadow: 0 0 0 var(--icon-button-ring-width) var(--color-ring-alert); } .icon-image { width: var(--icon-size-md); height: var(--icon-size-md); pointer-events: none; } .modal-nav .icon-button { box-shadow: none; padding: 0; gap: 0; width: var(--icon-size-lg); height: var(--icon-size-lg); min-width: var(--icon-size-lg); min-height: var(--icon-size-lg); border: none; } .modal-meta { display: inline-flex; align-items: center; gap: var(--space-xs); } .modal-view-count { display: inline-flex; align-items: center; gap: var(--space-2xs); font-size: var(--font-size-sm); line-height: var(--space-md-plus); color: var(--color-muted-alt); white-space: nowrap; } .view-count-text { white-space: nowrap; color: var(--color-muted-strong); } .progress-bar { width: 100%; height: var(--modal-progress-height); border-radius: var(--radius-full); background-color: var(--color-border-translucent); overflow: hidden; } .progress-bar-fill { width: 0; height: 100%; border-radius: inherit; background: linear-gradient( 90deg, var(--color-info-strong), var(--color-info) ); transition: width 240ms ease; } .ratio-16-9 { position: relative; width: 100%; padding-top: 56.25%; background-color: var(--color-card); } .ratio-16-9 > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; } #modalContainer { position: fixed; inset: 0; z-index: var(--z-modal-root); pointer-events: none; isolation: isolate; } #modalContainer > * { pointer-events: auto; } #modalContainer > [id$="Modal"]:not(#playerModal) { z-index: var(--z-modal-root); } #modalContainer > [id$="Modal"]:not(#playerModal) > .bv-modal-backdrop { z-index: var(--z-modal-overlay); } #modalContainer > [id$="Modal"]:not(#playerModal) .bv-modal__panel { z-index: var(--z-modal-content); } #modalContainer > #playerModal { z-index: var(--z-modal-player); } #modalContainer > #playerModal .player-modal__container, #modalContainer > #playerModal .player-modal__content { z-index: var(--z-modal-content); } #playerModal { position: fixed; inset: 0; z-index: var(--z-modal-player); display: none; flex-direction: column; align-items: stretch; justify-content: stretch; width: 100vw; height: 100vh; background-color: var(--color-surface); color: var(--color-subtle-text); overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; } #playerModal.flex { display: flex; } #modalVideo { width: 100%; aspect-ratio: 16 / 9; background-color: var(--color-black); } .notification-portal { position: fixed; top: 0; left: 0; right: 0; z-index: var(--z-overlay-toast); display: flex; flex-direction: column; align-items: center; gap: var(--space-md); padding: calc(var(--space-xl) + env(safe-area-inset-top, 0px)) var(--space-lg) var(--space-lg); pointer-events: none; opacity: 0; transform: translateY(var(--toast-translate)); transition: transform var(--motion-duration-base) var(--motion-ease-out), opacity var(--motion-duration-base) var(--motion-ease-out); } @media (min-width: 640px) { .notification-portal { align-items: flex-end; padding-inline: var(--space-xl); } } .notification-portal:has(.notification-banner:not(.hidden)) { opacity: 1; transform: translateY(0); } .notification-banner, .torrent-toast { --notify-accent: var(--color-accent-strong); --notify-accent-strong: var(--color-accent); --notify-border: var(--surface-overlay-panel-tint); --notify-background: var(--surface-overlay-panel); --notify-foreground: var(--color-text); position: relative; display: flex; align-items: center; gap: var(--space-md); width: min(28rem, 100%); padding: var(--space-md) var(--space-xl); border-radius: var(--radius-xl); border: 1px solid var(--notify-border); background: var(--notify-background); color: var(--notify-foreground); box-shadow: 0 32px 64px var(--color-shadow-notification); backdrop-filter: blur(var(--overlay-backdrop-blur)); pointer-events: auto; isolation: isolate; @apply text-sm font-semibold leading-snug; transition: transform var(--motion-duration-base) var(--motion-ease-out), opacity var(--motion-duration-base) var(--motion-ease-out); } .notification-banner::before, .torrent-toast::before { content: ""; position: absolute; inset: 0; border-radius: inherit; background: linear-gradient( 135deg, var(--notify-accent) 0%, var(--notify-accent-strong) 100% ); opacity: 0.18; pointer-events: none; } .notification-banner > *, .torrent-toast > * { position: relative; z-index: 1; } .notification-dismiss { @apply inline-flex h-8 w-8 items-center justify-center rounded-full border border-transparent transition duration-base ease-out; color: inherit; opacity: 0.75; background-color: var(--notify-dismiss-background); } .notification-dismiss:hover, .notification-dismiss:focus-visible { opacity: 1; background-color: var(--notify-dismiss-background-hover); } .notification-dismiss svg { @apply h-4 w-4; } .notification-banner:not(.hidden) { animation: notification-slide-in var(--motion-duration-base) var(--motion-ease-out); } .notification-banner--critical, .torrent-toast--error { --notify-accent: var(--color-critical-strong); --notify-accent-strong: var(--color-critical); --notify-border: var(--color-ring-critical-soft); --notify-background: var(--color-card-critical); --notify-foreground: var(--color-critical-strong); } .notification-banner--success, .torrent-toast--success { --notify-accent: var(--status-success-strong); --notify-accent-strong: var(--status-success); --notify-border: var(--status-success-border); --notify-background: var(--status-success-surface); --notify-foreground: var(--status-success-on); } .notification-banner--info, .torrent-toast--info { --notify-accent: var(--color-info-strong); --notify-accent-strong: var(--color-info); --notify-border: var(--color-info-border); --notify-background: var(--status-info-surface); } .notification-banner--warning, .torrent-toast--warn { --notify-accent: var(--color-warning-strong); --notify-accent-strong: var(--color-warning); --notify-border: var(--status-warning-border); --notify-background: var(--status-warning-surface); --notify-foreground: var(--status-warning-on); } .status-banner .status-spinner { animation: spin 1s linear infinite; border: var(--space-3xs) solid var(--color-info-border); border-radius: var(--radius-full); border-top-color: var(--color-info); flex-shrink: 0; height: var(--icon-size-md); width: var(--icon-size-md); } .status-banner .status-message { flex: 1 1 auto; } @keyframes notification-slide-in { from { opacity: 0; transform: translateY(var(--toast-translate)); } to { opacity: 1; transform: translateY(0); } } .status-spinner--inline { animation: spin 1s linear infinite; border: var(--space-3xs) solid var(--color-border-info-soft); border-radius: var(--radius-full); border-top-color: var(--color-info); display: inline-block; height: var(--space-md); width: var(--space-md); } body.iframe-form { background-color: transparent; color: var(--color-text); font-family: var(--font-family-sans); margin: var(--space-lg); } body.iframe-form .container { width: 100%; max-width: 100%; margin: 0; padding: 0; } body.iframe-form .form-container { background-color: var(--color-surface-alt); border-radius: var(--radius-md); box-shadow: var(--shadow-md); color: var(--color-text); display: flex; flex-direction: column; gap: var(--space-md); padding: var(--space-lg); } body.iframe-form .form-container > p { margin: 0; } body.iframe-form form { display: flex; flex-direction: column; } body.iframe-form form > * + * { margin-top: var(--space-sm); } body.iframe-form form h1, body.iframe-form form h2 { color: var(--color-text); margin-top: var(--space-md); } body.iframe-form label { color: var(--color-subtle-text); display: block; font-weight: 600; margin-top: var(--space-sm); } body.iframe-form label + .form-control, body.iframe-form label + .textarea, body.iframe-form label + .select { margin-top: var(--space-xs); } body.iframe-form .checkbox-group, body.iframe-form .radio-group { display: flex; flex-wrap: wrap; gap: var(--space-sm); margin-top: var(--space-xs); } body.iframe-form .checkbox-group label, body.iframe-form .radio-group label { align-items: center; color: var(--color-subtle-text); display: inline-flex; font-weight: 500; gap: var(--space-xs); margin: 0; } body.iframe-form .checkbox-group input[type="checkbox"], body.iframe-form .radio-group input[type="radio"] { margin: 0; } body.iframe-form .radio-group input[type="radio"] { accent-color: var(--color-info-strong); } body.iframe-form button.btn { align-self: flex-start; margin-top: var(--space-md); } body.iframe-form #status { background: var(--color-surface); border-radius: var(--radius-sm); box-shadow: inset 0 0 0 var(--border-width-hairline) var(--color-border-translucent); color: var(--color-subtle-text); min-height: calc(var(--space-2xl) + var(--space-xl)); padding: var(--space-sm); white-space: pre-wrap; } body.iframe-form .status-line { color: var(--color-subtle-text); margin: var(--space-2xs) 0; } body.iframe-form .status-line.error { color: var(--color-critical-strong); } body.iframe-form .status-line.success { color: var(--color-info-strong); } body.iframe-form .status-line.warn { color: var(--color-warning-strong); } @media (max-width: theme('screens.sm')) { body.iframe-form { margin: var(--space-md); } body.iframe-form .form-container { padding: var(--space-md); } } #sidebarContainer { position: relative; overflow: visible; } #sidebar { position: fixed; top: 0; left: 0; width: var(--sidebar-width); min-width: var(--sidebar-width); height: 100vh; height: 100dvh; color: var(--color-text-frosted-strong); overflow-x: visible; overflow-y: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; scrollbar-gutter: stable both-edges; background: transparent; border-right: none; backdrop-filter: none; -webkit-backdrop-filter: none; transition: width 200ms ease, transform 300ms ease; z-index: var(--z-sidebar); box-shadow: none; isolation: isolate; } #sidebar .sidebar__inner { display: flex; flex-direction: column; height: 100%; padding: var(--space-sidebar-shell-block-start) var(--space-sidebar-shell-inline) var(--space-sidebar-shell-block-end); width: 100%; border-radius: var(--radius-sidebar-shell); border: none; background: none; box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none; overflow: visible; isolation: isolate; transition: color 200ms ease; } .sidebar-scroll { display: flex; flex-direction: column; gap: var(--space-sidebar-scroll-gap); width: 100%; height: 100%; min-height: 0; flex: 1 1 auto; overflow: visible; } .sidebar-panel { position: relative; width: 100%; display: flex; flex-direction: column; gap: var(--space-sidebar-panel-gap); padding: var(--space-sidebar-panel-padding-block) var(--space-sidebar-panel-padding-inline); border-radius: var(--radius-sidebar-panel); border: none; background: transparent; box-shadow: none; color: inherit; backdrop-filter: none; -webkit-backdrop-filter: none; overflow: hidden; isolation: isolate; transition: border-color 200ms ease, box-shadow 220ms ease, background 220ms ease; } .sidebar-panel--primary { flex: 1 1 auto; min-height: 0; } .sidebar-panel__header { display: none; justify-content: flex-end; margin-bottom: var(--space-md); } .sidebar-collapse-toggle { display: none; align-items: center; justify-content: center; width: var(--sidebar-control-size); height: var(--sidebar-control-size); border-radius: var(--radius-full); border: var(--border-width-hairline) solid var(--color-border-translucent-medium); background: var(--color-surface-tint-subtle); color: inherit; cursor: pointer; transition: background 180ms ease, color 180ms ease, border-color 180ms ease; flex-shrink: 0; box-sizing: border-box; } .sidebar-collapse-toggle:hover { background: var(--color-border-translucent); border-color: var(--color-border-translucent-stronger); color: var(--color-text); } .sidebar-collapse-toggle:focus-visible { outline: var(--space-3xs) solid var(--color-secondary); outline-offset: var(--space-2xs); } .sidebar-collapse-toggle__icon { width: var(--icon-size-sm); height: var(--icon-size-sm); transition: transform 200ms ease; } .sidebar-nav { display: flex; flex-direction: column; gap: var(--space-xs); opacity: 1; transition: opacity 160ms ease; width: 100%; } .sidebar-nav-link { --sidebar-nav-translate-x: 0; --sidebar-nav-link-highlight-opacity: 0; --sidebar-nav-link-highlight-scale: 0.96; display: flex; align-items: center; gap: var(--space-sidebar-footer-gap); padding: var(--space-sidebar-nav-padding-block) var(--space-md); min-height: var(--sidebar-control-size); border-radius: var(--radius-sidebar-nav); font-size: var(--font-size-sidebar-nav); font-weight: 600; letter-spacing: 0.015em; color: var(--color-text); text-decoration: none; width: 100%; position: relative; border: var(--border-width-hairline) solid transparent; background: none; box-shadow: none; transform: translateX(var(--sidebar-nav-translate-x)); transition: color 180ms ease, border-color 200ms ease, box-shadow 220ms ease, transform 220ms ease; overflow: hidden; isolation: isolate; backdrop-filter: none; -webkit-backdrop-filter: none; } .sidebar-nav-link::before, .sidebar-nav-link::after { content: ""; position: absolute; inset: calc(var(--border-width-hairline) * -1); border-radius: inherit; pointer-events: none; transition: opacity 220ms ease, transform 240ms ease; z-index: -1; } .sidebar-nav-link::before { background: linear-gradient( 120deg, var(--color-sidebar-accent-start) 0%, var(--color-sidebar-accent-end) 100% ); opacity: var(--sidebar-nav-link-highlight-opacity); transform: scale(var(--sidebar-nav-link-highlight-scale)); filter: saturate(140%); } .sidebar-nav-link::after { background: linear-gradient( 105deg, var(--color-sidebar-hover) 0%, transparent 75% ); opacity: 0.22; mix-blend-mode: screen; z-index: -2; } .sidebar-nav-link:hover, .sidebar-nav-link:focus-visible { --sidebar-nav-link-highlight-opacity: 1; --sidebar-nav-link-highlight-scale: 1.02; --sidebar-nav-translate-x: var(--space-sidebar-nav-translate); color: var(--color-white); border-color: var(--color-sidebar-hover-strong); box-shadow: 0 0 0 var(--border-width-hairline) var(--color-sidebar-hover-strong), var(--shadow-sidebar-accent); } .sidebar-nav-link:focus-visible { outline: none; box-shadow: var(--shadow-sidebar-focus-ring), var(--shadow-sidebar-accent); } .sidebar-nav-link:hover::after, .sidebar-nav-link:focus-visible::after { opacity: 0.35; } .sidebar-nav-link--sub { font-size: var(--font-size-sidebar-subnav); font-weight: 500; color: var(--color-sidebar-text-muted); padding-block: var(--space-sidebar-subnav-padding-block); letter-spacing: 0.02em; --sidebar-nav-link-highlight-opacity: 0.25; --sidebar-nav-link-highlight-scale: 1; } .sidebar-icon { width: var(--space-lg); height: var(--space-lg); min-width: var(--space-lg); min-height: var(--space-lg); flex-shrink: 0; display: block; filter: var(--sidebar-icon-filter); transition: filter 180ms ease; } .sidebar-footer { display: flex; flex-direction: column; gap: var(--space-sidebar-footer-gap); margin-top: auto; position: relative; z-index: 2; } .sidebar-dropup-trigger { position: relative; display: flex; align-items: center; justify-content: space-between; gap: var(--space-sidebar-footer-gap); width: 100%; padding: var(--space-sidebar-trigger-padding-block) var(--space-md); min-height: var(--sidebar-control-size); border-radius: var(--radius-sidebar-nav); border: var(--border-width-hairline) solid transparent; background: none; color: var(--color-text); font-size: var(--font-size-sidebar-trigger); font-weight: 600; cursor: pointer; box-sizing: border-box; flex-shrink: 0; overflow: hidden; isolation: isolate; backdrop-filter: none; -webkit-backdrop-filter: none; box-shadow: none; transition: border-color 200ms ease, color 200ms ease, box-shadow 220ms ease; } .sidebar-dropup-trigger::before { content: ""; position: absolute; inset: calc(var(--border-width-hairline) * -1); border-radius: inherit; pointer-events: none; background: linear-gradient( 120deg, var(--color-sidebar-accent-start) 0%, var(--color-sidebar-accent-end) 100% ); opacity: 0; transform: scale(0.96); transition: opacity 200ms ease, transform 220ms ease; z-index: -1; filter: saturate(140%); } .sidebar-dropup-trigger::after { content: ""; position: absolute; inset: calc(var(--border-width-hairline) * -1); border-radius: inherit; pointer-events: none; background: linear-gradient(110deg, var(--color-sidebar-hover) 0%, transparent 80%); opacity: 0.18; mix-blend-mode: screen; transition: opacity 200ms ease; z-index: -2; } .sidebar-dropup-trigger:hover, .sidebar-dropup-trigger:focus-visible { color: var(--color-white); border-color: var(--color-sidebar-hover-strong); box-shadow: 0 0 0 var(--border-width-hairline) var(--color-sidebar-hover-strong), var(--shadow-sidebar-dropup); } .sidebar-dropup-trigger:hover::before, .sidebar-dropup-trigger:focus-visible::before { opacity: 1; transform: scale(1.02); } .sidebar-dropup-trigger:hover::after, .sidebar-dropup-trigger:focus-visible::after { opacity: 0.35; } .sidebar-dropup-trigger:focus-visible { outline: none; box-shadow: var(--shadow-sidebar-focus-ring), var(--shadow-sidebar-dropup); } .sidebar-dropup-trigger__glyph { width: var(--icon-size-md); height: var(--icon-size-md); opacity: 0.9; } .sidebar-dropup-trigger__chevron { width: var(--icon-size-sm); height: var(--icon-size-sm); transition: transform 180ms ease; } .sidebar-dropup-trigger__chevron.is-rotated, .sidebar-dropup-trigger[aria-expanded="true"] .sidebar-dropup-trigger__chevron { transform: rotate(180deg); } .sidebar-dropup-panel { position: absolute; left: 0; right: 0; bottom: calc(100% + var(--space-sidebar-popover-offset)); border-radius: var(--radius-xl); border: var(--border-width-hairline) solid var(--color-sidebar-border-strong); background: linear-gradient( 160deg, color-mix(in srgb, var(--color-sidebar-surface) 88%, transparent) 0%, color-mix(in srgb, var(--color-sidebar-surface-alt) 68%, transparent) 100% ); box-shadow: inset 0 0 0 var(--border-width-fine) var(--color-sidebar-border), var(--shadow-sidebar-panel); padding: var(--space-sidebar-popover-padding-block) var(--space-sidebar-popover-padding-inline); color: var(--color-text-frosted); opacity: 0; visibility: hidden; pointer-events: none; transform: translateY(var(--space-sm)); transition: opacity 180ms ease, transform 180ms ease, visibility 180ms ease, box-shadow 220ms ease; backdrop-filter: blur(var(--sidebar-panel-backdrop-blur)) saturate(var(--sidebar-panel-backdrop-saturation)); -webkit-backdrop-filter: blur(var(--sidebar-panel-backdrop-blur)) saturate(var(--sidebar-panel-backdrop-saturation)); z-index: 5; isolation: isolate; } .sidebar-dropup-panel[data-state="expanded"] { opacity: 1; visibility: visible; pointer-events: auto; transform: translateY(0); } .sidebar-dropup-panel__inner { display: flex; flex-direction: column; gap: var(--space-sidebar-popover-gap); } #sidebar[data-footer-state="expanded"] .sidebar-nav { opacity: 0; pointer-events: none; } #sidebar[data-footer-state="collapsed"] .sidebar-nav { opacity: 1; } #sidebar.sidebar-open { box-shadow: none; } #sidebarOverlay { opacity: 0; pointer-events: none; transition: opacity 300ms ease; } body.sidebar-open #sidebarOverlay { opacity: 1; pointer-events: auto; } .sidebar-loading-wrapper { display: flex; justify-content: center; align-items: center; padding: var(--space-2xl) 0; width: 100%; grid-column: 1 / -1; } .sidebar-loading-indicator { display: inline-flex; align-items: center; gap: var(--space-sm); color: var(--color-muted-strong); font-size: var(--font-size-sm); font-weight: 500; letter-spacing: 0.01em; } .sidebar-loading-text { white-space: nowrap; } @media ( max-width: calc(theme('screens.md') - theme('borderWidth.DEFAULT')) ) { #sidebar { transform: translate3d(-100%, 0, 0); width: min( var(--sidebar-width-expanded), calc(100vw - var(--sidebar-mobile-gutter)) ); } #sidebar.sidebar-open { transform: translate3d(0, 0, 0); } body.sidebar-open { overflow: hidden; } } @media (min-width: theme('screens.md')) { .sidebar-panel__header { display: flex; } .sidebar-collapse-toggle { display: inline-flex; } #sidebar { transform: translateX(0) !important; width: var(--sidebar-width); overflow: visible; } #sidebar.sidebar-open { box-shadow: none; } #sidebarOverlay { display: none; } #app { box-sizing: border-box; transition: margin-left 200ms ease, width 200ms ease, max-width 200ms ease; } #app[data-sidebar-state="collapsed"] { margin-left: calc( var(--sidebar-width-collapsed) + var(--sidebar-content-gap) ); width: calc( 100vw - var(--sidebar-width-collapsed) - var(--sidebar-content-gap) ); max-width: calc( 100vw - var(--sidebar-width-collapsed) - var(--sidebar-content-gap) ); } #app[data-sidebar-state="expanded"] { margin-left: calc( var(--sidebar-width-expanded) + var(--sidebar-content-gap) ); width: calc( 100vw - var(--sidebar-width-expanded) - var(--sidebar-content-gap) ); max-width: calc( 100vw - var(--sidebar-width-expanded) - var(--sidebar-content-gap) ); } body.sidebar-collapsed, #sidebar.sidebar-collapsed, #app.sidebar-collapsed { --sidebar-width: var(--sidebar-width-collapsed); } body.sidebar-expanded, #sidebar.sidebar-expanded, #app.sidebar-expanded { --sidebar-width: var(--sidebar-width-expanded); } body.sidebar-collapsed #sidebar .sidebar-nav-link, #sidebar.sidebar-collapsed .sidebar-nav-link { justify-content: center; width: var(--sidebar-control-size); padding: 0; margin-inline: auto; border-radius: var(--radius-full); --sidebar-nav-translate-x: 0; --sidebar-nav-link-highlight-scale: 1; } body.sidebar-expanded #sidebar .sidebar-nav-link, #sidebar.sidebar-expanded .sidebar-nav-link { justify-content: flex-start; } body.sidebar-collapsed #sidebar .sidebar-text, #sidebar.sidebar-collapsed .sidebar-text { display: none; } body.sidebar-collapsed #sidebar .sidebar__inner, #sidebar.sidebar-collapsed .sidebar__inner { padding-inline: var(--space-2xs); } body.sidebar-collapsed #sidebar .sidebar-panel, #sidebar.sidebar-collapsed .sidebar-panel { padding-inline: calc(var(--space-3xs) * 3); } body.sidebar-collapsed #sidebar .sidebar-panel__header, #sidebar.sidebar-collapsed .sidebar-panel__header { justify-content: center; } body.sidebar-collapsed #sidebar .sidebar-collapse-toggle, #sidebar.sidebar-collapsed .sidebar-collapse-toggle { margin-inline: auto; } #sidebar .sidebar-toggle-icon--rotated { transform: rotate(180deg); } body.sidebar-collapsed #sidebar .sidebar-toggle-icon--rotated, #sidebar.sidebar-collapsed .sidebar-toggle-icon--rotated { transform: rotate(0deg); } body.sidebar-collapsed #sidebar .sidebar-dropup-trigger, #sidebar.sidebar-collapsed .sidebar-dropup-trigger { justify-content: center; width: var(--sidebar-control-size); height: var(--sidebar-control-size); padding: 0; margin-inline: auto; border-radius: var(--radius-full); } body.sidebar-collapsed #sidebar .sidebar-dropup-trigger .sidebar-text, #sidebar.sidebar-collapsed .sidebar-dropup-trigger .sidebar-text { display: none; } body.sidebar-collapsed #sidebar .sidebar-dropup-trigger__chevron { display: none; } body.sidebar-collapsed #sidebar .sidebar-dropup-trigger__glyph, #sidebar.sidebar-collapsed .sidebar-dropup-trigger__glyph { margin: 0; } body.sidebar-collapsed #sidebar .sidebar-nav-link:hover, #sidebar.sidebar-collapsed .sidebar-nav-link:hover, body.sidebar-collapsed #sidebar .sidebar-nav-link:focus-visible, #sidebar.sidebar-collapsed .sidebar-nav-link:focus-visible { --sidebar-nav-translate-x: 0; } } @keyframes card-motion-enter { from { opacity: 0; transform: translateY(var(--motion-card-enter-translate)); } to { opacity: 1; transform: translateY(0); } } @keyframes video-thumbnail-fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes interface-fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeIn { from { opacity: 0; transform: translateY(var(--motion-fade-in-translate)); } to { opacity: 1; transform: translateY(0); } } @keyframes spin { to { transform: rotate(360deg); } } } @layer utilities { @media (max-width: theme('screens.compact')) { .u-max-400-flex-wrap { flex-wrap: wrap; } .u-max-400-gap-y-sm { row-gap: var(--space-sm); } .u-max-400-gap-y-xs { row-gap: var(--space-xs); } .u-max-400-w-full { width: 100%; } .u-max-400-justify-between { justify-content: space-between; } .u-max-400-ml-0 { margin-left: 0; } .u-max-400-px-sm { padding-left: var(--space-sm); padding-right: var(--space-sm); } .u-max-400-square-9 { height: var(--space-xl-compact); width: var(--space-xl-compact); min-height: var(--space-xl-compact); min-width: var(--space-xl-compact); } } } @media (max-width: theme('screens.sm')) { .bv-grid-video { gap: var(--space-md); grid-template-columns: 1fr; } } @media (prefers-reduced-motion: reduce) { :root { --motion-duration-fast: 0s; --motion-duration-base: 0s; --motion-duration-slow: 0s; --modal-motion-duration: 0s; } *, *::before, *::after { animation-delay: 0s !important; animation-duration: 0s !important; animation-iteration-count: 1 !important; animation-timing-function: linear !important; transition-delay: 0s !important; transition-duration: 0s !important; transition-timing-function: linear !important; } .btn, .btn-ghost, .card, .card[data-motion="enter"], .fade-in, .icon-button, .menu__item, .modal-nav, .popover__panel, .progress-bar-fill, .notification-banner, .notification-portal, .torrent-toast, .status-banner .status-spinner, .status-spinner--inline, .video-modal__panel, .watch-history-card, .watch-history-card__creatorAvatar, .watch-history-card__creatorName, .watch-history-card__action, .watch-history-card__title, #app, #playerModal .player-modal__content, #sidebar, #sidebarOverlay, .sidebar-collapse-toggle, .sidebar-collapse-toggle__icon, .sidebar-dropup-panel, .sidebar-dropup-trigger, .sidebar-dropup-trigger__chevron, .sidebar-nav, .sidebar-nav-link, .sidebar-loading-indicator, .sidebar-loading-wrapper { transition-property: none !important; } .popover__panel { transform: none !important; } .popover__panel[data-state="open"] { opacity: 1; } .popover__panel[data-state="closed"] { opacity: 0; } .card[data-motion="enter"], .fade-in { opacity: 1; animation: none !important; } [data-video-thumbnail][data-thumbnail-loaded="true"] { animation: none !important; opacity: 1; } .notification-banner, .torrent-toast, .status-banner .status-spinner, .status-spinner--inline { animation: none !important; } .notification-portal { transform: none !important; opacity: 1 !important; } } @layer components { .ui-grid-row { border-bottom: var(--border-width-hairline) solid var(--color-border-subtle, var(--color-border)); } .status-line { @apply my-1 text-sm leading-snug text-text; } /* Status log containers reserve space for dynamic messages. */ .status-log { @apply min-h-status-log; } .status-line.error { color: var(--color-critical-strong); } .status-line.success { color: var(--color-blog-green-500); } .status-line.warn { color: var(--color-warning-strong); } /* Blog layout root scaffolding */ .blog-html { font-size: var(--blog-font-size-root); } @media (max-width: theme('screens.md')) { .blog-html { font-size: var(--font-size-lg); } } .blog-body { margin: 0; padding: 0; } .dark .blog-body { background-color: var(--color-text-strong); color: var(--color-blog-gray-220); } .blog-app-root { box-sizing: border-box; font-family: var(--font-family-sans); color: var(--color-text-strong); } .dark .blog-app-root { background-color: var(--color-text-strong); color: var(--color-blog-gray-170); } .blog-widget-shadow-host { z-index: 90000; } .blog-widget-overflow-fix { overflow: auto; height: 100%; } .blog-app-root a, .blog-app-root a:visited { color: var(--color-text-strong); } .dark .blog-app-root a, .dark .blog-app-root a:visited { color: var(--color-blog-neutral-100); } .blog-app-root ol, .blog-app-root ul { padding-left: var(--space-md); margin: 0; } .blog-app-root ol li, .blog-app-root ul li { margin-bottom: var(--space-md); } .blog-app-root blockquote { margin: 0; padding-left: var(--space-md); border-left: var(--space-xs) solid var(--color-blog-gray-170); } .blog-app-root code { font-size: var(--blog-font-size-body); background-color: var(--color-blog-neutral-120); } .blog-app-root pre code { overflow: scroll; display: block; padding: var(--space-md) var(--space-xs); } .blog-app-root .unfinished-setup { width: var(--blog-layout-fluid-width); margin: 0 auto; text-align: center; } .blog-app-root .header.home h1 { font-size: var(--blog-font-size-display); } .blog-app-root .header .external-link { text-align: right; margin-top: calc(var(--space-md) * -1); font-size: var(--blog-font-size-meta); color: var(--color-blog-gray-220); } @media (max-width: theme('screens.md')) { .blog-app-root .header .external-link { margin-bottom: var(--space-md); margin-right: var(--blog-space-inline-lg); } } .blog-app-root .header .external-link a { text-decoration: underline; color: var(--color-blog-gray-220); } .blog-app-root .header .picture-container { position: relative; display: inline-block; width: var(--blog-avatar-size); height: var(--blog-avatar-size); overflow: hidden; border-radius: 50%; margin-bottom: calc(var(--space-2xs) * -1); } .blog-app-root .header .picture-container img { position: absolute; top: 50%; left: 50%; width: 100%; height: 100%; object-fit: cover; transform: translate(-50%, -50%); clip-path: circle(50%); } .blog-app-root .header.note .picture-container { width: var(--blog-avatar-size-compact); height: var(--blog-avatar-size-compact); margin-bottom: calc(var(--blog-space-snug) * -1); } .blog-app-root .header a { text-decoration: none; } .blog-app-root .header a span { text-decoration: underline; } .dark .blog-app-root .header a:visited { color: var(--color-blog-gray-220); } .dark .blog-app-root .header .external-link, .dark .blog-app-root .header .external-link a { color: var(--color-blog-gray-440); } .blog-app-root .topic-wrapper { margin-bottom: var(--space-lg); display: flex; flex-direction: row; flex-wrap: wrap; row-gap: var(--space-md); } .blog-app-root .topic-wrapper div { display: inline-grid; margin-right: var(--space-md); } .blog-app-root .topic-wrapper div a { padding: var(--space-xs-snug) var(--space-md); background-color: var(--color-blog-gray-190); text-decoration: none; border-radius: var(--radius-sm); } .blog-app-root .topic-wrapper div a:hover { background-color: var(--color-blog-gray-170); } .blog-app-root .topic-wrapper div a.selected { background-color: var(--color-text-strong); color: var(--color-blog-neutral-100); } .dark .blog-app-root .topic-wrapper div a { background-color: var(--color-blog-gray-440); color: var(--color-text-strong); } .dark .blog-app-root .topic-wrapper div a:hover { background-color: var(--color-blog-neutral-100); } .dark .blog-app-root .topic-wrapper div a.selected { background-color: var(--color-blog-gray-220); } .blog-app-root .externalLink { display: block; text-align: right; margin-top: calc(var(--space-md) * -1); font-size: 0.8em; color: var(--color-blog-gray-220); } .blog-app-root .externalLink a { color: var(--color-blog-gray-220); } .blog-app-root .about { margin-bottom: var(--space-xl); padding-bottom: var(--space-md); border-bottom: var(--space-xs) solid var(--color-blog-gray-170); } .dark .blog-app-root .about { border-bottom: var(--space-xs) solid var(--color-card); } .blog-app-root .separator { margin-bottom: var(--space-xl); border-bottom: var(--space-xs) solid var(--color-blog-gray-170); } .dark .blog-app-root .separator { border-bottom: var(--space-xs) solid var(--color-card); } .blog-app-root .top-notes { display: flex; color: var(--color-blog-gray-440); flex-wrap: wrap; justify-content: space-between; gap: var(--space-xl); width: 100%; margin-bottom: var(--space-md); padding-bottom: var(--space-xl); border-bottom: var(--space-xs) solid var(--color-blog-neutral-100); } @media (max-width: theme('screens.md')) { .blog-app-root .top-notes { display: block; } } @media (max-width: theme('screens.md')) { .blog-app-root .top-notes { padding-bottom: 0; } } .blog-app-root .top-notes .note { flex: 1 1 calc(50% - var(--space-xl)); box-sizing: border-box; } @media (max-width: theme('screens.md')) { .blog-app-root .top-notes .note { margin-bottom: var(--space-xl); } } .blog-app-root .top-notes .note a { text-decoration: none; } .blog-app-root .top-notes .note img { width: 100%; height: var(--blog-top-note-image-height); object-fit: cover; margin-bottom: var(--space-xs); border-radius: var(--radius-sm); } .blog-app-root .top-notes .note .title { display: block; margin-bottom: var(--blog-space-snug); font-size: var(--blog-font-size-title); font-weight: bolder; } .blog-app-root .top-notes .note .summary { margin-bottom: var(--blog-space-snug); font-size: var(--blog-font-size-body); } .blog-app-root .top-notes .note .date { font-size: var(--blog-font-size-meta); color: var(--color-blog-gray-275); } .dark .blog-app-root .top-notes { color: var(--color-blog-gray-220); border-bottom: var(--space-xs) solid var(--color-card); } .blog-app-root .short-notes { border-bottom: var(--space-xs) solid var(--color-blog-neutral-100); padding-bottom: var(--space-md); margin-bottom: var(--space-xl); } .blog-app-root .short-notes .blog-carousel__slide { font-size: var(--blog-font-size-body); overflow-wrap: break-word; } .blog-app-root .short-notes .blog-carousel__slide a { text-decoration: none; } .blog-app-root .short-notes .blog-carousel__slide .date { font-size: var(--blog-font-size-meta); color: var(--color-blog-gray-275); margin-bottom: var(--blog-space-compact); } .dark .blog-app-root .short-notes { border-bottom: var(--space-xs) solid var(--color-card); } .dark .blog-app-root .short-notes a { color: var(--color-blog-gray-220); } @media (max-width: theme('screens.md')) { .blog-app-root .short-notes [data-carousel-control] { display: none; } } .blog-app-root .listing-notes { margin-top: var(--space-md); color: var(--color-blog-gray-440); } .blog-app-root .listing-notes.short-feed-full li { margin-bottom: var(--space-xl); } .blog-app-root .listing-notes.short-feed-full .summary { color: var(--color-text-strong); } .blog-app-root .listing-notes ul { list-style-type: none; padding: 0; margin: 0; } .blog-app-root .listing-notes ul li { margin-bottom: var(--space-md); } .blog-app-root .listing-notes ul li h2 { font-size: var(--blog-font-size-title); margin-bottom: var(--space-xs); } .blog-app-root .listing-notes ul li h2 a { display: block; font-size: var(--blog-font-size-title); } .blog-app-root .listing-notes ul li .summary { margin-bottom: var(--blog-space-snug); overflow-wrap: break-word; } .blog-app-root .listing-notes ul li .summary p { margin: 0; } .blog-app-root .listing-notes ul li .summary img { display: block; margin: var(--space-xl) auto; max-width: 100%; border-radius: var(--radius-sm); } .blog-app-root .listing-notes ul li .summary video { width: 100%; margin: var(--space-xl) auto; } .blog-app-root .listing-notes ul li .summary audio { width: 100%; margin: var(--space-xl) auto; } .blog-app-root .listing-notes ul li .date { font-size: var(--blog-font-size-meta); color: var(--color-blog-gray-275); } .dark .blog-app-root .listing-notes { color: var(--color-blog-gray-220); } .dark .blog-app-root .listing-notes.short-feed-full .summary { color: var(--color-white); } .blog-app-root h1 { font-size: var(--font-size-2xl); line-height: var(--blog-line-height-tight); margin-top: 0; } @media (max-width: theme('screens.md')) { .blog-app-root h1 { font-size: var(--blog-font-size-h1-mobile); } } .blog-app-root .note-wrapper { position: relative; margin-top: var(--space-xl); overflow-wrap: break-word; } .blog-app-root .note-wrapper h1, .blog-app-root .note-wrapper h2, .blog-app-root .note-wrapper h3 { margin-top: var(--blog-space-heading-stack); margin-bottom: var(--blog-space-heading-gap); } .blog-app-root .note-wrapper h1:first-of-type { margin-top: 0; } .blog-app-root .note-wrapper .content { margin-top: var(--space-lg); } .blog-app-root .note-wrapper p { line-height: var(--blog-line-height-body); margin-top: 0; } .blog-app-root .note-wrapper .date { display: block; margin-bottom: var(--space-xs); font-size: var(--blog-font-size-meta); color: var(--color-blog-gray-275); } .blog-app-root .note-wrapper img { display: block; margin: var(--space-xl) auto; max-width: 100%; border-radius: var(--radius-sm); } .blog-app-root .note-wrapper img.note-banner { margin: var(--blog-space-media-stack-start) auto var(--blog-space-media-stack-end); transform: scale(1.1); } .blog-app-root .note-wrapper video { width: 100%; margin: var(--space-xl) auto; } .blog-app-root .note-wrapper audio { width: 100%; margin: var(--space-xl) auto; } .blog-app-root .footer { margin-top: var(--blog-space-stack-xxl); padding-top: var(--space-xl); margin-bottom: var(--space-xl); border-top: var(--space-xs) solid var(--color-blog-gray-170); font-size: var(--blog-font-size-meta); text-align: center; color: var(--color-blog-gray-220); } .blog-app-root .footer a { color: var(--color-blog-gray-220); } .dark .blog-app-root .footer { border-top: var(--space-xs) solid var(--color-card); color: var(--color-blog-gray-440); } .dark .blog-app-root .footer a, .dark .blog-app-root .footer a:visited { color: var(--color-blog-gray-440); } .blog-app-root zap-threads { font-size: var(--ztr-font-size); } .blog-app-root #ztr-content img { max-width: 100%; } .blog-app-root #ztr-content { max-width: 100%; } .blog-app-root #ztr-root { display: flex; flex-direction: column; font-family: var(--ztr-font); font-size: var(--ztr-font-size); color: var(--ztr-text-color); border: var(--border-width-hairline) solid transparent; word-wrap: break-word; margin-top: 4em; line-height: 1.2em; } .blog-app-root #ztr-subtitle { font-size: 1.2em; color: var(--color-blog-gray-500); } .blog-app-root #ztr-root a { color: var(--ztr-link-color); text-decoration: none; } .blog-app-root .ztr-comment { position: relative; margin: 0; padding: 0; background-color: var(--ztr-background-color); } .blog-app-root .ztr-comment:first-child { border-top-left-radius: 0.3em; border-top-right-radius: 0.3em; } .blog-app-root .ztr-comment:last-child { border-bottom-left-radius: 0.3em; border-bottom-right-radius: 0.3em; } .blog-app-root .ztr-comment-body { padding: 1em; } .blog-app-root .ztr-comment-info-wrapper { display: flex; justify-content: space-between; align-items: center; } .blog-app-root .ztr-comment-info { display: flex; align-items: center; } .blog-app-root .ztr-comment-info-picture { width: 3.5em; } .blog-app-root ul.ztr-comment-info-items { display: flex; align-items: center; list-style: none; margin: 0; padding: 0; font-size: 0.9em; } .blog-app-root ul.ztr-comment-info-items li { display: inline-block; cursor: default; padding-right: 0.5em; } .blog-app-root ul.ztr-comment-info-items li a { font-weight: 600; } .blog-app-root .ztr-comment-info-author a { font-size: 1.2em; padding-right: 0.2em; } .blog-app-root .ztr-comment-info-dots { cursor: pointer; } .blog-app-root .ztr-comment-info-separator { width: 0.5em; } .blog-app-root .ztr-comment-info-picture img { width: 2em; height: 2em; border-radius: 50%; padding: 0.5em; position: relative; display: block; object-fit: cover; } .blog-app-root .ztr-comment-text, .blog-app-root #ztr-content { margin-bottom: 0.75em; padding: 0 0.8em 0 3.5em; line-height: 1.5em; line-break: loose; word-break: break-word; overflow: hidden; max-width: var(--layout-blog-max-width); } .blog-app-root .ztr-comment-text p { margin: 0 0 0.5em 0; } .blog-app-root .ztr-comment-text code { font-size: 1.1em; margin: 0 0.2em; } .blog-app-root .ztr-comment-text pre, .blog-app-root .ztr-info-pane pre { white-space: pre-wrap; white-space: -moz-pre-wrap; word-wrap: break-word; } .blog-app-root .ztr-comment-text a:hover { text-decoration: underline; } .blog-app-root .ztr-comment-text img { max-width: 100%; } .blog-app-root .ztr-comment-text .warning { margin-top: 0; font-size: 0.8em; display: flex; align-items: center; } .blog-app-root .ztr-comment-text .warning svg { height: 1.2em; fill: var(--color-blog-amber-500); padding-right: 0.7em; } .blog-app-root .ztr-comment-replies { margin-left: 2em; } .blog-app-root .highlight p { background: var(--color-blog-amber-400); color: var(--color-blog-gray-800); display: inline; padding: 0.2em; } .blog-app-root .ztr-comment-expand { display: flex; justify-content: center; } .blog-app-root .ztr-comment-expand span { margin: 1em 0 1em 0.35em; cursor: pointer; } .blog-app-root ul.ztr-comment-actions, .blog-app-root .ztr-comment-expand { display: flex; align-items: center; list-style: none; margin: 0; padding: 0 0 0 3.5em; font-weight: 600; user-select: none; } .blog-app-root ul.ztr-comment-actions li { display: inline-flex; align-items: center; text-align: center; padding: 0 2em 0 0; cursor: pointer; } .blog-app-root ul.ztr-comment-actions li span { padding: 0.25em 0.25em 0 0.25em; color: var(--ztr-icon-color); } .blog-app-root #ztr-root svg { fill: var(--ztr-icon-color); width: 1.1em; height: 1.1em; } .blog-app-root .ztr-comment-action-reply:hover svg { fill: var(--color-blog-purple-accent); } .blog-app-root .ztr-comment-action-reply:hover span { color: var(--color-blog-purple-accent); } .blog-app-root .ztr-comment-action-zap:hover svg { fill: var(--color-blog-amber-500); } .blog-app-root .ztr-comment-action-zap:hover span { color: var(--color-blog-amber-500); } .blog-app-root .ztr-comment-action-like:hover svg { fill: var(--color-blog-orange-600); } .blog-app-root .ztr-comment-action-like:hover span { color: var(--color-blog-orange-600); } .blog-app-root .ztr-reply-form { padding: 0 0.5em 0 3.5em; } .blog-app-root .ztr-reply-form textarea { font-family: var(--ztr-font); font-size: 1.1em; line-height: 1.4; color: var(--color-blog-gray-800); background-color: var(--color-blog-neutral-50); border: var(--border-width-hairline) solid var(--color-blog-gray-220); outline: none; width: calc(100% - 1.5em); padding: 0.7em; margin: 0.5em 0; height: 4em; border-radius: 0.2em; min-height: 4em; resize: vertical; } .blog-app-root .ztr-reply-form:disabled { opacity: 65%; user-select: none; } .blog-app-root .ztr-reply-controls { display: flex; align-items: center; justify-content: flex-end; } .blog-app-root .ztr-reply-controls span { font-weight: bold; font-size: 0.85em; margin-right: 1em; user-select: none; cursor: default; } .blog-app-root .ztr-reply-error { color: var(--color-blog-error); } .blog-app-root .ztr-reply-controls button { font-family: var(--ztr-font); appearance: none; border: none; padding: 0.5em 1em; border-radius: 0.2em; font-size: 0.85em; font-weight: 600; cursor: pointer; } .blog-app-root .ztr-reply-login-button { color: var(--color-white); background-color: var(--ztr-login-button-color); margin-left: 1em; } .blog-app-root .ztr-reply-button { color: var(--ztr-text-color); display: flex; align-items: center; background-color: var(--ztr-background-color); } .blog-app-root .ztr-info-pane { padding: 0 0.5em 1em 3.5em; } .blog-app-root .ztr-info-pane pre { font-size: 0.8em; } .blog-app-root .ztr-spinner { width: 1.2em; height: 1.2em; padding: 0.9em; animation: ztr-rotate 4s linear infinite; } .blog-app-root .ztr-reply-button:disabled { opacity: 65%; pointer-events: none; cursor: pointer; user-select: none; } .blog-app-root .ztr-spinner .path { stroke: var(--ztr-text-color); stroke-linecap: round; animation: ztr-dash 1.5s ease-in-out infinite; } @keyframes ztr-rotate { 100% { transform: rotate(360deg); } } @keyframes ztr-dash { 0% { stroke-dasharray: 1, 150; stroke-dashoffset: 0; } 50% { stroke-dasharray: 90, 150; stroke-dashoffset: -35; } 100% { stroke-dasharray: 90, 150; stroke-dashoffset: -124; } } .blog-app-root .ztr-comment-new .ztr-reply-form { margin: 0.5em 0; padding: 0; } .blog-app-root .ztr-comment-new .ztr-comment-body { padding: 0; } .blog-app-root .ztr-comment-new .ztr-comment-actions { font-size: 1.1em; padding: 0; } @media (prefers-color-scheme: dark) { .blog-app-root .ztr-spinner .path { stroke: var(--ztr-text-color, var(--color-blog-gray-200)); } .blog-app-root .ztr-comment, .blog-app-root .ztr-reply-button { background-color: var(--ztr-background-color, rgba(255, 255, 255, 0.06)); } .blog-app-root .ztr-reply-login-button { color: var(--color-blog-gray-800); background-color: var(--ztr-login-button-color, var(--color-blog-gray-200)); } .blog-app-root #ztr-root svg { fill: var(--ztr-icon-color, var(--color-blog-gray-200)); } .blog-app-root ul.ztr-comment-actions li span { color: var(--ztr-icon-color); } .blog-app-root .ztr-comment-action-reply:hover svg { fill: var(--color-blog-purple-muted); } .blog-app-root .ztr-comment-action-reply:hover span { color: var(--color-blog-purple-muted); } } .blog-app-root .loader-container.svelte-181fgen { display: flex; align-items: center; justify-content: center; } .blog-app-root .loader.svelte-181fgen { display: inline-block; width: var(--blog-loader-dimension-lg); height: var(--blog-loader-dimension-lg); opacity: 0; animation: svelte-181fgen-fade-in 0.5s 0.4s forwards, svelte-181fgen-loader-animation 2s linear infinite 0.4s; } .blog-app-root .loader.svelte-181fgen:after { content: " "; display: block; width: var(--blog-loader-dimension-md); height: var(--blog-loader-dimension-md); margin: var(--space-xs); border-radius: 50%; border: var(--blog-loader-border-width) solid var(--color-blog-gray-275); border-color: var(--color-blog-gray-275) transparent var(--color-blog-gray-275) transparent; animation: svelte-181fgen-loader-animation 2s linear infinite; } @keyframes svelte-181fgen-loader-animation { 0% { transform: rotate(0); } to { transform: rotate(360deg); } } @keyframes svelte-181fgen-fade-in { to { opacity: 1; } } .dark .blog-app-root .loader.svelte-181fgen:after { border: var(--blog-loader-border-width) solid var(--color-card); border-color: var(--color-card) transparent var(--color-card) transparent; } .blog-body #theme-toggle.svelte-bxrhh.svelte-bxrhh { display: none; } .blog-body #theme-toggle.svelte-bxrhh + label.svelte-bxrhh { display: inline-block; cursor: pointer; height: var(--space-md); width: var(--space-md); position: absolute; top: var(--space-md); right: var(--space-2xl); border-radius: var(--radius-toggle-thumb); transition-duration: 0.3s; content: ""; } @media (max-width: theme('screens.md')) { .blog-body #theme-toggle.svelte-bxrhh + label.svelte-bxrhh { right: var(--space-md); } } .blog-body #theme-toggle.svelte-bxrhh:not(:checked) + label.svelte-bxrhh { background-color: var(--color-blog-gray-180); } .blog-body #theme-toggle.svelte-bxrhh:checked + label.svelte-bxrhh { background-color: transparent; box-shadow: var(--blog-theme-toggle-shadow); } .blog-app-root .ztr-nowrap { white-space: nowrap; } }