/* The wayBetter Store: /store/ (storefront), /store/// (item pages), /store/submit/, and the pieces the galleries (/themes/, /plugins/) share with them. On top of base.css + gallery.css. */ .mark-name .mark-sub { margin-inline-start: 1px; } /* ---- Storefront hero ------------------------------------------------------------------------ */ .st-hero { position: relative; overflow: hidden; padding: 84px 0 44px; } .st-hero-wash { position: absolute; inset: -30% -10% auto; height: 820px; pointer-events: none; background: radial-gradient(40% 46% at 78% 34%, rgba(120, 86, 255, 0.24), transparent 70%), radial-gradient(34% 40% at 60% 22%, rgba(34, 211, 238, 0.14), transparent 70%), radial-gradient(30% 34% at 12% 8%, rgba(79, 107, 255, 0.16), transparent 70%); } .st-hero-dots { position: absolute; inset: 0; pointer-events: none; background-image: radial-gradient(rgba(142, 149, 171, 0.16) 1px, transparent 1px); background-size: 28px 28px; -webkit-mask-image: radial-gradient(60% 70% at 70% 30%, #000 20%, transparent 75%); mask-image: radial-gradient(60% 70% at 70% 30%, #000 20%, transparent 75%); } .st-hero .wrap { position: relative; } .st-hero-grid { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr); gap: 56px; align-items: center; } .st-hero h1 { margin: 0; font-size: clamp(48px, 7.4vw, 104px); line-height: 0.94; font-weight: 700; letter-spacing: -0.052em; } .st-hero h1 em { font-size: 1.1em; letter-spacing: -0.025em; } .st-hero .h1-line { display: block; animation: st-rise 1s var(--ease) both; } .st-hero .h1-line + .h1-line { animation-delay: 0.1s; } @keyframes st-rise { from { opacity: 0; translate: 0 24px; filter: blur(8px); } } .st-lede { margin: 28px 0 0; max-width: 35em; font-size: clamp(16.5px, 1.45vw, 18.5px); line-height: 1.62; color: var(--text-2); text-wrap: pretty; animation: st-rise 1s var(--ease) 0.2s both; } .st-hero .ctas { margin-top: 30px; } .st-stats { display: flex; flex-wrap: wrap; gap: 0; margin: 38px 0 0; animation: st-rise 1s var(--ease) 0.3s both; } .st-stats div { padding: 0 26px; border-inline-start: 1px solid var(--line-strong); } .st-stats div:first-child { padding-inline-start: 0; border-inline-start: 0; } .st-stats dt { font: 500 11.5px/1 var(--mono); letter-spacing: 0.08em; text-transform: uppercase; color: var(--faint); } .st-stats dd { margin: 10px 0 0; font: 700 clamp(30px, 3.4vw, 44px)/1 var(--sans); letter-spacing: -0.05em; font-variant-numeric: tabular-nums; } .st-stats dd.st-stat-text { font: 400 clamp(26px, 3vw, 38px)/1.12 var(--serif); font-style: italic; letter-spacing: -0.01em; background: var(--brush); -webkit-background-clip: text; background-clip: text; color: transparent; padding-right: 0.08em; } /* Three real previews, fanned like cards on a table. */ .st-art { position: relative; aspect-ratio: 1 / 0.86; animation: st-rise 1.2s var(--ease) 0.25s both; } .st-art::before { content: ''; position: absolute; inset: 12% 4% 6%; border-radius: 50%; background: radial-gradient(50% 60% at 30% 60%, rgba(79, 107, 255, 0.5), transparent 70%), radial-gradient(50% 60% at 80% 40%, rgba(168, 85, 247, 0.42), transparent 70%); filter: blur(60px); opacity: 0.7; } .st-art img { position: absolute; width: 74%; height: auto; border-radius: 14px; box-shadow: 0 0 0 1px rgba(238, 240, 247, 0.12), 0 30px 70px -20px rgba(0, 0, 0, 0.9), 0 60px 120px -40px rgba(79, 107, 255, 0.5); transition: transform 0.6s var(--ease); } .st-art-1 { left: 0; top: 4%; transform: rotate(-7deg); } .st-art-2 { right: 0; top: 22%; transform: rotate(5deg); } .st-art-3 { left: 12%; bottom: 0; transform: rotate(-1.5deg); } .st-art:hover .st-art-1 { transform: rotate(-9deg) translate(-2%, -2%); } .st-art:hover .st-art-2 { transform: rotate(7deg) translate(2%, -1%); } .st-art:hover .st-art-3 { transform: rotate(-1.5deg) translateY(2%); } .st-hero-slim { padding: 56px 0 56px; } .st-hero-slim h1 { font-size: clamp(44px, 6.4vw, 88px); } .st-hero-slim .kicker { margin-top: 26px; } /* ---- Search and filters --------------------------------------------------------------------- */ .st-browse { padding: 0 0 72px; } .st-bar-wrap { padding: 14px 0; margin-bottom: 34px; border-block: 1px solid color-mix(in srgb, var(--line) 70%, transparent); background: color-mix(in srgb, var(--ground) 84%, transparent); } @media (min-width: 861px) and (min-height: 620px) { .st-bar-wrap { position: sticky; top: 65px; z-index: 30; backdrop-filter: blur(14px) saturate(1.3); -webkit-backdrop-filter: blur(14px) saturate(1.3); } } .st-bar { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; margin: 0; } .st-search { position: relative; display: block; } .st-search svg { position: absolute; inset-inline-start: 16px; top: 50%; width: 20px; height: 20px; margin-top: -10px; fill: none; stroke: var(--muted); stroke-width: 1.7; stroke-linecap: round; pointer-events: none; } .st-search input { width: 100%; height: 54px; padding-block: 0; padding-inline: 48px 52px; border-radius: 14px; border: 1px solid transparent; color: var(--text); font: 450 17px/1 var(--sans); letter-spacing: -0.01em; -webkit-appearance: none; appearance: none; background: linear-gradient(var(--field), var(--field)) padding-box, linear-gradient(90deg, var(--line-strong), var(--line-strong)) border-box; transition: box-shadow 0.25s var(--ease); } .st-search input::placeholder { color: var(--faint); } .st-search input::-webkit-search-cancel-button { -webkit-appearance: none; } .st-search input:focus { outline: none; background: linear-gradient(var(--chrome), var(--chrome)) padding-box, var(--brush) border-box; box-shadow: 0 14px 40px -18px rgba(79, 107, 255, 0.7); } .st-search kbd { position: absolute; inset-inline-end: 14px; top: 50%; translate: 0 -50%; color: var(--muted); pointer-events: none; } .st-search input:focus ~ kbd, html:not(.js) .st-search kbd { display: none; } .st-filters { display: contents; } .st-seg { justify-self: start; } @media (min-width: 861px) { .st-bar { grid-template-columns: minmax(0, 1fr) auto; align-items: center; column-gap: 14px; } .st-seg { grid-column: 2; grid-row: 1; padding: 4px; } .st-seg button { height: 44px; padding: 0 16px; } .st-chips { grid-column: 1 / -1; } .st-chips + .st-chips { margin-top: -4px; } } .st-seg { display: inline-flex; padding: 3px; border-radius: 12px; border: 1px solid var(--line-strong); background: var(--chrome); } .st-seg button, .st-chips button { height: 34px; padding: 0 13px; border: 1px solid transparent; border-radius: 9px; background: transparent; color: var(--text-2); font: 500 14px/1 var(--sans); cursor: pointer; white-space: nowrap; transition: background 0.2s var(--ease), border-color 0.2s var(--ease), color 0.2s var(--ease); } .st-seg button span, .st-chips button span { margin-inline-start: 4px; font: 500 12px var(--mono); color: var(--faint); } .st-seg button:hover, .st-chips button:hover { color: var(--text); background: var(--field); } .st-seg button[aria-pressed='true'] { color: var(--text); background: var(--raised); border-color: var(--line-strong); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset; } .st-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; } .st-chips-label { margin-inline-end: 4px; font: 500 11.5px/1 var(--mono); letter-spacing: 0.08em; text-transform: uppercase; color: var(--faint); } .st-chips button { border-radius: 999px; border-color: var(--line-strong); } .st-chips button[aria-pressed='true'] { color: var(--text); background: rgba(79, 107, 255, 0.16); border-color: rgba(79, 107, 255, 0.55); } .st-chips button[hidden] { display: none; } html:not(.js) .st-filters { display: none; } /* ---- Shelves and the grid ------------------------------------------------------------------- */ .st-shelf { margin: 0 0 48px; } .st-shelf-head { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin: 0 0 18px; } .st-shelf-head p { margin: 0; font: 500 12.5px/1.4 var(--mono); color: var(--faint); } .st-shelf-head a { color: var(--text-2); text-decoration: none; } .st-shelf-head a:hover { color: var(--text); } .st-h { margin: 0; font-size: clamp(24px, 2.6vw, 32px); line-height: 1.1; letter-spacing: -0.035em; font-weight: 680; } .st-row { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; } .gal-card-feature .gal-desc { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .gal-card-feature .gal-perms, .gal-card-feature .gal-meta { display: none; } .gal-card-feature { background: linear-gradient(var(--chrome), var(--chrome)) padding-box, linear-gradient(140deg, rgba(79, 107, 255, 0.6), rgba(34, 211, 238, 0.25) 45%, rgba(168, 85, 247, 0.55)) border-box; border-color: transparent; } /* Cards (shared with /themes/ and /plugins/). */ .gal-shot { position: relative; display: block; overflow: hidden; border-bottom: 1px solid var(--line); background: var(--field); } .gal-shot .gal-img { border-bottom: 0; transition: transform 0.6s var(--ease); } .gal-card:hover .gal-shot .gal-img { transform: scale(1.03); } .gal-kind { position: absolute; inset-inline-end: 12px; top: 12px; display: inline-flex; align-items: center; gap: 7px; height: 24px; padding: 0 10px; border-radius: 999px; background: rgba(7, 8, 12, 0.74); border: 1px solid rgba(255, 255, 255, 0.14); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); font: 500 11px/1 var(--mono); letter-spacing: 0.06em; text-transform: uppercase; color: #eef0f7; } .gal-kind::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: var(--b2); } .gal-kind-plugin::before { background: var(--b3); } .gal-body h2, .gal-body h3 { margin: 0; font-size: 19px; letter-spacing: -0.02em; font-weight: 650; min-width: 0; } .gal-body h2 a, .gal-body h3 a { text-decoration: none; } .gal-body h2 a:hover, .gal-body h3 a:hover { text-decoration: underline; text-decoration-color: var(--b2); text-underline-offset: 4px; } .gal-card .gal-desc { flex: none; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; } .gal-card[hidden] { display: none; } .gal-empty a { color: var(--text); } .st-all-head { margin-top: 6px; } .st-empty { max-width: 520px; margin: 28px auto 0; padding: 40px 28px; border: 1px dashed #33394f; border-radius: 20px; text-align: center; } .st-empty[hidden] { display: none; } .st-empty-mark { margin: 0 0 6px; font: 400 56px/1 var(--serif); font-style: italic; background: var(--brush); -webkit-background-clip: text; background-clip: text; color: transparent; } .st-empty h3 { margin: 0 0 8px; font-size: 22px; letter-spacing: -0.025em; font-weight: 660; overflow-wrap: anywhere; } .st-empty p { margin: 0 0 20px; color: var(--muted); font-size: 15px; } .st-empty .ctas { justify-content: center; } /* ---- "App is not installed" panel (src/install.ts puts it after the button that was pressed) -- */ .ins-panel { flex: none; width: 100%; margin-top: 10px; padding-block: 16px; padding-inline: 18px 16px; border-radius: 14px; border: 1px solid transparent; text-align: start; background: linear-gradient(var(--raised), var(--raised)) padding-box, var(--brush) border-box; box-shadow: 0 20px 50px -24px rgba(79, 107, 255, 0.7); animation: ins-in 0.35s var(--ease) both; } @keyframes ins-in { from { opacity: 0; translate: 0 -6px; } } .ins-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; } .ins-panel h4 { margin: 0; font-size: 15.5px; letter-spacing: -0.015em; font-weight: 650; } .ins-close { flex: none; width: 28px; height: 28px; margin-block: -4px 0; margin-inline: 0 -4px; border: 0; border-radius: 8px; background: transparent; color: var(--muted); font: 400 20px/1 var(--sans); cursor: pointer; } .ins-close:hover { color: var(--text); background: var(--field); } .ins-panel p { margin: 6px 0 12px; font-size: 14px; line-height: 1.5; color: var(--text-2); white-space: normal; } .ins-panel ol { margin: 0 0 12px; padding-inline-start: 1.2em; font-size: 14px; line-height: 1.5; color: var(--text-2); } .ins-panel ol a { color: var(--text); } .ins-acts { display: flex; flex-wrap: wrap; gap: 8px; } .ins-acts .btn { min-width: 0; height: auto; min-height: 38px; padding-block: 8px; white-space: normal; overflow-wrap: anywhere; text-align: center; line-height: 1.25; } /* ---- "How installing works" ----------------------------------------------------------------- */ .st-safe .sec-head { margin-bottom: 40px; } .st-steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-top: 1px solid var(--line); } .st-steps li { padding-block: 26px 8px; padding-inline: 0 24px; } .st-steps li + li { padding-inline-start: 24px; border-inline-start: 1px solid var(--line); } .st-steps .n { font: 400 38px/1 var(--serif); font-style: italic; color: var(--faint); } .st-steps h3 { margin: 16px 0 8px; font-size: 21px; letter-spacing: -0.025em; font-weight: 680; } .st-steps p { margin: 0; color: var(--muted); font-size: 15px; } .st-steps code, .st-honest code, .st-noapp code { font-size: 0.9em; color: var(--b2); } .st-honest { margin-top: 36px; padding: 22px 24px; border-radius: 18px; border: 1px solid rgba(255, 176, 32, 0.28); background: linear-gradient(180deg, rgba(255, 176, 32, 0.06), rgba(255, 176, 32, 0.02)); } .st-honest h3 { margin: 0 0 8px; font: 500 12px/1.3 var(--mono); letter-spacing: 0.08em; text-transform: uppercase; color: #ffc55c; } .st-honest p { margin: 0; max-width: 62em; color: var(--text-2); font-size: 15px; } .st-honest p + p { margin-top: 10px; } .st-noapp { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 24px; margin-top: 16px; padding: 22px 24px; border-radius: 18px; border: 1px solid var(--line-strong); background: var(--chrome); } .st-noapp h3 { margin: 0 0 6px; font-size: 19px; letter-spacing: -0.02em; font-weight: 660; } .st-noapp p { margin: 0; max-width: 52em; color: var(--muted); font-size: 15px; } .st-publish { border-top: 0; padding-top: 0; } .st-publish .next-cta { margin-top: 0; } /* ---- Item page ------------------------------------------------------------------------------ */ .it-crumbs { position: relative; padding-top: 22px; padding-bottom: 30px; font: 500 12.5px/1.4 var(--mono); color: var(--faint); } .it-crumbs ol { display: flex; flex-wrap: wrap; gap: 0 8px; list-style: none; margin: 0; padding: 0; } .it-crumbs li + li::before { content: '/'; margin-inline-end: 8px; color: var(--line-strong); } .it-crumbs a { color: var(--muted); text-decoration: none; } .it-crumbs a:hover { color: var(--text); } .it-crumbs [aria-current] { color: var(--text-2); } .st-hero-slim .it-crumbs { padding: 0; } .it-top { position: relative; overflow: hidden; padding: 0 0 56px; } .it-glow { --it-accent: #4f6bff; position: absolute; inset: -10% 0 auto; height: 620px; pointer-events: none; opacity: 0.9; background: radial-gradient(44% 56% at 22% 30%, color-mix(in srgb, var(--it-accent) 30%, transparent), transparent 70%), radial-gradient(40% 50% at 84% 10%, rgba(168, 85, 247, 0.16), transparent 70%); } .it-grid { position: relative; display: grid; grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr); gap: 52px; align-items: center; } .it-shot { margin: 0; padding: 1px; border-radius: 20px; background: linear-gradient(140deg, rgba(79, 107, 255, 0.85), rgba(34, 211, 238, 0.35) 45%, rgba(168, 85, 247, 0.8)); box-shadow: 0 50px 110px -40px rgba(79, 107, 255, 0.6), 0 30px 60px -30px rgba(0, 0, 0, 0.9); } .it-shot img { width: 100%; height: auto; border-radius: 19px; background: var(--field); } .it-head { min-width: 0; } .it-head .kicker { margin-bottom: 16px; } .it-head h1 { margin: 0; font-size: clamp(38px, 5vw, 66px); line-height: 0.98; letter-spacing: -0.048em; font-weight: 720; overflow-wrap: anywhere; } .it-by { margin: 14px 0 0; font: 500 13px/1.4 var(--mono); color: var(--faint); } .it-desc { margin: 16px 0 16px; font-size: clamp(16px, 1.35vw, 17.5px); line-height: 1.6; color: var(--text-2); text-wrap: pretty; } .it-head .gal-sw i { width: 26px; height: 22px; } .it-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 24px; } .it-note { margin: 14px 0 0; font-size: 13.5px; line-height: 1.5; color: var(--muted); } .it-note a, .it-fine a, .it-manual a { color: var(--text); text-underline-offset: 3px; } .it-tags { display: flex; flex-wrap: wrap; gap: 6px; list-style: none; margin: 18px 0 0; padding: 0; } .it-tags a { display: inline-flex; align-items: center; height: 26px; padding: 0 10px; border-radius: 999px; border: 1px solid var(--line-strong); font: 500 12px/1 var(--mono); color: var(--muted); text-decoration: none; } .it-tags a::before { content: '#'; color: var(--faint); margin-inline-end: 1px; } .it-tags a:hover { color: var(--text); border-color: #3a4260; } .it-body { padding: 0 0 72px; } .it-cols { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 48px; align-items: start; } .it-main { min-width: 0; display: grid; gap: 44px; } .it-block { min-width: 0; scroll-margin-top: 90px; } .it-h { margin: 0 0 16px; font-size: clamp(22px, 2.3vw, 28px); letter-spacing: -0.03em; font-weight: 680; line-height: 1.15; } .it-fine { margin: 14px 0 0; max-width: 62em; font-size: 14px; line-height: 1.55; color: var(--muted); } .it-fine code, .it-manual code, .it-steps code { font-size: 0.92em; color: var(--text-2); } .it-dim { color: var(--faint); } .it-perms { list-style: none; margin: 0; padding: 0; border: 1px solid var(--line); border-radius: 16px; background: var(--chrome); overflow: hidden; } .it-perms li { display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: 16px; padding: 14px 18px; font-size: 14.5px; } .it-perms li + li { border-top: 1px solid var(--line); } .it-perms b { position: relative; padding-inline-start: 16px; font-weight: 600; color: var(--text); } .it-perms b::before { content: ''; position: absolute; inset-inline-start: 0; top: 0.5em; width: 7px; height: 7px; border-radius: 50%; background: var(--muted); } .it-perms .is-ok b::before { background: var(--ok); } .it-perms .is-warn b::before { background: #ffb020; } .it-perms span { color: var(--text-2); } /* Area plugins (built into the app): a named tile instead of a file preview, and the feature list. */ .gal-kind-area::before { background: var(--ok); } .gal-shot-area { display: grid; place-items: center; aspect-ratio: 16 / 10; background: radial-gradient(120% 90% at 20% 10%, color-mix(in srgb, var(--b2) 28%, transparent), transparent 60%), var(--field); } .gal-area-name { font-size: clamp(26px, 3vw, 34px); font-weight: 700; letter-spacing: -0.03em; color: var(--text); } .st-areas { margin-bottom: 36px; } .it-grid-solo { grid-template-columns: minmax(0, 1fr); } .it-features { list-style: none; margin: 0; padding: 0; border: 1px solid var(--line); border-radius: 16px; background: var(--chrome); overflow: hidden; } .it-features li { display: grid; grid-template-columns: minmax(150px, 0.8fr) minmax(0, 2fr); gap: 16px; padding: 14px 18px; font-size: 14.5px; } .it-features li + li { border-top: 1px solid var(--line); } .it-features b { font-weight: 600; color: var(--text); } .it-features span { color: var(--text-2); } @media (max-width: 640px) { .it-features li { grid-template-columns: minmax(0, 1fr); gap: 4px; } } .it-palette { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; list-style: none; margin: 0; padding: 0; } .it-palette li { display: grid; gap: 4px; padding: 10px; border: 1px solid var(--line); border-radius: 14px; background: var(--chrome); font-size: 13.5px; color: var(--text-2); } .it-palette i { display: block; height: 56px; margin-bottom: 6px; border-radius: 9px; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1) inset; } .it-palette code { font-size: 12px; color: var(--faint); } .it-src { border: 1px solid var(--line-strong); border-radius: 16px; background: var(--chrome); } .it-src summary { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 4px 16px; padding-block: 16px; padding-inline: 18px 48px; position: relative; cursor: pointer; list-style: none; border-radius: 16px; } .it-src summary::-webkit-details-marker { display: none; } .it-src summary::after { content: '+'; position: absolute; inset-inline-end: 18px; top: 13px; font: 300 22px/1 var(--sans); color: var(--muted); } .it-src[open] summary::after { content: '\2212'; } .it-src-t { font-weight: 620; } .it-src-m { font: 500 12.5px/1.4 var(--mono); color: var(--faint); } .it-src .code { border: 0; border-top: 1px solid var(--line-strong); border-radius: 0 0 15px 15px; box-shadow: none; } .it-src pre { max-height: min(70vh, 640px); overflow: auto; } .it-src pre::-webkit-scrollbar { width: 8px; } .it-src pre a { color: var(--b2); } .it-raw { display: inline-flex; align-items: center; text-decoration: none; } .code-bar .copy-btn[hidden] { display: none; } .it-steps { margin: 0; padding: 0; list-style: none; counter-reset: step; display: grid; gap: 0; border: 1px solid var(--line); border-radius: 16px; background: var(--chrome); } .it-steps li { position: relative; padding-block: 16px; padding-inline: 58px 18px; font-size: 15px; color: var(--text-2); counter-increment: step; } .it-steps li + li { border-top: 1px solid var(--line); } .it-steps li::before { content: counter(step, lower-roman) '.'; position: absolute; inset-inline-start: 18px; top: 11px; font: 400 26px/1.2 var(--serif); font-style: italic; color: var(--faint); } .it-steps b { color: var(--text); font-weight: 620; } .it-manual { margin-top: 16px; padding: 18px 20px; border-radius: 16px; border: 1px solid var(--line-strong); background: color-mix(in srgb, var(--field) 70%, transparent); } .it-manual h3 { margin: 0 0 6px; font-size: 16.5px; letter-spacing: -0.015em; font-weight: 650; } .it-manual p { margin: 0; font-size: 14.5px; color: var(--text-2); } .it-side { position: sticky; top: 88px; display: grid; gap: 14px; min-width: 0; } .it-facts { margin: 0; border: 1px solid var(--line); border-radius: 16px; background: var(--chrome); overflow: hidden; } .it-facts div { display: flex; justify-content: space-between; gap: 16px; padding: 12px 16px; font-size: 14px; } .it-facts div + div { border-top: 1px solid var(--line); } .it-facts dt { flex: none; font: 500 12px/1.6 var(--mono); letter-spacing: 0.04em; text-transform: uppercase; color: var(--faint); } .it-facts dd { margin: 0; min-width: 0; text-align: end; color: var(--text); overflow-wrap: anywhere; } .it-facts dd a { text-underline-offset: 3px; } .it-facts code { font-size: 12.5px; color: var(--text-2); } .it-hash { padding: 14px 16px; border: 1px solid var(--line); border-radius: 16px; background: var(--chrome); } .it-hash-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px; font: 500 12px/1 var(--mono); letter-spacing: 0.04em; text-transform: uppercase; color: var(--faint); } .it-hash > code { display: block; font-size: 12px; line-height: 1.6; color: var(--text-2); word-break: break-all; } .it-hash .it-fine { margin-top: 10px; font-size: 12.5px; } .it-hash .it-fine code { word-break: break-all; } .it-more { padding: 56px 0 88px; border-top: 1px solid color-mix(in srgb, var(--line) 60%, transparent); } .it-more .gal-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } /* Media gallery: the item's own cover, screenshots and video (store-pages.ts → mediaHtml, src/media.ts). */ .it-media { min-width: 0; display: grid; gap: 12px; } .it-stage { display: grid; gap: 14px; min-width: 0; touch-action: pan-y; } .js .it-slide:not(.is-on) { display: none; } .it-slide { position: relative; padding: 0; background: none; box-shadow: none; border-radius: 0; } .it-slide img, .it-slide video { display: block; width: 100%; height: auto; border-radius: 18px; background: var(--field); box-shadow: 0 0 0 1px rgba(124, 200, 255, 0.28), 0 50px 110px -40px rgba(79, 107, 255, 0.6), 0 30px 60px -30px rgba(0, 0, 0, 0.9); } .it-zoom { display: block; border-radius: 19px; cursor: zoom-in; } .it-slide figcaption { padding: 12px 4px 0; font-size: 13.5px; line-height: 1.45; color: var(--text-2); } .it-play { position: absolute; left: 50%; top: 50%; width: 76px; height: 76px; margin: -38px 0 0 -38px; display: grid; place-items: center; border: 0; border-radius: 50%; cursor: pointer; color: #06121f; background: linear-gradient(180deg, #f4f6fb, #d9deea); box-shadow: 0 0 0 8px rgba(7, 8, 12, 0.35), 0 20px 50px -12px rgba(0, 0, 0, 0.8); transition: transform 0.25s var(--ease), opacity 0.25s var(--ease); } .it-video:has(figcaption) .it-play { top: calc(50% - 16px); } .it-play svg { width: 30px; height: 30px; fill: currentColor; margin-left: 3px; } .it-play:hover { transform: scale(1.06); } .it-play.is-playing { opacity: 0; pointer-events: none; } html:not(.js) .it-play { display: none; } .it-thumbs { display: flex; gap: 8px; overflow-x: auto; padding: 3px; margin: -3px; scrollbar-width: thin; } .it-thumbs button { position: relative; flex: 0 0 auto; width: 92px; padding: 0; border: 1px solid var(--line-strong); border-radius: 10px; overflow: hidden; background: var(--field); cursor: pointer; opacity: 0.62; transition: opacity 0.2s var(--ease), border-color 0.2s var(--ease); } .it-thumbs button:hover { opacity: 1; } .it-thumbs button[aria-pressed='true'] { opacity: 1; border-color: transparent; background: linear-gradient(var(--field), var(--field)) padding-box, var(--brush) border-box; } .it-thumbs img { display: block; width: 100%; height: auto; aspect-ratio: 16 / 10; object-fit: cover; } .it-thumbs svg { position: absolute; left: 50%; top: 50%; width: 26px; height: 26px; margin: -13px 0 0 -13px; padding: 5px 4px 5px 6px; border-radius: 50%; fill: #06121f; background: rgba(244, 246, 251, 0.92); } html:not(.js) .it-thumbs { display: none; } .lb { width: 100vw; height: 100dvh; max-width: none; max-height: none; margin: 0; padding: 56px 72px; border: 0; background: transparent; color: var(--text); } .lb[open] { display: grid; place-items: center; } .lb::backdrop { background: rgba(3, 4, 7, 0.9); backdrop-filter: blur(6px); } .lb figure { margin: 0; min-width: 0; max-width: 100%; display: grid; justify-items: center; gap: 12px; touch-action: pan-y; } .lb img { max-width: 100%; max-height: calc(100dvh - 170px); width: auto; height: auto; border-radius: 14px; box-shadow: 0 0 0 1px rgba(238, 240, 247, 0.12), 0 40px 100px -30px rgba(0, 0, 0, 0.9); } .lb figcaption { max-width: 60em; text-align: center; font-size: 14.5px; color: var(--text-2); } .lb-count { position: fixed; left: 0; right: 0; bottom: 18px; margin: 0; text-align: center; font: 500 12.5px/1 var(--mono); color: var(--faint); } .lb-close, .lb-nav { position: fixed; display: grid; place-items: center; width: 48px; height: 48px; border: 1px solid var(--line-strong); border-radius: 50%; background: color-mix(in srgb, var(--raised) 88%, transparent); color: var(--text); font: 300 28px/1 var(--sans); cursor: pointer; } .lb-close:hover, .lb-nav:hover { border-color: #3a4260; background: var(--raised); } .lb-close { right: 18px; top: 18px; } .lb-nav { top: 50%; margin-top: -24px; padding-bottom: 4px; } .lb-prev { left: 14px; } .lb-next { right: 14px; } .lb-nav[hidden], .lb-count[hidden] { display: none; } /* ---- /store/submit/ ------------------------------------------------------------------------- */ .repo-note { max-width: 46em; margin: 26px 0 0; padding: 12px 16px; border-radius: 12px; border: 1px solid var(--line-strong); background: color-mix(in srgb, var(--chrome) 82%, transparent); font-size: 14px; color: var(--text-2); } .repo-note a { color: var(--text); } .sub-sec { padding: 64px 0; border-top: 1px solid color-mix(in srgb, var(--line) 60%, transparent); scroll-margin-top: 60px; } .sub-grid { display: grid; grid-template-columns: 300px minmax(0, 1fr); gap: 56px; align-items: start; } .sub-head { position: sticky; top: 96px; } .sub-n { display: block; font: 400 72px/0.9 var(--serif); font-style: italic; background: var(--brush); -webkit-background-clip: text; background-clip: text; color: transparent; width: max-content; padding-right: 0.12em; } .sub-n-alt { font: 500 34px/1.6 var(--mono); font-style: normal; letter-spacing: -0.04em; } .sub-head h2 { margin: 12px 0 10px; font-size: clamp(28px, 3vw, 38px); line-height: 1.04; letter-spacing: -0.04em; font-weight: 690; } .sub-head p { margin: 0; color: var(--muted); font-size: 15px; } .sub-head a, .sub-fine a, .sub-list a, .sub-defs a { color: var(--text); text-underline-offset: 3px; } .sub-head code, .sub-body code { font-size: 0.9em; color: var(--text-2); } .sub-body { min-width: 0; display: grid; gap: 18px; } .sub-two { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; } .sub-card { min-width: 0; display: flex; flex-direction: column; gap: 12px; padding: 22px; border-radius: 18px; border: 1px solid var(--line); background: var(--chrome); } .sub-card-hi { border-color: transparent; background: linear-gradient(var(--chrome), var(--chrome)) padding-box, var(--brush) border-box; } .sub-card h3 { margin: 0; font-size: 20px; letter-spacing: -0.025em; font-weight: 670; } .sub-card p { margin: 0; color: var(--text-2); font-size: 15px; } .sub-card ol { margin: 0; padding-inline-start: 1.25em; color: var(--text-2); font-size: 15px; display: grid; gap: 4px; } .sub-card .ctas { margin-top: auto; padding-top: 6px; gap: 8px; } /* The command is never cut: a longer "Copy" wraps under it. */ .sub-card .inline-cmd { width: 100%; justify-content: space-between; font-size: 14px; min-width: 0; flex-wrap: wrap; height: auto; min-height: 48px; padding-block: 7px; row-gap: 6px; } .sub-card .inline-cmd .cmd-text { flex: 1 0 auto; max-width: 100%; min-width: 0; overflow: hidden; text-overflow: ellipsis; text-align: start; } .sub-fine { margin: 0; font-size: 14px; line-height: 1.55; color: var(--muted); } .sub-list { list-style: none; margin: 0; padding: 0; border: 1px solid var(--line); border-radius: 16px; background: var(--chrome); } .sub-list li { padding: 15px 18px; font-size: 15px; color: var(--text-2); } .sub-list li + li { border-top: 1px solid var(--line); } .sub-list b { color: var(--text); font-weight: 620; } .sub-defs { margin: 0; border: 1px solid var(--line); border-radius: 16px; background: var(--chrome); } .sub-defs div { display: grid; grid-template-columns: 130px minmax(0, 1fr); gap: 16px; padding: 13px 18px; font-size: 14.5px; } .sub-defs div + div { border-top: 1px solid var(--line); } .sub-defs dt { color: var(--text); font-weight: 600; } .sub-defs dd { margin: 0; color: var(--text-2); } .sub-checks { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .sub-checks li { position: relative; padding-block: 14px; padding-inline: 40px 16px; border: 1px solid var(--line); border-radius: 14px; background: var(--chrome); font-size: 14px; } .sub-checks li::before { content: '✓'; position: absolute; inset-inline-start: 16px; top: 13px; color: var(--ok); font-weight: 700; } .sub-checks b { display: block; color: var(--text); font-weight: 620; margin-bottom: 2px; } .sub-checks span { color: var(--muted); } .sub-sign { margin-top: 0; } .sub-body .code pre { white-space: pre; } /* ---- Small screens -------------------------------------------------------------------------- */ @media (max-width: 1080px) { .st-row { grid-template-columns: repeat(2, minmax(0, 1fr)); } .it-cols { grid-template-columns: minmax(0, 1fr) 300px; gap: 32px; } .sub-grid { grid-template-columns: 240px minmax(0, 1fr); gap: 36px; } } @media (max-width: 860px) { .st-hero { padding: 56px 0 36px; } .st-hero-grid { grid-template-columns: minmax(0, 1fr); gap: 40px; } .st-art { max-width: 520px; width: 100%; margin: 0 auto; } .it-grid { grid-template-columns: minmax(0, 1fr); gap: 28px; } .it-cols { grid-template-columns: minmax(0, 1fr); } .it-side { position: static; order: -1; } .it-more .gal-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .st-steps { grid-template-columns: minmax(0, 1fr); } .st-steps li, .st-steps li + li { padding: 22px 0 6px; border-inline-start: 0; } .st-steps li + li { border-top: 1px solid var(--line); margin-top: 14px; } .st-noapp { grid-template-columns: minmax(0, 1fr); } .sub-grid { grid-template-columns: minmax(0, 1fr); gap: 22px; } .sub-head { position: static; } .sub-n { font-size: 56px; } .sub-n-alt { font-size: 28px; } } @media (max-width: 640px) { .st-hero { padding: 40px 0 28px; } .st-hero-slim { padding: 28px 0 40px; } .st-stats div { padding: 0 16px; } .st-stats { row-gap: 18px; } .st-art { display: none; } .st-bar-wrap { margin-bottom: 26px; } .st-search input { height: 50px; font-size: 16px; } .st-search kbd { display: none; } .st-search input { padding-inline-end: 16px; } .st-seg { width: 100%; } .st-seg button { flex: 1; padding: 0 8px; } /* Shelves scroll sideways inside their own box; the page never does. */ .st-row { grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: min(78vw, 300px); overflow-x: auto; scroll-snap-type: x mandatory; margin: 0 calc(var(--gutter) * -1); padding: 0 var(--gutter) 8px; scrollbar-width: none; } .st-row::-webkit-scrollbar { display: none; } .st-row > * { scroll-snap-align: start; } .st-shelf-head { flex-wrap: wrap; } .it-top { padding: 0 0 40px; } .it-crumbs { padding-top: 16px; padding-bottom: 20px; } .it-actions .btn { flex: 1 1 100%; } .it-perms li { grid-template-columns: minmax(0, 1fr); gap: 4px; } .it-palette { grid-template-columns: repeat(2, minmax(0, 1fr)); } .lb { padding: 64px 10px 56px; } .lb-nav { top: auto; bottom: 8px; margin-top: 0; width: 44px; height: 44px; } .lb-prev { left: 12px; } .lb-next { right: 12px; } .it-play { width: 64px; height: 64px; margin: -32px 0 0 -32px; } .it-more .gal-grid { grid-template-columns: minmax(0, 1fr); } .it-more { padding: 40px 0 64px; } .sub-sec { padding: 44px 0; } .sub-two, .sub-checks { grid-template-columns: minmax(0, 1fr); } .sub-defs div { grid-template-columns: minmax(0, 1fr); gap: 2px; } .sub-card { padding: 18px; } .st-honest, .st-noapp { padding: 18px; } .st-noapp .btn { width: 100%; } .ins-acts .btn { flex: 1 1 100%; } }