rastrillo / fiesta Public

Clone
git clone https://amadan.net/rastrillo/fiesta

Plain git — no account needed to clone.

Download

Download this file

1/* site.css: the landing page's own styles. Fiesta is loaded by its
2 public URL and left as it is; what the page needs beyond it lives
3 here. Every class is site- prefixed and every colour is a Fiesta
4 token, so the page follows whichever theme and scheme the reader
5 chose. */
6
7/* The skip link: off screen until it has focus. */
8.site-skip { position: absolute; inset-inline-start: 0; top: 0; z-index: 10; padding: 0.5rem 0.75rem; background: var(--rst-surface); color: var(--rst-text); transform: translateY(-200%); }
9.site-skip:focus { transform: none; }
10
11/* The top bar. */
12.site-top { display: flex; align-items: center; flex-wrap: wrap; gap: 12px 22px; padding: 14px 28px; border-bottom: 1px solid var(--rst-line); font-size: 0.9rem; }
13.site-brand { font-size: 1.05rem; letter-spacing: -0.01em; margin-inline-end: auto; }
14.site-nav { display: flex; align-items: center; flex-wrap: wrap; gap: 12px 22px; }
15.site-nav > a:not([rst-btn]) { color: var(--rst-text-muted); text-decoration: none; }
16.site-nav > a:not([rst-btn]):hover { color: var(--rst-text); }
17
18/* The bunting: a still SVG for no JS and reduced motion; bunting.js
19 hangs the same pennants on a canvas over it and hides the SVG. The
20 row is clipped sideways, since the pennants run past the edges of a
21 narrow page, and open below, where they hang over the headline. */
22.site-bunting { position: relative; height: 84px; pointer-events: none; overflow-x: clip; }
23.site-flags { display: block; width: 100%; height: 66px; overflow: visible; }
24.site-bunting canvas { position: absolute; left: 0; top: 0; width: 100%; height: 112px; }
25.site-bunting-live .site-flags { visibility: hidden; }
26.site-span { fill: none; stroke: var(--rst-text-faint); stroke-width: 1.3; }
27.site-tie { fill: none; stroke: var(--rst-text-faint); stroke-width: 1; }
28
29/* The hero: headline, lede, the install line and the two buttons. */
30.site-hero { text-align: center; padding: 34px 28px 0; }
31/* Japanese has no spaces, so a heading would otherwise break anywhere,
32 mid-word; auto-phrase breaks between phrases where the browser can
33 (Chromium), and the rest fall back to the usual breaks. */
34:lang(ja) :is(h1, h2, h3) { word-break: auto-phrase; }
35.site-hero h1 { font-size: 2.6rem; line-height: 1.08; letter-spacing: -0.025em; margin: 0 0 14px; }
36.site-lede { font-size: 1.15rem; color: var(--rst-text-muted); margin: 0 auto 22px; max-width: 64ch; text-wrap: pretty; }
37.site-install { padding: 6px 0 0; }
38.site-inote { margin: 0 auto 10px; font-size: 0.95rem; font-weight: 400; color: var(--rst-text-muted); }
39/* Fiesta's snippet hugs its line from the inline start; the hero is
40 centred, so the box is too. */
41#install [rst-snippet] { margin-inline: auto; }
42.site-live { margin: 0; font-size: 0.85rem; color: var(--rst-text-muted); }
43.site-cta { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 16px; justify-content: center; }
44
45/* The stage the sample sits on, with the theme bar over its end corner. */
46.site-stage { padding: 28px 60px 36px; margin-top: 26px; background: linear-gradient(var(--rst-bg), var(--rst-surface-2)); }
47.site-themebar { display: flex; justify-content: flex-end; align-items: center; flex-wrap: wrap; gap: 14px; margin: 0 0 10px; font-size: 0.85rem; }
48.site-themebar[hidden] { display: none; }
49.site-themebar [rst-seg-tabs] { margin: 0; }
50.site-themelabel { color: var(--rst-text-muted); }
51/* The moon stands in for the scheme menu's name on a phone only. */
52@media (min-width: 561px) {
53 .site-scheme-icon { display: none; }
54}
55
56/* The sample: a small app window built only from Fiesta attributes. */
57.site-window { background: var(--rst-surface); border: 1px solid var(--rst-line); border-radius: 10px; box-shadow: var(--rst-shadow-pop); overflow: hidden; text-align: start; }
58.site-bar { display: flex; gap: 6px; padding: 10px 12px; border-bottom: 1px solid var(--rst-line); }
59.site-bar i { width: 10px; height: 10px; border-radius: 50%; background: var(--rst-line-strong); opacity: 0.5; }
60/* The sample keeps the minimum height it had before it used rst-side,
61 so its shortest pane still fills a window the size of an app's. */
62.site-window [rst-side] { min-block-size: 300px; }
63/* One column that never grows past the pane: an implicit auto column
64 would widen to the course tabs' max-content (328px in Spanish, 338
65 in Arabic), and Fiesta's seg-tabs wrap only against a width that
66 holds them. */
67.site-pane { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; align-content: start; }
68.site-pane[hidden] { display: none; }
69/* With no script every pane shows, one under the next, and a rule
70 divides them. A hidden pane is still a sibling, so the divider names
71 shown panes on both sides: written as .site-pane + .site-pane it
72 drew a gap and a rule above every pane but the first when site.js
73 showed it alone. */
74.site-pane:not([hidden]) ~ .site-pane:not([hidden]) { margin-top: 24px; padding-top: 20px; border-top: 1px solid var(--rst-line); }
75.site-pane h2 { margin: 0; font-size: 1.05rem; }
76.site-pane h3 { margin: 0 0 4px; font-size: 0.95rem; }
77.site-pane p { margin: 0; font-size: 0.85rem; color: var(--rst-text-muted); }
78.site-pane [rst-row] { font-size: 0.85rem; }
79.site-pane [rst-row-sub] { display: block; font-size: 0.78rem; color: var(--rst-text-muted); font-weight: 400; }
80.site-pane [rst-seg-tabs] { margin: 0; }
81.site-pane [rst-switch] { font-size: 0.85rem; }
82.site-course[hidden] { display: none; }
83.site-search { display: grid; gap: 8px; }
84.site-acts { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; }
85.site-dur, .site-price { color: var(--rst-text-muted); font-size: 0.8rem; font-variant-numeric: tabular-nums; }
86.site-pane [rst-form] { display: grid; gap: 10px; max-width: 420px; }
87.site-pane [rst-form-foot] { margin: 4px 0 0; }
88.site-pane [rst-card] { padding: 12px 16px; }
89
90/* The six reasons. */
91.site-why { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; padding: 28px; border-top: 1px solid var(--rst-line); }
92.site-why [rst-card] { padding: 16px; }
93.site-why h2 { margin: 8px 0 4px; font-size: 0.95rem; }
94.site-why p { margin: 0; font-size: 0.87rem; color: var(--rst-text-muted); }
95.site-why svg { width: 22px; height: 22px; stroke: var(--rst-accent); }
96
97/* The footer. */
98.site-foot { border-top: 1px solid var(--rst-line); background: var(--rst-surface-2); padding: 28px 28px 36px; font-size: 0.87rem; }
99.site-facts { display: flex; flex-wrap: wrap; gap: 6px 24px; margin: 0 0 24px; color: var(--rst-text-muted); }
100.site-facts div { display: flex; gap: 6px; }
101.site-facts dt { font-weight: 600; color: var(--rst-text); }
102.site-facts dd { margin: 0; }
103.site-foot-cols { display: grid; grid-template-columns: 1.4fr repeat(4, 1fr); gap: 24px; }
104.site-foot-brand b { font-size: 1.05rem; display: block; margin-bottom: 4px; }
105.site-foot-brand p { margin: 0; color: var(--rst-text-muted); max-width: 30ch; }
106.site-foot h2 { font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--rst-text-muted); margin: 0 0 8px; }
107.site-foot ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
108.site-foot a { color: var(--rst-text-muted); text-decoration: none; }
109.site-foot a:hover { color: var(--rst-text); text-decoration: underline; }
110
111/* Narrower screens: the reasons stack, the footer's columns pair up. */
112@media (max-width: 760px) {
113 .site-stage { padding: 20px 12px 28px; }
114 .site-why { grid-template-columns: 1fr; }
115 .site-foot { padding: 24px 14px 32px; }
116 .site-foot-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }
117 .site-foot-brand { grid-column: 1 / -1; }
118}
119
120/* On a phone the window runs edge to edge, so its padding is the only
121 margin: the stage drops its inline padding, and the window its side
122 borders and corners. */
123@media (max-width: 560px) {
124 /* The headline's longest word has to fit a 320px phone in every
125 language: Russian's Отпразднуйте is 329px at 2.6rem, so the size
126 follows the viewport down to 1.9rem (240px at 320). */
127 .site-hero h1 { font-size: clamp(1.9rem, 9.5vw, 2.6rem); }
128 .site-stage { padding-inline: 0; }
129 /* The theme bar stays one row, as the Row Rule asks: on a phone the
130 label, three buttons and a worded menu need about 475px in Portuguese.
131 So the label and the menu's name are hidden from sight but stay
132 their group's and their summary's names, the moon shows instead of
133 the name, and the gaps close up. */
134 .site-themebar { padding-inline: 14px; gap: 8px; }
135 .site-themebar [rst-seg-tabs] > button { padding-inline: 10px; }
136 .site-themelabel, .site-scheme-name { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
137 .site-window { border-inline: 0; border-radius: 0; }
138}
139