diff options
| author | Leitwolf11 | 2026-09-01 14:28:16 +0300 |
|---|---|---|
| committer | Leitwolf11 | 2026-09-01 14:28:16 +0300 |
| commit | 0752b55d0095bd0b756d112e03692fe4a341c433 (patch) | |
| tree | 7d1a0fe4e6fcfbbf062fe3c3c5634a6a0be71bc8 /frontend/src/styles | |
| parent | 6420aa30d09cb0815bdf7c140ebeca6218053870 (diff) | |
| download | website-1.0.0.tar.gz | |
Redesign ViGet as a first-class Progmasoft product surface1.0.0
Diffstat (limited to 'frontend/src/styles')
| -rw-r--r-- | frontend/src/styles/registry.css | 704 |
1 files changed, 704 insertions, 0 deletions
diff --git a/frontend/src/styles/registry.css b/frontend/src/styles/registry.css new file mode 100644 index 0000000..8100927 --- /dev/null +++ b/frontend/src/styles/registry.css @@ -0,0 +1,704 @@ +/* + * SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> + * SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.0 + */ + +/* ViGet deliberately shares Progmasoft's restrained, light visual language. */ +.registry-theme { + --registry-blue: #0066b8; + --registry-blue-dark: #004e8c; + --registry-blue-soft: #e8f3fb; + --registry-ink: #121417; + --registry-muted: #5c6670; + --registry-line: #d9e0e6; + --registry-surface: #ffffff; + --registry-surface-soft: #f5f8fa; + background: var(--registry-surface); + color: var(--registry-ink); + color-scheme: light; + font-family: "Segoe UI Variable", "Segoe UI", system-ui, -apple-system, sans-serif; +} + +.registry-theme main { + width: 100%; + margin: 0; +} + +.registry-theme h1, +.registry-theme h2, +.registry-theme h3, +.registry-theme p { + font-family: inherit; +} + +.registry-theme a { + color: inherit; +} + +.registry-surface { + display: flex; + min-height: 100vh; + flex-direction: column; + background: var(--registry-surface); +} + +.registry-shell { + width: min(1180px, calc(100% - 48px)); + margin-inline: auto; +} + +/* Header and brand */ +.registry-theme .registry-header { + position: sticky; + z-index: 20; + top: 0; + width: 100%; + border-bottom: 1px solid var(--registry-line); + background: rgb(255 255 255 / 96%); + backdrop-filter: blur(14px); +} + +.registry-header-inner { + display: flex; + min-height: 68px; + align-items: center; + justify-content: space-between; + gap: 28px; +} + +.registry-brand { + display: inline-flex; + align-items: center; + flex: 0 0 auto; + gap: 10px; + text-decoration: none; +} + +.registry-brand strong { + color: #8e0000; + font-size: 1.1rem; + font-weight: 720; + letter-spacing: -0.02em; +} + +.progmasoft-mark { + display: grid; + width: 24px; + height: 24px; + grid-template-columns: repeat(2, 1fr); + gap: 2px; +} + +.progmasoft-tile { + display: block; +} + +.tile-slate { background: #3b4658; } +.tile-teal { background: #1e7188; } +.tile-violet { background: #7655fa; } +.tile-orange { background: #dc7644; } + +.registry-product { + margin-left: 4px; + padding-left: 14px; + border-left: 1px solid var(--registry-line); + color: #39434d; + font-size: 0.98rem; + font-weight: 650; +} + +.registry-theme .repository-navigation { + display: flex; + align-items: center; + gap: 26px; + font-size: 0.9rem; + font-weight: 600; +} + +.registry-theme .repository-navigation a { + padding: 8px 0; + color: #38434c; + text-decoration: none; +} + +.registry-theme .repository-navigation a:hover { + color: var(--registry-blue); +} + +.registry-theme .repository-navigation .repository-register { + padding: 9px 16px; + border: 1px solid var(--registry-blue); + background: var(--registry-blue); + color: #fff; +} + +.registry-theme .repository-navigation .repository-register:hover { + border-color: var(--registry-blue-dark); + background: var(--registry-blue-dark); + color: #fff; +} + +/* Shared typography and controls */ +.registry-eyebrow { + margin: 0 0 18px; + color: var(--registry-blue-dark); + font-size: 0.76rem; + font-weight: 750; + letter-spacing: 0.13em; + text-transform: uppercase; +} + +.registry-actions { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 12px; + margin-top: 34px; +} + +.registry-button { + display: inline-flex; + min-height: 44px; + align-items: center; + justify-content: center; + padding: 0 20px; + border: 1px solid transparent; + font-size: 0.92rem; + font-weight: 700; + text-decoration: none; + transition: border-color 140ms ease, background-color 140ms ease, color 140ms ease; +} + +.registry-button-primary { + background: var(--registry-blue); + color: #fff !important; +} + +.registry-button-primary:hover { + background: var(--registry-blue-dark); +} + +.registry-button-secondary { + border-color: #aebbc5; + background: #fff; + color: #26313a !important; +} + +.registry-button-secondary:hover { + border-color: var(--registry-blue); + color: var(--registry-blue-dark) !important; +} + +.registry-text-link { + color: var(--registry-blue-dark) !important; + font-size: 0.92rem; + font-weight: 700; + text-decoration: none; +} + +.registry-theme a:focus-visible { + outline: 3px solid #70b5e8; + outline-offset: 3px; +} + +/* Registry landing page */ +.registry-hero { + position: relative; + overflow: hidden; + padding: 92px 0 88px; + border-bottom: 1px solid var(--registry-line); + background: + linear-gradient(90deg, transparent 0 67%, rgb(0 102 184 / 4%) 67% 100%), + linear-gradient(180deg, #fff, #fbfdff); +} + +.registry-hero::after { + position: absolute; + top: -130px; + right: -160px; + width: 520px; + height: 520px; + border: 1px solid rgb(0 102 184 / 10%); + border-radius: 50%; + content: ""; +} + +.registry-hero-grid, +.registry-subhero-grid { + position: relative; + z-index: 1; + display: grid; + align-items: center; + grid-template-columns: minmax(0, 1.45fr) minmax(330px, 0.75fr); + gap: 76px; +} + +.registry-hero-copy h1, +.registry-subhero h1 { + max-width: 760px; + margin: 0; + color: var(--registry-ink); + font-size: clamp(3rem, 6.2vw, 5.55rem); + font-weight: 650; + letter-spacing: -0.055em; + line-height: 0.99; +} + +.registry-hero-copy h1 span { + color: var(--registry-blue); +} + +.registry-lede, +.registry-subhero-grid > div > p:not(.registry-eyebrow) { + max-width: 670px; + margin: 27px 0 0; + color: var(--registry-muted); + font-size: 1.13rem; + line-height: 1.65; +} + +.registry-availability { + position: relative; + padding: 30px; + border: 1px solid #cbd6de; + border-top: 4px solid var(--registry-blue); + background: #fff; + box-shadow: 0 18px 55px rgb(29 51 68 / 10%); +} + +.registry-availability-heading { + display: flex; + align-items: center; + gap: 9px; + color: #35505f; + font-size: 0.78rem; + font-weight: 750; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.registry-status-dot { + width: 9px; + height: 9px; + border-radius: 50%; + background: #168451; + box-shadow: 0 0 0 4px #dff3e8; +} + +.registry-availability h2 { + margin: 24px 0 12px; + color: var(--registry-ink); + font-size: 1.65rem; + font-weight: 680; + letter-spacing: -0.025em; + line-height: 1.2; +} + +.registry-availability > p { + margin: 0; + color: var(--registry-muted); + line-height: 1.58; +} + +.registry-availability dl { + display: grid; + gap: 12px; + margin: 27px 0 0; +} + +.registry-availability dl div { + display: flex; + justify-content: space-between; + gap: 18px; + padding-top: 12px; + border-top: 1px solid var(--registry-line); +} + +.registry-availability dt { + color: #66717a; + font-size: 0.82rem; +} + +.registry-availability dd { + margin: 0; + color: #1e2931; + font-size: 0.82rem; + font-weight: 700; + text-align: right; +} + +.registry-catalogs { + padding: 90px 0 100px; + background: var(--registry-surface); +} + +.registry-section-heading { + display: grid; + align-items: end; + grid-template-columns: minmax(0, 1.2fr) minmax(280px, 0.6fr); + gap: 70px; + margin-bottom: 42px; +} + +.registry-section-heading h2, +.registry-principles h2 { + max-width: 680px; + margin: 0; + color: var(--registry-ink); + font-size: clamp(2rem, 4vw, 3.35rem); + font-weight: 650; + letter-spacing: -0.045em; + line-height: 1.06; +} + +.registry-section-heading > p { + margin: 0; + color: var(--registry-muted); + line-height: 1.65; +} + +.registry-catalog-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 22px; +} + +.registry-catalog-card { + display: flex; + min-height: 340px; + flex-direction: column; + padding: 32px; + border: 1px solid var(--registry-line); + background: #fff; + color: var(--registry-ink); + text-decoration: none; + transition: border-color 150ms ease, box-shadow 150ms ease, transform 150ms ease; +} + +a.registry-catalog-card:hover { + border-color: #87afd0; + box-shadow: 0 16px 40px rgb(37 73 99 / 10%); + transform: translateY(-3px); +} + +.registry-catalog-card-primary { + border-color: var(--registry-blue-dark); + background: var(--registry-blue-dark); + color: #fff; +} + +.registry-card-index { + align-self: flex-end; + color: #81909a; + font-size: 0.75rem; + font-weight: 750; + letter-spacing: 0.08em; +} + +.registry-catalog-card-primary .registry-card-index, +.registry-catalog-card-primary .registry-card-copy { + color: #cfe7f8; +} + +.registry-catalog-card > p { + margin: 28px 0 6px; + color: inherit; + font-size: 0.78rem; + font-weight: 700; + letter-spacing: 0.08em; + opacity: 0.76; + text-transform: uppercase; +} + +.registry-catalog-card h3 { + margin: 0 0 24px; + color: inherit; + font-size: 2rem; + font-weight: 650; + letter-spacing: -0.035em; +} + +.registry-catalog-card code, +.registry-coordinate { + overflow-wrap: anywhere; + color: inherit; + font-family: "Cascadia Code", "SFMono-Regular", Consolas, monospace; + font-size: 0.85rem; + line-height: 1.6; +} + +.registry-card-copy { + margin-top: auto; + padding-top: 34px; + color: var(--registry-muted); + line-height: 1.55; +} + +.registry-catalog-card > strong { + margin-top: 18px; + color: var(--registry-blue-dark); + font-size: 0.88rem; +} + +.registry-principles { + padding: 92px 0; + background: var(--registry-surface-soft); +} + +.registry-principles-grid { + display: grid; + grid-template-columns: minmax(0, 0.9fr) minmax(400px, 1.1fr); + gap: 90px; +} + +.registry-principles ol { + display: grid; + gap: 0; + margin: 0; + padding: 0; + list-style: none; +} + +.registry-principles li { + display: grid; + grid-template-columns: 50px 1fr; + gap: 18px; + padding: 24px 0; + border-top: 1px solid #cdd7de; +} + +.registry-principles li > span { + color: var(--registry-blue); + font-size: 0.77rem; + font-weight: 750; +} + +.registry-principles li strong { + color: var(--registry-ink); + font-size: 1.04rem; +} + +.registry-principles li p { + margin: 7px 0 0; + color: var(--registry-muted); + line-height: 1.55; +} + +/* DSL plugin catalog */ +.registry-subhero { + padding: 86px 0 96px; + border-bottom: 1px solid var(--registry-line); + background: linear-gradient(135deg, #f6fafd 0%, #fff 58%); +} + +.registry-subhero h1 { + font-size: clamp(3rem, 5.5vw, 4.8rem); +} + +.registry-coordinate { + display: block; + margin-top: 28px; + padding: 13px 14px; + background: #eef4f8; + color: #24455c; +} + +.registry-guidance { + padding: 80px 0 96px; +} + +.registry-guidance-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + border-top: 1px solid var(--registry-line); + border-bottom: 1px solid var(--registry-line); +} + +.registry-guidance-grid > div { + min-height: 220px; + padding: 30px; + border-right: 1px solid var(--registry-line); +} + +.registry-guidance-grid > div:last-child { + border-right: 0; +} + +.registry-guidance-grid span { + display: block; + margin-bottom: 28px; + color: var(--registry-blue-dark); + font-size: 0.75rem; + font-weight: 750; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.registry-guidance-grid strong { + color: var(--registry-ink); + font-size: 1.25rem; +} + +.registry-guidance-grid p { + margin: 13px 0 0; + color: var(--registry-muted); + line-height: 1.58; +} + +/* Footer */ +.registry-theme .registry-footer { + width: 100%; + margin: auto 0 0; + padding: 58px 0 24px; + border-top: 1px solid var(--registry-line); + background: #fff; + color: var(--registry-ink); +} + +.registry-footer-grid { + display: grid; + grid-template-columns: minmax(280px, 1.7fr) repeat(2, minmax(140px, 0.55fr)); + gap: 70px; +} + +.registry-footer-brand > p { + max-width: 420px; + margin: 22px 0 0; + color: var(--registry-muted); + line-height: 1.6; +} + +.registry-footer-links { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 12px; +} + +.registry-footer-links strong { + margin-bottom: 4px; + font-size: 0.82rem; + letter-spacing: 0.05em; + text-transform: uppercase; +} + +.registry-footer-links a { + color: var(--registry-muted); + font-size: 0.9rem; + text-decoration: none; +} + +.registry-footer-links a:hover { + color: var(--registry-blue); +} + +.registry-footer-bottom { + display: flex; + justify-content: space-between; + gap: 20px; + margin-top: 54px; + padding-top: 22px; + border-top: 1px solid var(--registry-line); + color: #747f88; + font-size: 0.78rem; +} + +@media (max-width: 940px) { + .registry-theme .repository-navigation { + gap: 16px; + } + + .registry-theme .repository-navigation a:nth-child(5) { + display: none; + } + + .registry-hero-grid, + .registry-subhero-grid { + grid-template-columns: 1fr; + gap: 56px; + } + + .registry-availability { + max-width: 620px; + } + + .registry-principles-grid { + grid-template-columns: 1fr; + gap: 48px; + } +} + +@media (max-width: 720px) { + .registry-shell { + width: min(100% - 32px, 1180px); + } + + .registry-header-inner { + min-height: 62px; + } + + .registry-theme .repository-navigation a:not(.repository-register):not(:first-child) { + display: none; + } + + .registry-theme .repository-navigation { + gap: 12px; + } + + .registry-hero, + .registry-subhero { + padding: 66px 0 70px; + } + + .registry-hero-copy h1, + .registry-subhero h1 { + font-size: clamp(2.65rem, 12.5vw, 4rem); + } + + .registry-section-heading, + .registry-catalog-grid, + .registry-guidance-grid, + .registry-footer-grid { + grid-template-columns: 1fr; + } + + .registry-section-heading { + gap: 24px; + } + + .registry-catalogs, + .registry-principles, + .registry-guidance { + padding: 68px 0; + } + + .registry-guidance-grid > div { + min-height: 0; + border-right: 0; + border-bottom: 1px solid var(--registry-line); + } + + .registry-guidance-grid > div:last-child { + border-bottom: 0; + } + + .registry-footer-grid { + gap: 40px; + } +} + +@media (max-width: 460px) { + .registry-product, + .registry-theme .repository-navigation > a:first-child { + display: none; + } + + .registry-availability, + .registry-catalog-card { + padding: 24px; + } + + .registry-footer-bottom { + flex-direction: column; + } +} |