feat(website): brand layer — teal palette, table logo, wordmark, footer
Anchor the site to the product's identity (Phase B branding):
- Accent palette mapped to the app's in-TUI teal (--sl-color-accent-*,
light + dark); trim the splash hero's oversized desktop bottom padding.
- Header logo: a database-table glyph with a teal primary-key cell
(light/dark variants); favicon redrawn to match.
- Landing wordmark 'RELational PLAYground': teal picks out REL+PLAY
('relplay', the domain) and R/D/B/M/S (spelling out RDBMS). Sizes
locked in em off one master scale so the lockup zooms as a rigid unit.
- Footer override: default footer + an understated company (Lazy
Evaluation Ltd) and source/issues line.
No engine names or 'DSL' in user-facing copy.
This commit is contained in:
@@ -25,9 +25,20 @@ export default defineConfig({
|
|||||||
starlight({
|
starlight({
|
||||||
title: 'RDBMS Playground',
|
title: 'RDBMS Playground',
|
||||||
tagline: 'Learn relational databases by doing.',
|
tagline: 'Learn relational databases by doing.',
|
||||||
// TODO(Phase B): point at the real repository once it moves to its
|
// Header logo: a database-table glyph with a teal primary-key cell.
|
||||||
// public home. Omitted for now rather than linking the wrong repo.
|
// Separate light/dark files so the outline adapts to the theme;
|
||||||
// social: [{ icon: 'github', label: 'GitHub', href: '…' }],
|
// `replacesTitle: false` keeps the "RDBMS Playground" wordmark beside it.
|
||||||
|
logo: {
|
||||||
|
light: './src/assets/relplay-logo-light.svg',
|
||||||
|
dark: './src/assets/relplay-logo-dark.svg',
|
||||||
|
replacesTitle: false,
|
||||||
|
},
|
||||||
|
// Footer override: Starlight's default footer + a small company/source line.
|
||||||
|
components: {
|
||||||
|
Footer: './src/components/Footer.astro',
|
||||||
|
},
|
||||||
|
// TODO(Phase B): a header social link to the repo is deliberately omitted
|
||||||
|
// — the source/issues link lives understated in the footer instead.
|
||||||
customCss: ['./src/styles/global.css'],
|
customCss: ['./src/styles/global.css'],
|
||||||
// Register the simple-mode command grammar with Expressive Code (Shiki).
|
// Register the simple-mode command grammar with Expressive Code (Shiki).
|
||||||
expressiveCode: { shiki: { langs: [rdbmsLang, rdbmsSyntax] } },
|
expressiveCode: { shiki: { langs: [rdbmsLang, rdbmsSyntax] } },
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path fill-rule="evenodd" d="M81 36 64 0 47 36l-1 2-9-10a6 6 0 0 0-9 9l10 10h-2L0 64l36 17h2L28 91a6 6 0 1 0 9 9l9-10 1 2 17 36 17-36v-2l9 10a6 6 0 1 0 9-9l-9-9 2-1 36-17-36-17-2-1 9-9a6 6 0 1 0-9-9l-9 10v-2Zm-17 2-2 5c-4 8-11 15-19 19l-5 2 5 2c8 4 15 11 19 19l2 5 2-5c4-8 11-15 19-19l5-2-5-2c-8-4-15-11-19-19l-2-5Z" clip-rule="evenodd"/><path d="M118 19a6 6 0 0 0-9-9l-3 3a6 6 0 1 0 9 9l3-3Zm-96 4c-2 2-6 2-9 0l-3-3a6 6 0 1 1 9-9l3 3c3 2 3 6 0 9Zm0 82c-2-2-6-2-9 0l-3 3a6 6 0 1 0 9 9l3-3c3-2 3-6 0-9Zm96 4a6 6 0 0 1-9 9l-3-3a6 6 0 1 1 9-9l3 3Z"/><style>path{fill:#000}@media (prefers-color-scheme:dark){path{fill:#fff}}</style></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><g fill="none" stroke="#1A1F2C" stroke-width="2.3"><rect x="5" y="7" width="22" height="18" rx="3.2"/><path d="M5.5 13h21"/></g><circle cx="9.7" cy="10" r="2" fill="#2f8f9e"/><style>g{stroke:#1A1F2C}@media (prefers-color-scheme:dark){g{stroke:#E6E6E6}}</style></svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 696 B After Width: | Height: | Size: 327 B |
@@ -0,0 +1,7 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="RDBMS Playground">
|
||||||
|
<rect x="3.5" y="5" width="17" height="14" rx="2.4" stroke="#E6E6E6" stroke-width="1.7"/>
|
||||||
|
<path d="M3.5 9.6h17" stroke="#E6E6E6" stroke-width="1.5"/>
|
||||||
|
<path d="M11 5v14" stroke="#E6E6E6" stroke-width="1.3" opacity="0.55"/>
|
||||||
|
<path d="M3.5 14.3h17" stroke="#E6E6E6" stroke-width="1.3" opacity="0.4"/>
|
||||||
|
<circle cx="7.1" cy="7.3" r="1.45" fill="#56B6C2"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 503 B |
@@ -0,0 +1,7 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="RDBMS Playground">
|
||||||
|
<rect x="3.5" y="5" width="17" height="14" rx="2.4" stroke="#1A1F2C" stroke-width="1.7"/>
|
||||||
|
<path d="M3.5 9.6h17" stroke="#1A1F2C" stroke-width="1.5"/>
|
||||||
|
<path d="M11 5v14" stroke="#1A1F2C" stroke-width="1.3" opacity="0.6"/>
|
||||||
|
<path d="M3.5 14.3h17" stroke="#1A1F2C" stroke-width="1.3" opacity="0.45"/>
|
||||||
|
<circle cx="7.1" cy="7.3" r="1.45" fill="#0F6B76"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 503 B |
@@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
/**
|
||||||
|
* Footer override: render Starlight's default footer (pagination, last-updated,
|
||||||
|
* "Built with Starlight"), then append a small, understated brand line — the
|
||||||
|
* company (linked to its disclosures) and an unobtrusive source/issues link
|
||||||
|
* (true to "people can join in, but don't advertise it loudly").
|
||||||
|
*/
|
||||||
|
import Default from '@astrojs/starlight/components/Footer.astro';
|
||||||
|
---
|
||||||
|
|
||||||
|
<Default><slot /></Default>
|
||||||
|
|
||||||
|
<div class="relplay-footer">
|
||||||
|
<p>
|
||||||
|
Made by <a href="https://www.lazyevaluation.biz/">Lazy Evaluation Ltd</a>
|
||||||
|
<span class="sep">·</span>
|
||||||
|
<a href="https://git.lazyeval.net/oli/rdbms-playground">Source & issues</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.relplay-footer {
|
||||||
|
margin-top: 1rem;
|
||||||
|
padding-top: 1rem;
|
||||||
|
border-top: 1px solid var(--sl-color-hairline);
|
||||||
|
}
|
||||||
|
.relplay-footer p {
|
||||||
|
margin: 0;
|
||||||
|
font-size: var(--sl-text-xs);
|
||||||
|
color: var(--sl-color-gray-3);
|
||||||
|
}
|
||||||
|
.relplay-footer a {
|
||||||
|
color: var(--sl-color-gray-2);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.relplay-footer a:hover {
|
||||||
|
color: var(--sl-color-text-accent);
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.relplay-footer .sep {
|
||||||
|
margin: 0 0.4rem;
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
---
|
||||||
|
/**
|
||||||
|
* Brand lockup — "RELational PLAYground" doing double duty:
|
||||||
|
*
|
||||||
|
* RELational ┐
|
||||||
|
* DataBase Management Sys │ PLAYground (PLAYground large, spanning both rows)
|
||||||
|
*
|
||||||
|
* Two hidden readings, both drawn out in teal:
|
||||||
|
* • the domain brand → REL + PLAY = "relplay"
|
||||||
|
* • the acronym → R(elational) D(ataBase) M(anagement) S(ystem) = RDBMS,
|
||||||
|
* so a learner who doesn't know what RDBMS stands for sees it spelled out.
|
||||||
|
*
|
||||||
|
* Decorative; the product name stays "RDBMS Playground". The DOM order reads
|
||||||
|
* naturally to screen readers: "RELational DataBase Management System PLAYground".
|
||||||
|
*/
|
||||||
|
---
|
||||||
|
|
||||||
|
<p class="relplay-lockup">
|
||||||
|
<span class="rl">
|
||||||
|
<span class="rl-left">
|
||||||
|
<span class="rl-rel"><span class="t">REL</span><span class="m">ational</span></span>
|
||||||
|
<span class="rl-dbms"
|
||||||
|
><span class="t">D</span>ata<span class="t">B</span>ase <span class="t">M</span
|
||||||
|
>anagement <span class="t">S</span>ystem</span
|
||||||
|
>
|
||||||
|
</span>
|
||||||
|
<span class="rl-play"><span class="t">PLAY</span><span class="m">ground</span></span>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.relplay-lockup {
|
||||||
|
text-align: center;
|
||||||
|
margin: 0.5rem 0 2.25rem;
|
||||||
|
}
|
||||||
|
/* The whole lockup scales from ONE master font-size: every child size and
|
||||||
|
margin below is in `em`, so the composition is rigid and just zooms as a
|
||||||
|
unit (like an image) — it can't break differently across viewports. The
|
||||||
|
master clamp keeps it ~2rem on desktop (REL 2rem / PLAY 4rem) and shrinks
|
||||||
|
it enough to fit small phones without overflow. */
|
||||||
|
.rl {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.4em;
|
||||||
|
font-family:
|
||||||
|
ui-monospace, 'Cascadia Code', 'JetBrains Mono', 'Source Code Pro', Menlo,
|
||||||
|
Consolas, monospace;
|
||||||
|
letter-spacing: -0.02em;
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: left;
|
||||||
|
font-size: clamp(1rem, 0.5rem + 2.6vw, 2rem);
|
||||||
|
}
|
||||||
|
.rl-left {
|
||||||
|
display: inline-flex;
|
||||||
|
flex-direction: column;
|
||||||
|
line-height: 1.05;
|
||||||
|
}
|
||||||
|
.rl-rel {
|
||||||
|
font-size: 1em; /* = master → 2rem on desktop */
|
||||||
|
}
|
||||||
|
.rl-dbms {
|
||||||
|
margin-top: 0.3em;
|
||||||
|
font-size: 0.4em; /* = 0.8rem on desktop */
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.rl-play {
|
||||||
|
font-size: 2em; /* = 4rem on desktop */
|
||||||
|
line-height: 0.95;
|
||||||
|
margin-top: 0.05em; /* ≈ your 0.2rem nudge: it sat a touch high */
|
||||||
|
}
|
||||||
|
.t {
|
||||||
|
color: var(--sl-color-text-accent);
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
.m {
|
||||||
|
color: var(--sl-color-gray-3);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -15,6 +15,9 @@ hero:
|
|||||||
|
|
||||||
import { Card, CardGrid, LinkCard } from '@astrojs/starlight/components';
|
import { Card, CardGrid, LinkCard } from '@astrojs/starlight/components';
|
||||||
import Demo from '../../components/Demo.astro';
|
import Demo from '../../components/Demo.astro';
|
||||||
|
import Wordmark from '../../components/Wordmark.astro';
|
||||||
|
|
||||||
|
<Wordmark />
|
||||||
|
|
||||||
RDBMS Playground is a cross-platform terminal app that gives you a safe
|
RDBMS Playground is a cross-platform terminal app that gives you a safe
|
||||||
sandbox for exploring relational database concepts: tables, columns,
|
sandbox for exploring relational database concepts: tables, columns,
|
||||||
|
|||||||
@@ -3,6 +3,37 @@
|
|||||||
@import 'tailwindcss/theme.css' layer(theme);
|
@import 'tailwindcss/theme.css' layer(theme);
|
||||||
@import 'tailwindcss/utilities.css' layer(utilities);
|
@import 'tailwindcss/utilities.css' layer(utilities);
|
||||||
|
|
||||||
|
/* ── Brand accent ────────────────────────────────────────────────────────
|
||||||
|
Anchor the site accent to the product's in-TUI "identifier" teal, so the
|
||||||
|
docs and the app read as one product rather than a generic docs theme.
|
||||||
|
Starlight derives link / active-nav / focus colours from these three
|
||||||
|
accent shades: `-low` = subtle background, base = mid, `-high` = strong /
|
||||||
|
high-contrast (link text). Dark theme is `:root`; light overrides under
|
||||||
|
`[data-theme='light']`. These are unlayered, so they win over Starlight's
|
||||||
|
layered defaults. Tweakable — eyeball on the dev server. */
|
||||||
|
:root {
|
||||||
|
--sl-color-accent-low: #0e343b;
|
||||||
|
--sl-color-accent: #2f8f9e;
|
||||||
|
--sl-color-accent-high: #7ed6e3;
|
||||||
|
}
|
||||||
|
:root[data-theme='light'] {
|
||||||
|
--sl-color-accent-low: #cfe9ec;
|
||||||
|
--sl-color-accent: #0f6b76;
|
||||||
|
--sl-color-accent-high: #063b42;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Landing hero spacing. On wide viewports Starlight pads the splash hero with
|
||||||
|
up to 10rem block padding (Hero.astro, @media min-width:50rem), which leaves
|
||||||
|
an outsized gap between the hero actions and the wordmark that follows it.
|
||||||
|
Trim just the bottom so the wordmark sits closer; the top padding (hero
|
||||||
|
breathing room below the header) is untouched. Only the landing uses the
|
||||||
|
splash template, so this is scoped in practice. */
|
||||||
|
@media (min-width: 50rem) {
|
||||||
|
.hero {
|
||||||
|
padding-block-end: 2.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Command prompt for simple-mode (`rdbms`) code blocks: a decorative "> "
|
/* Command prompt for simple-mode (`rdbms`) code blocks: a decorative "> "
|
||||||
before each command line so consecutive commands read as distinct entered
|
before each command line so consecutive commands read as distinct entered
|
||||||
lines (advanced-mode `sql` blocks are left unprefixed). It is CSS ::before
|
lines (advanced-mode `sql` blocks are left unprefixed). It is CSS ::before
|
||||||
|
|||||||
Reference in New Issue
Block a user