@import "./tokens.css"; @tailwind base; @tailwind components; @tailwind utilities; @layer base { html { font-size: 100%; } @media (min-width: 1024px) { 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: 0.25rem; } *::-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-md; } .ds-header__logo { @apply h-24 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; } .markdown-prose { @apply prose max-w-none leading-relaxed text-text-strong; } .markdown-prose :where(pre, code) { @apply font-mono; } .popover { @apply relative inline-flex; } .popover__panel { @apply focus-ring absolute left-0 top-full z-[70] mt-2 min-w-[12rem] origin-top rounded-lg border border-border border-opacity-40 bg-panel px-4 py-3 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; } .popover__panel[data-variant="zap"] { background: var(--color-overlay-veil); color: var(--color-subtle); border: 1px solid var(--color-border-translucent-stronger); box-shadow: 0 22px 48px -18px var(--color-shadow-intense); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); } .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; } .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[data-transition="instant"] { --blog-carousel-track-duration: 0s; --blog-carousel-slide-duration: 0s; } .blog-carousel__viewport { overflow: hidden; border-radius: var(--blog-carousel-slide-radius); } .blog-carousel__track { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 100%); 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-progress { position: relative; display: flex; gap: var(--space-xs); align-items: center; width: 100%; --blog-carousel-progress-duration: var(--motion-duration-slow, 320ms); } .blog-progress[data-transition="instant"] { --blog-carousel-progress-duration: 0s; } .blog-progress__item { position: relative; flex: 1 1 0%; height: var(--blog-carousel-progress-height); border-radius: var(--blog-carousel-progress-radius); background: var(--blog-carousel-progress-track); overflow: hidden; } .blog-progress__item::after { content: ""; position: absolute; inset: 0; background: var(--blog-carousel-progress-active); transform: scaleX(0); transform-origin: left center; transition: transform var(--blog-carousel-progress-duration) var(--motion-ease-out, ease-out); } .blog-progress[data-state="paused"] .blog-progress__item::after { transition-duration: 0s; } .blog-progress__item[data-active="true"]::after, .blog-progress__item[data-state="complete"]::after { transform: scaleX(1); } .blog-progress__item[data-active="true"] { background: var(--blog-carousel-progress-track, var(--color-border)); } .blog-progress__item[data-state="upcoming"]::after { transform: scaleX(0); } @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-progress__item::after { 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 bg-panel px-3 py-1 text-xs font-semibold uppercase tracking-wide text-muted-strong; } .badge[data-variant="critical"] { @apply bg-critical bg-opacity-20 text-critical-strong; } .badge[data-variant="info"] { @apply bg-info bg-opacity-20 text-info-strong; } .badge[data-variant="neutral"] { @apply bg-border bg-opacity-40 text-muted-strong; } .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 { @apply focus-ring relative rounded-lg border border-transparent bg-card text-text shadow-md transition duration-base ease-in-out; } .card:hover { @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; } .input { @apply form-control; } .textarea { @apply form-control min-h-[8rem] 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 0.75rem center, right 0.4rem center, right 2.5rem center; background-size: 0.6rem 0.6rem, 0.6rem 0.6rem, 1px 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(-0.125rem) 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(-0.125rem) 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-[38rem] rounded-[1.75rem] 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(28px); -webkit-backdrop-filter: blur(28px); } .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 max-w-[90%] overflow-hidden lg:max-w-4xl; } .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: 0.4rem; } .modal-body::-webkit-scrollbar-track { background: transparent; } .modal-body::-webkit-scrollbar-thumb { background: var(--color-border-translucent); border-radius: 9999px; } .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(14px); 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(20rem, 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(18px); 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; } .video-modal__panel { @apply bv-modal__panel relative flex w-full flex-1 flex-col overflow-visible bg-surface shadow-none px-0 pb-0 pt-0; } #playerModal .watch-container { width: 100%; max-width: 1100px; margin-inline: auto; padding-inline: clamp(1rem, 3vw, 2rem); } .player-modal__content { @apply video-modal__panel; } .video-modal__nav { @apply sticky top-0 z-[60] border-b border-border border-opacity-20 bg-surface bg-opacity-95 backdrop-blur-md; } .video-modal__nav-bar { @apply flex w-full items-center justify-between gap-3 px-2 py-2 sm:px-4; } .video-modal__close { @apply inline-flex h-10 w-10 items-center justify-center rounded-full bg-panel text-text transition duration-base ease-out hover:bg-panel-hover; } .modal-nav { @apply video-modal__nav transition-transform duration-150 translate-y-0; } .modal-nav--hidden { @apply -translate-y-full; } .modal-nav--visible { @apply translate-y-0; } .video-modal__layout { @apply grid gap-6 lg:gap-8; } .video-modal__primary { @apply flex flex-col gap-6; } .video-modal__secondary { @apply flex flex-col gap-4; } .video-modal__video { @apply relative overflow-hidden rounded-3xl bg-black shadow-2xl lg:sticky lg:top-20; } .video-modal__media { @apply block aspect-video w-full object-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 min-w-[2.75rem] 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; } .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 flex flex-col gap-lg; } .profile-pane.hidden { display: none; } /* Torrent helper classes */ .torrent-download-anchor { display: none !important; } .torrent-clipboard-textarea { position: fixed; top: 0; left: -9999px; opacity: 0; width: 0; height: 0; pointer-events: none; } /* Angular UI Grid theming */ .ui-grid { @apply relative w-full rounded-xl border border-border-translucent bg-surface text-sm text-text shadow-sm; box-sizing: content-box; transform: translateZ(0); } .ui-grid-vertical-bar { position: absolute; right: 0; width: 0; } .ui-grid-header-cell:not(:last-child) .ui-grid-vertical-bar, .ui-grid-cell:not(:last-child) .ui-grid-vertical-bar { width: 1px; background-color: var(--color-border-translucent-medium); } .ui-grid-contents-wrapper { position: relative; height: 100%; width: 100%; } .ui-grid-top-panel-background, .ui-grid-footer-panel-background { background-color: var(--color-surface-alt); } .ui-grid-header { border-bottom: 1px solid var(--color-border-translucent-medium); box-sizing: border-box; } .ui-grid-top-panel { position: relative; overflow: hidden; font-weight: 600; background-color: var(--color-surface-alt); color: var(--color-muted-strong); } .ui-grid-header-viewport, .ui-grid-footer-viewport { overflow: hidden; } .ui-grid-header-canvas, .ui-grid-footer-canvas { display: table; width: 100%; } .ui-grid-header-cell-wrapper, .ui-grid-footer-cell-wrapper { position: relative; display: table; box-sizing: border-box; height: 100%; width: 100%; } .ui-grid-header-cell-row, .ui-grid-footer-cell-row { display: table-row; } .ui-grid-header-cell, .ui-grid-footer-cell { position: relative; display: table-cell; box-sizing: border-box; border-right: 1px solid var(--color-border-translucent-medium); background-color: inherit; font-size: 0.75rem; letter-spacing: 0.08em; text-transform: uppercase; padding: 0.75rem 1rem; } .ui-grid-header-cell:last-child, .ui-grid-footer-cell:last-child { border-right: 0; } .ui-grid-header-cell .sortable { cursor: pointer; } .ui-grid-viewport { min-height: 20px; position: relative; overflow-y: auto; -webkit-overflow-scrolling: touch; } .ui-grid-canvas { position: relative; padding-top: 1px; } .ui-grid-row { border-bottom: 1px solid var(--color-border-translucent); } .ui-grid-row:nth-child(odd) .ui-grid-cell { background-color: var(--color-surface); } .ui-grid-row:nth-child(even) .ui-grid-cell { background-color: var(--color-surface-alt); } .ui-grid-row:last-child .ui-grid-cell { border-bottom-color: var(--color-border-translucent-medium); border-bottom-style: solid; } .ui-grid-row:hover .ui-grid-cell { background-color: var(--color-panel-hover); } .ui-grid-row-selected > [ui-grid-row] > .ui-grid-cell { background-color: var(--color-info-glass); color: var(--color-text); } .ui-grid-cell { float: left; overflow: hidden; box-sizing: border-box; border-right: 1px solid var(--color-border-translucent-medium); } .ui-grid-cell:last-child { border-right: 0; } .ui-grid-cell-contents { box-sizing: border-box; padding: 0.75rem 1rem; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; height: 100%; } .ui-grid-menu-button { z-index: 2; position: absolute; right: 0; top: 0; background-color: var(--color-surface-alt); border: 1px solid var(--color-border-translucent-medium); cursor: pointer; height: 2.5rem; font-weight: normal; } .ui-grid-menu { z-index: 2; position: absolute; padding: 0.5rem 0.75rem 1rem; box-sizing: border-box; background-color: var(--color-surface-alt); border: 1px solid var(--color-border-translucent-medium); border-radius: var(--radius-md); box-shadow: 0 22px 48px -18px var(--color-shadow-elevated); } /* ng-notify overrides */ .ngn { pointer-events: none; position: fixed; left: 0; right: 0; display: none; z-index: 1200; padding: var(--space-md) var(--space-2xl); text-align: center; font-size: var(--font-size-base); font-weight: 600; color: var(--color-text); text-shadow: none; user-select: none; } .ngn.ngn-visible, .ngn.ngn-enter-active, .ngn.ngn-leave-active { pointer-events: auto; } .ngn-component { position: absolute; } .ngn-top { top: 0; } .ngn-bottom { bottom: 0; } .ngn-dismiss { pointer-events: auto; display: none; margin-left: auto; margin-right: var(--space-md); border-radius: 9999px; border: 1px solid transparent; background-color: var(--color-overlay-panel); color: var(--color-subtle); font-size: 0.875rem; font-weight: 700; line-height: 1; width: 2.5rem; height: 2.5rem; } .ngn-sticky .ngn-dismiss { display: inline-flex; align-items: center; justify-content: center; } .ngn-dismiss:hover { background-color: var(--color-overlay-panel-soft); } .ngn-info { background-color: var(--color-info-strong); } .ngn-error { background-color: var(--color-critical-strong); } .ngn-success { background-color: var(--color-info); } .ngn-warn { background-color: var(--color-warning-strong); color: var(--color-text-strong); } .ngn-grimace { background-color: var(--color-secondary); } @media (max-width: 30rem) { .ngn { font-size: var(--font-size-sm); padding: var(--space-sm) var(--space-lg); } .ngn-dismiss { width: 2rem; height: 2rem; font-size: 0.75rem; } } .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-[14rem] sm:flex-[0_0_16rem]; } .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: 92.5rem; margin: 0 auto; padding: 1rem; } .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: 2.5rem; height: 2.5rem; min-width: 2.5rem; min-height: 2.5rem; flex: 0 0 2.5rem; line-height: 0; background-color: var(--color-neutral-700); color: var(--color-white); border: none; border-radius: 9999px; 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 0.1875rem var(--color-ring-alert); } .icon-image { width: 1.25rem; height: 1.25rem; pointer-events: none; } .modal-nav .icon-button { box-shadow: none; padding: 0; gap: 0; width: 2.5rem; height: 2.5rem; min-width: 2.5rem; min-height: 2.5rem; border: none; } .modal-meta { display: inline-flex; align-items: center; gap: 0.5rem; } .modal-view-count { display: inline-flex; align-items: center; gap: 0.25rem; font-size: 0.875rem; line-height: 1.25rem; color: var(--color-muted-alt); white-space: nowrap; } .view-count-text { white-space: nowrap; color: var(--color-muted-strong); } .progress-bar { width: 100%; height: 0.375rem; border-radius: 9999px; 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); } .status-banner { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1rem; padding: 1rem; border-radius: 0.5rem; background-color: var(--color-overlay-panel); color: var(--color-subtle); } .status-banner .status-spinner { animation: spin 1s linear infinite; border: 0.125rem solid var(--color-border-neutral-soft); border-radius: 9999px; border-top-color: var(--color-page-alt); height: 1.25rem; width: 1.25rem; } .status-spinner--inline { animation: spin 1s linear infinite; border: 0.125rem solid var(--color-border-info-soft); border-radius: 9999px; border-top-color: var(--color-info); display: inline-block; height: 1rem; width: 1rem; } 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 1px var(--color-border-translucent); color: var(--color-subtle-text); min-height: 5rem; 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: 640px) { 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: 1px solid var(--color-sidebar-border-strong); background: radial-gradient( 140% 140% at 15% 10%, color-mix(in srgb, var(--color-sidebar-accent-start) 46%, transparent) 0%, transparent 65% ), radial-gradient( 130% 130% at 82% 88%, color-mix(in srgb, var(--color-sidebar-accent-end) 42%, transparent) 0%, transparent 70% ), linear-gradient( 160deg, color-mix(in srgb, var(--color-sidebar-surface) 92%, transparent) 0%, color-mix(in srgb, var(--color-sidebar-surface-alt) 98%, transparent) 100% ); box-shadow: var(--shadow-sidebar-shell); backdrop-filter: blur(18px) saturate(140%); -webkit-backdrop-filter: blur(18px) saturate(140%); overflow: visible; isolation: isolate; transition: border-color 200ms ease, box-shadow 220ms ease, background 220ms ease, backdrop-filter 220ms 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: 9999px; border: 1px 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: 0.125rem solid var(--color-secondary); outline-offset: 0.25rem; } .sidebar-collapse-toggle__icon { width: 1.125rem; height: 1.125rem; 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-frosted-strong); text-decoration: none; width: 100%; position: relative; border: 1px solid var(--color-sidebar-border); background: linear-gradient( 155deg, color-mix(in srgb, var(--color-sidebar-surface) 72%, transparent) 0%, color-mix(in srgb, var(--color-sidebar-surface-alt) 48%, transparent) 100% ); box-shadow: inset 0 0 0 0.5px var(--color-sidebar-border); 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: blur(18px) saturate(160%); -webkit-backdrop-filter: blur(18px) saturate(160%); } .sidebar-nav-link::before, .sidebar-nav-link::after { content: ""; position: absolute; inset: -1px; 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: 0.35rem; color: var(--color-white); border-color: var(--color-sidebar-hover-strong); box-shadow: 0 0 0 1px 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: 1.5rem; height: 1.5rem; min-width: 1.5rem; min-height: 1.5rem; flex-shrink: 0; display: block; } .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: 1px solid var(--color-sidebar-border); background: linear-gradient( 155deg, color-mix(in srgb, var(--color-sidebar-surface) 80%, transparent) 0%, color-mix(in srgb, var(--color-sidebar-surface-alt) 58%, transparent) 100% ); color: var(--color-text-frosted); 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: blur(18px) saturate(150%); -webkit-backdrop-filter: blur(18px) saturate(150%); box-shadow: inset 0 0 0 0.5px var(--color-sidebar-border), var(--shadow-sidebar-trigger); transition: border-color 200ms ease, color 200ms ease, box-shadow 220ms ease, background 220ms ease; } .sidebar-dropup-trigger::before { content: ""; position: absolute; inset: -1px; 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: -1px; 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 1px 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: 1.25rem; height: 1.25rem; opacity: 0.9; } .sidebar-dropup-trigger__chevron { width: 1.125rem; height: 1.125rem; 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: 1rem; border: 1px 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 0.5px 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(20px) saturate(150%); -webkit-backdrop-filter: blur(20px) saturate(150%); 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: var(--shadow-sidebar-shell), 0 0 0 1px var(--color-sidebar-border-strong); } #sidebarOverlay { position: fixed; inset: 0; background: var(--color-overlay-muted); opacity: 0; pointer-events: none; transition: opacity 300ms ease; z-index: var(--z-sidebar-overlay); } body.sidebar-open #sidebarOverlay { opacity: 1; pointer-events: auto; } .sidebar-loading-wrapper { display: flex; justify-content: center; align-items: center; padding: 3rem 0; width: 100%; grid-column: 1 / -1; } .sidebar-loading-indicator { display: inline-flex; align-items: center; gap: 0.75rem; color: var(--color-muted-strong); font-size: 0.875rem; font-weight: 500; letter-spacing: 0.01em; } .sidebar-loading-text { white-space: nowrap; } .locked-input { background-color: var(--color-overlay-panel-soft) !important; border-color: var(--color-border-sidebar-strong) !important; color: var(--color-muted) !important; cursor: default; } .locked-input:focus { outline: none; box-shadow: none; } @media (max-width: 767px) { #sidebar { transform: translate3d(-100%, 0, 0); width: min(var(--sidebar-width-expanded), calc(100vw - 3rem)); } #sidebar.sidebar-open { transform: translate3d(0, 0, 0); } body.sidebar-open { overflow: hidden; } } @media (min-width: 768px) { .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: 9999px; --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: 0.25rem; } body.sidebar-collapsed #sidebar .sidebar-panel, #sidebar.sidebar-collapsed .sidebar-panel { padding-inline: 0.375rem; } 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: 9999px; } 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(0.5rem); } 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(1.25rem); } to { opacity: 1; transform: translateY(0); } } @keyframes spin { to { transform: rotate(360deg); } } } @layer utilities { @media (max-width: 25rem) { .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: 2.25rem; width: 2.25rem; min-height: 2.25rem; min-width: 2.25rem; } } } @media (max-width: 40rem) { .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, .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; } .status-banner .status-spinner, .status-spinner--inline { animation: none !important; } } @layer components { .ui-grid-row { border-bottom: 1px solid var(--color-border-subtle, rgb(209 213 219)); } .status-line { @apply my-1 text-sm leading-snug text-text; } .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: 768px) { .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: 768px) { .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: 1.5rem; display: flex; flex-direction: row; flex-wrap: wrap; row-gap: 1rem; } .blog-app-root .topic-wrapper div { display: inline-grid; margin-right: 1rem; } .blog-app-root .topic-wrapper div a { padding: 0.4rem 1rem; background-color: var(--color-blog-gray-190); text-decoration: none; border-radius: 4px; } .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: -1rem; 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: 2rem; 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: 768px) { .blog-app-root .top-notes { display: block; } } @media (max-width: 768px) { .blog-app-root .top-notes { padding-bottom: 0rem; } } .blog-app-root .top-notes .note { flex: 1 1 calc(50% - 2rem); box-sizing: border-box; } @media (max-width: 768px) { .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: 200px; 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 .splide__slide { font-size: var(--blog-font-size-body); overflow-wrap: break-word; } .blog-app-root .short-notes .splide__slide a { text-decoration: none; } .blog-app-root .short-notes .splide__slide .date { font-size: var(--blog-font-size-meta); color: var(--color-blog-gray-275); margin-bottom: var(--blog-space-compact); } .blog-app-root .short-notes .splide__arrow--prev { left: -3em; } .blog-app-root .short-notes .splide__arrow--next { right: -3em; } @media (max-width: 768px) { .blog-app-root .short-notes .splide__arrow--prev, .blog-app-root .short-notes .splide__arrow--next { display: none; } } .blog-app-root .short-notes .splide__arrow { background: none; } .blog-app-root .short-notes .splide__arrow svg { fill: var(--color-blog-gray-275); } .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); } .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: 768px) { .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: 1px 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: 750px; } .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: 1px 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 .splide__container { box-sizing: border-box; position: relative; } .blog-app-root .splide__list { backface-visibility: hidden; display: -ms-flexbox; display: flex; height: 100%; margin: 0 !important; padding: 0 !important; } .blog-app-root .splide.is-initialized:not(.is-active) .splide__list { display: block; } .blog-app-root .splide__pagination { -ms-flex-align: center; align-items: center; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms-flex-pack: center; justify-content: center; margin: 0; pointer-events: none; } .blog-app-root .splide__pagination li { display: inline-block; line-height: 1; list-style-type: none; margin: 0; pointer-events: auto; } .blog-app-root .splide:not(.is-overflow) .splide__pagination { display: none; } .blog-app-root .splide__progress__bar { width: 0; } .blog-app-root .splide { position: relative; visibility: hidden; } .blog-app-root .splide.is-initialized, .blog-app-root .splide.is-rendered { visibility: visible; } .blog-app-root .splide__slide { backface-visibility: hidden; box-sizing: border-box; -ms-flex-negative: 0; flex-shrink: 0; list-style-type: none !important; margin: 0; position: relative; } .blog-app-root .splide__slide img { vertical-align: bottom; } .blog-app-root .splide__spinner { animation: splide-loading 1s linear infinite; border: 2px solid var(--color-blog-gray-300); border-left-color: transparent; border-radius: 50%; bottom: 0; contain: strict; display: inline-block; height: 20px; left: 0; margin: auto; position: absolute; right: 0; top: 0; width: 20px; } .blog-app-root .splide__sr { clip: rect(0 0 0 0); border: 0; height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } .blog-app-root .splide__toggle.is-active .splide__toggle__play, .blog-app-root .splide__toggle__pause { display: none; } .blog-app-root .splide__toggle.is-active .splide__toggle__pause { display: inline; } .blog-app-root .splide__track { overflow: hidden; position: relative; z-index: 0; } @keyframes splide-loading { 0% { transform: rotate(0); } to { transform: rotate(1turn); } } .blog-app-root .splide__track--draggable { -webkit-touch-callout: none; -webkit-user-select: none; -ms-user-select: none; user-select: none; } .blog-app-root .splide__track--fade > .splide__list > .splide__slide { margin: 0 !important; opacity: 0; z-index: 0; } .blog-app-root .splide__track--fade > .splide__list > .splide__slide.is-active { opacity: 1; z-index: 1; } .blog-app-root .splide--rtl { direction: rtl; } .blog-app-root .splide__track--ttb > .splide__list { display: block; } .blog-app-root .splide__arrow { -ms-flex-align: center; align-items: center; background: var(--color-blog-gray-210); border: 0; border-radius: 50%; cursor: pointer; display: -ms-flexbox; display: flex; height: 2em; -ms-flex-pack: center; justify-content: center; opacity: 0.7; padding: 0; position: absolute; top: 50%; transform: translateY(-50%); width: 2em; z-index: 1; } .blog-app-root .splide__arrow svg { fill: var(--color-black); height: 1.2em; width: 1.2em; } .blog-app-root .splide__arrow:hover:not(:disabled) { opacity: 0.9; } .blog-app-root .splide__arrow:disabled { opacity: 0.3; } .blog-app-root .splide__arrow:focus-visible { outline: 3px solid var(--color-blog-sky-500); outline-offset: 3px; } .blog-app-root .splide__arrow--prev { left: 1em; } .blog-app-root .splide__arrow--prev svg { transform: scaleX(-1); } .blog-app-root .splide__arrow--next { right: 1em; } .blog-app-root .splide.is-focus-in .splide__arrow:focus { outline: 3px solid var(--color-blog-sky-500); outline-offset: 3px; } .blog-app-root .splide__pagination { bottom: 0.5em; left: 0; padding: 0 1em; position: absolute; right: 0; z-index: 1; } .blog-app-root .splide__pagination__page { background: var(--color-blog-gray-210); border: 0; border-radius: 50%; display: inline-block; height: 8px; margin: 3px; opacity: 0.7; padding: 0; position: relative; transition: transform 0.2s linear; width: 8px; } .blog-app-root .splide__pagination__page.is-active { background: var(--color-white); transform: scale(1.4); z-index: 1; } .blog-app-root .splide__pagination__page:hover { cursor: pointer; opacity: 0.9; } .blog-app-root .splide__pagination__page:focus-visible { outline: 3px solid var(--color-blog-sky-500); outline-offset: 3px; } .blog-app-root .splide.is-focus-in .splide__pagination__page:focus { outline: 3px solid var(--color-blog-sky-500); outline-offset: 3px; } .blog-app-root .splide__progress__bar { background: var(--color-blog-gray-210); height: 3px; } .blog-app-root .splide__slide { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .blog-app-root .splide__slide:focus { outline: 0; } @supports (outline-offset: -3px) { .blog-app-root .splide__slide:focus-visible { outline: 3px solid var(--color-blog-sky-500); outline-offset: -3px; } } @media screen and (-ms-high-contrast: none) { .blog-app-root .splide__slide:focus-visible { border: 3px solid var(--color-blog-sky-500); } } @supports (outline-offset: -3px) { .blog-app-root .splide.is-focus-in .splide__slide:focus { outline: 3px solid var(--color-blog-sky-500); outline-offset: -3px; } } @media screen and (-ms-high-contrast: none) { .blog-app-root .splide.is-focus-in .splide__slide:focus { border: 3px solid var(--color-blog-sky-500); } .blog-app-root .splide.is-focus-in .splide__track > .splide__list > .splide__slide:focus { border-color: var(--color-blog-sky-500); } } .blog-app-root .splide__toggle { cursor: pointer; } .blog-app-root .splide__toggle:focus-visible { outline: 3px solid var(--color-blog-sky-500); outline-offset: 3px; } .blog-app-root .splide.is-focus-in .splide__toggle:focus { outline: 3px solid var(--color-blog-sky-500); outline-offset: 3px; } .blog-app-root .splide__track--nav > .splide__list > .splide__slide { border: 3px solid transparent; cursor: pointer; } .blog-app-root .splide__track--nav > .splide__list > .splide__slide.is-active { border: 3px solid var(--color-black); } .blog-app-root .splide__arrows--rtl .splide__arrow--prev { left: auto; right: 1em; } .blog-app-root .splide__arrows--rtl .splide__arrow--prev svg { transform: scaleX(1); } .blog-app-root .splide__arrows--rtl .splide__arrow--next { left: 1em; right: auto; } .blog-app-root .splide__arrows--rtl .splide__arrow--next svg { transform: scaleX(-1); } .blog-app-root .splide__arrows--ttb .splide__arrow { left: 50%; transform: translate(-50%); } .blog-app-root .splide__arrows--ttb .splide__arrow--prev { top: 1em; } .blog-app-root .splide__arrows--ttb .splide__arrow--prev svg { transform: rotate(-90deg); } .blog-app-root .splide__arrows--ttb .splide__arrow--next { bottom: 1em; top: auto; } .blog-app-root .splide__arrows--ttb .splide__arrow--next svg { transform: rotate(90deg); } .blog-app-root .splide__pagination--ttb { bottom: 0; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; left: auto; padding: 1em 0; right: 0.5em; top: 0; } .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: 92px; height: 92px; 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: 64px; height: 64px; margin: 8px; border-radius: 50%; border: 6px 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: 6px 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: 1rem; width: 1rem; position: absolute; top: 1rem; right: 3rem; border-radius: 9px; transition-duration: 0.3s; content: ""; } @media (max-width: 768px) { .blog-body #theme-toggle.svelte-bxrhh + label.svelte-bxrhh { right: 1rem; } } .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: inset -6px -6px 1px 1px var(--color-card); } .blog-app-root .ztr-nowrap { white-space: nowrap; } }