@volter/world-console 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,113 @@
1
+ /* The console's design system (punchlist 3.1–3.2) — the comparable is a plain modern developer
2
+ console: a ground, cards with one hairline, one action colour, danger only for danger, the brand's
3
+ type, monospace for addresses. Every colour and face is a role of the Volter brand (company
4
+ decision 0018): the shell links the brand's tokens (`base/brand/tokens.css`, fetched at build) before
5
+ this sheet, and the names below are this sheet's aliases for those roles; the pre-commit hook
6
+ refuses a literal colour here. The roles carry both themes (light-dark()); `color-scheme` picks one.
7
+ The portal's pages link this sheet; the site reads the same roles (apps/www/src/site.css). */
8
+ :root {
9
+ color-scheme: light dark;
10
+ --ground: var(--volter-surface-page); --surface: var(--volter-surface-raised); --surface-2: var(--volter-surface-subtle);
11
+ --line: var(--volter-border-default); --line-strong: var(--volter-border-strong);
12
+ --ink: var(--volter-text-primary); --muted: var(--volter-text-muted); --faint: var(--volter-text-faint);
13
+ --accent: var(--volter-action-default); --accent-ink: var(--volter-text-on-strong); --accent-soft: var(--volter-action-soft);
14
+ --danger: var(--volter-status-danger-base); --danger-text: var(--volter-status-danger-text); --danger-soft: var(--volter-status-danger-soft);
15
+ --warn: var(--volter-status-attention-text); --warn-soft: var(--volter-status-attention-soft); --ok: var(--volter-status-healthy-text);
16
+ --mono: var(--volter-font-data);
17
+ --sans: var(--volter-font-ui);
18
+ --radius: 8px; --shadow: var(--volter-shadow-resting);
19
+ }
20
+ :root[data-theme="light"] { color-scheme: light; }
21
+ :root[data-theme="dark"] { color-scheme: dark; }
22
+
23
+ * { box-sizing: border-box; }
24
+ html { background: var(--ground); }
25
+ body { margin: 0; font: 14px/1.5 var(--sans); color: var(--ink); background: var(--ground); -webkit-font-smoothing: antialiased; }
26
+ main { max-width: 1120px; margin: 0 auto; padding: 20px 24px 72px; }
27
+ /* a link is the action colour, which is the text colour in the brand: its underline, in the strong
28
+ rule, is what tells it from text (the brand's own pages mark links the same way) */
29
+ a { color: var(--accent); text-decoration: underline; text-decoration-color: var(--line-strong); text-underline-offset: 3px; }
30
+ a:hover { text-decoration-color: currentColor; }
31
+ header a { text-decoration: none; }
32
+ header a:hover { text-decoration: underline; }
33
+ code { font: 12.5px/1.5 var(--mono); background: var(--surface-2); border: 1px solid var(--line); padding: 1px 6px; border-radius: 5px; color: var(--ink); }
34
+ pre { margin: 0; font: 12px/1.45 var(--mono); white-space: pre-wrap; max-width: 640px; background: var(--surface-2); border: 1px solid var(--line); border-radius: var(--radius); padding: 10px 12px; }
35
+ h1, h2, h3, h4, h5 { margin: 0; font-weight: 600; letter-spacing: -0.005em; text-wrap: balance; }
36
+ h1 { font-size: 17px; }
37
+ h2 { font-size: 18px; margin: 28px 0 10px; }
38
+ h3 { font-size: 15px; margin: 22px 0 8px; }
39
+ h4 { font-size: 13px; margin: 18px 0 6px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.06em; font-weight: 600; }
40
+ h5 { font-size: 13px; margin: 10px 0 4px; color: var(--danger-text); }
41
+ p { margin: 6px 0; }
42
+ ul, ol { margin: 6px 0; padding-left: 20px; }
43
+ li { margin: 3px 0; }
44
+
45
+ /* the top bar */
46
+ header { display: flex; align-items: center; gap: 18px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); padding: 10px 16px; margin-bottom: 22px; }
47
+ header h1 a { color: var(--ink); }
48
+ header nav a { color: var(--muted); }
49
+ header .mode { margin-left: auto; color: var(--muted); font-size: 12.5px; }
50
+ header > a { color: var(--muted); font-size: 13px; }
51
+ header button { padding: 5px 12px; }
52
+
53
+ /* cards: every section that holds a thing */
54
+ section, .billing, .members, .onboarding, .org-settings { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); padding: 16px 18px; margin: 14px 0; }
55
+ section > h2:first-child, section > h3:first-child { margin-top: 0; }
56
+ .billing, .members { margin: 10px 0 0; padding: 14px 16px; background: var(--surface-2); }
57
+ .billing p:first-child { margin-top: 0; }
58
+ .usage { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 6px 16px; padding: 0; list-style: none; margin: 8px 0; }
59
+ .usage li { margin: 0; color: var(--muted); }
60
+ .plan-preview { margin: 10px 0; padding: 10px 12px; border: 1px dashed var(--line-strong); border-radius: var(--radius); }
61
+ .plan-preview p { margin: 0 0 4px; }
62
+ .onboarding { border-color: var(--accent); background: var(--accent-soft); }
63
+ .onboarding ol { margin: 8px 0 12px; }
64
+ .onboarding li[role="checkbox"] { list-style: none; margin-left: -20px; }
65
+ .onboarding li[aria-checked="true"] { color: var(--muted); }
66
+ details.org-settings { padding: 10px 16px; }
67
+ details.org-settings summary { cursor: pointer; color: var(--muted); font-weight: 600; }
68
+ details.org-settings[open] summary { margin-bottom: 8px; }
69
+ .danger { margin-top: 14px; padding: 12px 14px; border: 1px solid color-mix(in srgb, var(--danger) 45%, var(--line)); background: var(--danger-soft); border-radius: var(--radius); }
70
+ .danger button { border-color: var(--danger); color: var(--danger-text); }
71
+ .danger button:hover:not(:disabled) { background: var(--danger); color: var(--volter-text-on-strong); }
72
+ .admin { margin-top: 24px; padding-top: 12px; border-top: 1px dashed var(--line); }
73
+
74
+ /* tables */
75
+ table { border-collapse: collapse; width: 100%; margin: 6px 0 4px; font-variant-numeric: tabular-nums; }
76
+ th, td { text-align: left; vertical-align: top; padding: 9px 10px; border-bottom: 1px solid var(--line); }
77
+ th { color: var(--muted); font-weight: 600; font-size: 12px; text-transform: uppercase; letter-spacing: 0.05em; }
78
+ tr:last-child td { border-bottom: 0; }
79
+ td code { font-size: 12px; }
80
+
81
+ /* usage by day (layer 6): a bar per day of the period */
82
+ .bars { list-style: none; padding: 0; margin: 6px 0; display: grid; gap: 4px; max-width: 520px; }
83
+ .bars li { display: grid; grid-template-columns: 44px 1fr auto; align-items: center; gap: 8px; font-size: 12.5px; }
84
+ .bars .bar { display: block; height: 10px; background: var(--volter-data-base); border-radius: 3px; opacity: 0.8; }
85
+
86
+ /* controls */
87
+ button { font: inherit; font-size: 13px; padding: 6px 12px; border: 1px solid var(--line-strong); border-radius: 6px; background: var(--surface); color: var(--ink); cursor: pointer; }
88
+ button:hover:not(:disabled) { border-color: var(--accent); color: var(--accent); }
89
+ button:disabled { opacity: 0.45; cursor: default; }
90
+ button[type="submit"] { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); }
91
+ button[type="submit"]:hover:not(:disabled) { color: var(--accent-ink); filter: brightness(1.06); }
92
+ button[role="tab"] { border-color: transparent; background: transparent; color: var(--muted); }
93
+ button[role="tab"][aria-selected="true"] { border-color: var(--line-strong); background: var(--surface); color: var(--ink); }
94
+ button:focus-visible, input:focus-visible, select:focus-visible, a:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
95
+ form { display: grid; gap: 10px; max-width: 560px; margin-top: 8px; }
96
+ form button[type="submit"] { justify-self: start; }
97
+ label { display: grid; gap: 4px; color: var(--muted); font-size: 12.5px; }
98
+ label:has(input[type="checkbox"]) { display: flex; align-items: center; gap: 8px; color: var(--ink); font-size: 13px; }
99
+ input, select { font: inherit; font-size: 14px; padding: 7px 10px; border: 1px solid var(--line-strong); border-radius: 6px; background: var(--surface); color: var(--ink); }
100
+ input::placeholder { color: var(--faint); }
101
+ select { padding-right: 28px; }
102
+ [role="alert"] { color: var(--danger-text); background: var(--danger-soft); border: 1px solid color-mix(in srgb, var(--danger) 35%, var(--line)); border-radius: 6px; padding: 8px 10px; }
103
+ [role="status"] { color: var(--muted); }
104
+ .mode { color: var(--muted); font-size: 12.5px; }
105
+
106
+ /* the portal's own pages share this sheet */
107
+ body.portal { display: grid; place-items: center; min-height: 100vh; padding: 24px; }
108
+ body.portal .card { background: var(--surface); border: 1px solid var(--line); border-radius: 12px; box-shadow: var(--shadow); padding: 28px 30px; width: min(440px, 100%); text-align: center; }
109
+ body.portal .card h1 { font-size: 22px; margin-bottom: 4px; }
110
+ body.portal .card p { color: var(--muted); margin: 0 0 18px; }
111
+ body.account main { max-width: 900px; }
112
+ body.account #profile { margin-top: 12px; }
113
+ @media (max-width: 720px) { main { padding: 14px 14px 60px; } header { flex-wrap: wrap; } header .mode { margin-left: 0; } }