@hyvnt/hyvui 0.3.0 → 0.4.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.
- package/README.md +37 -7
- package/dist/components/ambient/ArcaneVein.svelte +151 -0
- package/dist/components/ambient/ArcaneVein.svelte.d.ts +31 -0
- package/dist/components/ambient/BrassFiligree.svelte +109 -0
- package/dist/components/ambient/BrassFiligree.svelte.d.ts +20 -0
- package/dist/components/ambient/CornerBrackets.svelte +8 -0
- package/dist/components/ambient/CornerBrackets.svelte.d.ts +8 -0
- package/dist/components/ambient/CrystalShard.svelte +151 -0
- package/dist/components/ambient/CrystalShard.svelte.d.ts +19 -0
- package/dist/components/ambient/DataStream.svelte +7 -1
- package/dist/components/ambient/DataStream.svelte.d.ts +6 -0
- package/dist/components/ambient/EnergyArc.svelte +189 -0
- package/dist/components/ambient/EnergyArc.svelte.d.ts +32 -0
- package/dist/components/ambient/GlyphMark.svelte +6 -0
- package/dist/components/ambient/GlyphMark.svelte.d.ts +6 -0
- package/dist/components/ambient/GridOverlay.svelte +8 -0
- package/dist/components/ambient/GridOverlay.svelte.d.ts +8 -0
- package/dist/components/ambient/HexGrid.svelte +119 -0
- package/dist/components/ambient/HexGrid.svelte.d.ts +21 -0
- package/dist/components/ambient/ParallaxLayer.svelte +9 -1
- package/dist/components/ambient/ParallaxLayer.svelte.d.ts +7 -0
- package/dist/components/ambient/ScanBand.svelte +8 -0
- package/dist/components/ambient/ScanBand.svelte.d.ts +8 -0
- package/dist/components/ambient/ShimmerCloud.svelte +180 -0
- package/dist/components/ambient/ShimmerCloud.svelte.d.ts +21 -0
- package/dist/components/ambient/SignalRing.svelte +7 -1
- package/dist/components/ambient/SignalRing.svelte.d.ts +6 -0
- package/dist/components/ambient/ThreadLine.svelte +7 -0
- package/dist/components/ambient/ThreadLine.svelte.d.ts +7 -0
- package/dist/components/ambient/Vignette.svelte +6 -0
- package/dist/components/ambient/Vignette.svelte.d.ts +6 -0
- package/dist/components/depth/DepthLayer.svelte +8 -0
- package/dist/components/depth/DepthLayer.svelte.d.ts +8 -0
- package/dist/components/depth/DepthStage.svelte +8 -4
- package/dist/components/depth/DepthStage.svelte.d.ts +8 -0
- package/dist/components/depth/FloatCard.svelte +17 -1
- package/dist/components/depth/FloatCard.svelte.d.ts +8 -0
- package/dist/components/depth/HorizonGrid.svelte +25 -0
- package/dist/components/depth/HorizonGrid.svelte.d.ts +9 -0
- package/dist/components/depth/Plinth.svelte +10 -0
- package/dist/components/depth/Plinth.svelte.d.ts +10 -0
- package/dist/components/display/Avatar.svelte +5 -0
- package/dist/components/display/Avatar.svelte.d.ts +5 -0
- package/dist/components/display/Badge.svelte +16 -0
- package/dist/components/display/Badge.svelte.d.ts +6 -0
- package/dist/components/display/Blockquote.svelte +4 -0
- package/dist/components/display/Blockquote.svelte.d.ts +4 -0
- package/dist/components/display/CodeBlock.svelte +5 -0
- package/dist/components/display/CodeBlock.svelte.d.ts +5 -0
- package/dist/components/display/MetricCard.svelte +23 -0
- package/dist/components/display/MetricCard.svelte.d.ts +6 -0
- package/dist/components/display/Table.svelte +7 -0
- package/dist/components/display/Table.svelte.d.ts +7 -0
- package/dist/components/feedback/Alert.svelte +24 -0
- package/dist/components/feedback/Alert.svelte.d.ts +6 -0
- package/dist/components/feedback/EmptyState.svelte +7 -0
- package/dist/components/feedback/EmptyState.svelte.d.ts +7 -0
- package/dist/components/feedback/ErrorState.svelte +5 -0
- package/dist/components/feedback/ErrorState.svelte.d.ts +5 -0
- package/dist/components/feedback/Skeleton.svelte +6 -0
- package/dist/components/feedback/Skeleton.svelte.d.ts +6 -0
- package/dist/components/feedback/StatusDot.svelte +36 -1
- package/dist/components/feedback/StatusDot.svelte.d.ts +6 -0
- package/dist/components/feedback/StatusLine.svelte +8 -2
- package/dist/components/feedback/StatusLine.svelte.d.ts +6 -0
- package/dist/components/feedback/Toast.svelte +16 -2
- package/dist/components/feedback/Toast.svelte.d.ts +10 -0
- package/dist/components/inputs/Button.svelte +74 -4
- package/dist/components/inputs/Button.svelte.d.ts +8 -0
- package/dist/components/inputs/Checkbox.svelte +5 -0
- package/dist/components/inputs/Checkbox.svelte.d.ts +5 -0
- package/dist/components/inputs/FileUpload.svelte +5 -0
- package/dist/components/inputs/FileUpload.svelte.d.ts +5 -0
- package/dist/components/inputs/Input.svelte +10 -2
- package/dist/components/inputs/Input.svelte.d.ts +7 -0
- package/dist/components/inputs/Select.svelte +8 -0
- package/dist/components/inputs/Select.svelte.d.ts +8 -0
- package/dist/components/inputs/Textarea.svelte +9 -2
- package/dist/components/inputs/Textarea.svelte.d.ts +6 -0
- package/dist/components/inputs/Toggle.svelte +6 -1
- package/dist/components/inputs/Toggle.svelte.d.ts +5 -0
- package/dist/components/layout/Card.svelte +11 -0
- package/dist/components/layout/Card.svelte.d.ts +11 -0
- package/dist/components/layout/Drawer.svelte +7 -0
- package/dist/components/layout/Drawer.svelte.d.ts +6 -0
- package/dist/components/layout/Grid.svelte +10 -0
- package/dist/components/layout/Grid.svelte.d.ts +10 -0
- package/dist/components/layout/Modal.svelte +15 -0
- package/dist/components/layout/Modal.svelte.d.ts +10 -0
- package/dist/components/layout/Panel.svelte +9 -0
- package/dist/components/layout/Panel.svelte.d.ts +9 -0
- package/dist/components/layout/Popover.svelte +10 -0
- package/dist/components/layout/Popover.svelte.d.ts +9 -0
- package/dist/components/layout/Stack.svelte +12 -0
- package/dist/components/layout/Stack.svelte.d.ts +12 -0
- package/dist/components/navigation/Breadcrumb.svelte +8 -0
- package/dist/components/navigation/Breadcrumb.svelte.d.ts +8 -0
- package/dist/components/navigation/DropdownMenu.svelte +12 -0
- package/dist/components/navigation/DropdownMenu.svelte.d.ts +12 -0
- package/dist/components/navigation/SidebarNav.svelte +10 -0
- package/dist/components/navigation/SidebarNav.svelte.d.ts +9 -0
- package/dist/components/navigation/Tabs.svelte +26 -1
- package/dist/components/navigation/Tabs.svelte.d.ts +8 -0
- package/dist/components/navigation/Topbar.svelte +9 -0
- package/dist/components/navigation/Topbar.svelte.d.ts +9 -0
- package/dist/components/patterns/ActionBar.svelte +11 -0
- package/dist/components/patterns/ActionBar.svelte.d.ts +10 -0
- package/dist/components/patterns/ChapterMark.svelte +152 -0
- package/dist/components/patterns/ChapterMark.svelte.d.ts +19 -0
- package/dist/components/patterns/ConfirmDialog.svelte +12 -0
- package/dist/components/patterns/ConfirmDialog.svelte.d.ts +12 -0
- package/dist/components/patterns/DepthPortal.svelte +123 -0
- package/dist/components/patterns/DepthPortal.svelte.d.ts +24 -0
- package/dist/components/patterns/Manifesto.svelte +171 -0
- package/dist/components/patterns/Manifesto.svelte.d.ts +25 -0
- package/dist/components/patterns/PageHeader.svelte +8 -0
- package/dist/components/patterns/PageHeader.svelte.d.ts +8 -0
- package/dist/components/patterns/PullQuote.svelte +145 -0
- package/dist/components/patterns/PullQuote.svelte.d.ts +23 -0
- package/dist/components/patterns/RegisterSwitcher.svelte +132 -0
- package/dist/components/patterns/RegisterSwitcher.svelte.d.ts +21 -0
- package/dist/components/patterns/SearchBar.svelte +5 -0
- package/dist/components/patterns/SearchBar.svelte.d.ts +5 -0
- package/dist/components/patterns/ShowcaseFrame.svelte +117 -0
- package/dist/components/patterns/ShowcaseFrame.svelte.d.ts +28 -0
- package/dist/components/patterns/TerminalBoot.svelte +15 -1
- package/dist/components/patterns/TerminalBoot.svelte.d.ts +12 -0
- package/dist/components/primitives/Divider.svelte +30 -0
- package/dist/components/primitives/Divider.svelte.d.ts +5 -0
- package/dist/components/primitives/Icon.svelte +9 -0
- package/dist/components/primitives/Icon.svelte.d.ts +9 -0
- package/dist/components/primitives/Label.svelte +6 -0
- package/dist/components/primitives/Label.svelte.d.ts +6 -0
- package/dist/components/primitives/Surface.svelte +67 -2
- package/dist/components/primitives/Surface.svelte.d.ts +7 -0
- package/dist/components/primitives/Text.svelte +32 -0
- package/dist/components/primitives/Text.svelte.d.ts +7 -0
- package/dist/components/scenes/ArchiveScene.svelte +10 -0
- package/dist/components/scenes/ArchiveScene.svelte.d.ts +10 -0
- package/dist/components/scenes/DepthScene.svelte +128 -0
- package/dist/components/scenes/DepthScene.svelte.d.ts +36 -0
- package/dist/components/scenes/LogScene.svelte +14 -0
- package/dist/components/scenes/LogScene.svelte.d.ts +14 -0
- package/dist/components/scenes/NarrativeScene.svelte +9 -0
- package/dist/components/scenes/NarrativeScene.svelte.d.ts +9 -0
- package/dist/components/scenes/ReadoutScene.svelte +11 -0
- package/dist/components/scenes/ReadoutScene.svelte.d.ts +11 -0
- package/dist/components/scenes/StageScene.svelte +14 -0
- package/dist/components/scenes/StageScene.svelte.d.ts +14 -0
- package/dist/components/system/AppShell.svelte +62 -0
- package/dist/components/system/AppShell.svelte.d.ts +32 -0
- package/dist/examples/ArcaneShard.svelte +364 -0
- package/dist/examples/ArcaneShard.svelte.d.ts +3 -0
- package/dist/examples/HextechForge.svelte +324 -0
- package/dist/examples/HextechForge.svelte.d.ts +3 -0
- package/dist/index.d.ts +15 -1
- package/dist/index.js +16 -1
- package/dist/styles.css +2 -0
- package/dist/system/actions/echo.js +13 -4
- package/dist/system/actions/resolve.js +20 -6
- package/dist/system/actions/reveal.js +1 -1
- package/dist/system/actions/surface.js +1 -3
- package/dist/system/register.d.ts +1 -1
- package/dist/system/register.js +5 -1
- package/dist/tokens/arcane.css +96 -0
- package/dist/tokens/hextech.css +96 -0
- package/dist/tokens/tokens.css +6 -4
- package/dist/tokens/tokens.d.ts +41 -0
- package/dist/tokens/tokens.js +41 -0
- package/package.json +6 -2
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
EXAMPLE: Hextech Forge
|
|
3
|
+
REGISTER: hextech
|
|
4
|
+
CONCEPT: a piltover forge station monitoring console — brass instruments, crystal energy cells, hex-grid schematics
|
|
5
|
+
DEMONSTRATES: HexGrid, BrassFiligree, ArcaneVein, EnergyArc, CornerBrackets, MetricCard, Table, StatusDot, Tabs, Label, Text, applyRegister
|
|
6
|
+
INSPIRED BY: the first hour of a shift on a Piltover engineering floor
|
|
7
|
+
-->
|
|
8
|
+
<script lang="ts">
|
|
9
|
+
import {
|
|
10
|
+
Text,
|
|
11
|
+
Label,
|
|
12
|
+
Badge,
|
|
13
|
+
Divider,
|
|
14
|
+
Stack,
|
|
15
|
+
Grid,
|
|
16
|
+
Card,
|
|
17
|
+
Panel,
|
|
18
|
+
MetricCard,
|
|
19
|
+
Table,
|
|
20
|
+
StatusDot,
|
|
21
|
+
Tabs,
|
|
22
|
+
CornerBrackets,
|
|
23
|
+
HexGrid,
|
|
24
|
+
BrassFiligree,
|
|
25
|
+
ArcaneVein,
|
|
26
|
+
EnergyArc,
|
|
27
|
+
surface,
|
|
28
|
+
applyRegister
|
|
29
|
+
} from '../index.js';
|
|
30
|
+
import { onMount } from 'svelte';
|
|
31
|
+
|
|
32
|
+
const cells = [
|
|
33
|
+
{ id: 'CELL-A1', charge: '94.2%', temp: '312 K', status: 'ok' as const, output: '8.4 kW' },
|
|
34
|
+
{ id: 'CELL-A2', charge: '88.1%', temp: '318 K', status: 'ok' as const, output: '7.9 kW' },
|
|
35
|
+
{ id: 'CELL-B1', charge: '71.4%', temp: '334 K', status: 'warn' as const, output: '6.1 kW' },
|
|
36
|
+
{ id: 'CELL-B2', charge: '99.8%', temp: '308 K', status: 'ok' as const, output: '8.8 kW' },
|
|
37
|
+
{ id: 'CELL-C1', charge: '45.3%', temp: '347 K', status: 'warn' as const, output: '3.8 kW' },
|
|
38
|
+
{ id: 'CELL-C2', charge: '0.0%', temp: '— K', status: 'fail' as const, output: '0.0 kW' }
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const cellColumns = [
|
|
42
|
+
{ key: 'id', label: 'cell' },
|
|
43
|
+
{ key: 'charge', label: 'charge' },
|
|
44
|
+
{ key: 'temp', label: 'temp' },
|
|
45
|
+
{ key: 'output', label: 'output' },
|
|
46
|
+
{ key: 'status', label: 'status' }
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
const tabs = ['overview', 'schematics', 'maintenance'];
|
|
50
|
+
let activeTab = $state('overview');
|
|
51
|
+
|
|
52
|
+
onMount(() => {
|
|
53
|
+
applyRegister('hextech');
|
|
54
|
+
return () => applyRegister('field-notebook');
|
|
55
|
+
});
|
|
56
|
+
</script>
|
|
57
|
+
|
|
58
|
+
<svelte:head>
|
|
59
|
+
<title>hextech forge // hyvui</title>
|
|
60
|
+
</svelte:head>
|
|
61
|
+
|
|
62
|
+
<div class="forge-wrap">
|
|
63
|
+
<div class="forge-hexgrid-host" aria-hidden="true">
|
|
64
|
+
<HexGrid animated />
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<div class="forge-shell">
|
|
68
|
+
<!-- Top bar -->
|
|
69
|
+
<header class="forge-header" use:surface>
|
|
70
|
+
<BrassFiligree />
|
|
71
|
+
<div class="forge-header-inner">
|
|
72
|
+
<div class="forge-header-left">
|
|
73
|
+
<StatusDot status="ok" size={7} />
|
|
74
|
+
<Text expression="readout">FORGE STATION PILTOVER // SECTOR 4-DELTA</Text>
|
|
75
|
+
</div>
|
|
76
|
+
<div class="forge-header-right">
|
|
77
|
+
<Label color="muted">shift 2 / day cycle</Label>
|
|
78
|
+
<Label color="signal">ONLINE</Label>
|
|
79
|
+
<a href="/" class="forge-back">← library</a>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</header>
|
|
83
|
+
|
|
84
|
+
<!-- Metrics row -->
|
|
85
|
+
<div class="forge-metrics">
|
|
86
|
+
<MetricCard label="total output" value="35.0 kW" trend="up" trendValue="+4.2%" />
|
|
87
|
+
<MetricCard label="cells active" value="5 / 6" trend="neutral" trendValue="" />
|
|
88
|
+
<MetricCard label="avg temp" value="323 K" trend="up" trendValue="+2 K" />
|
|
89
|
+
<MetricCard label="uptime" value="99.3%" trend="up" trendValue="+0.1%" />
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<Divider />
|
|
93
|
+
|
|
94
|
+
<!-- Tab nav -->
|
|
95
|
+
<Tabs tabs={tabs.map((t) => ({ id: t, label: t }))} active={activeTab} onchange={(id) => (activeTab = id)} />
|
|
96
|
+
|
|
97
|
+
{#if activeTab === 'overview'}
|
|
98
|
+
<div class="forge-content" use:surface={{ delay: 0 }}>
|
|
99
|
+
<div class="forge-left">
|
|
100
|
+
<div class="forge-panel-head">
|
|
101
|
+
<Label color="accent">energy cell array</Label>
|
|
102
|
+
<StatusDot status="warn" size={6} />
|
|
103
|
+
</div>
|
|
104
|
+
<Table columns={cellColumns} rows={cells} />
|
|
105
|
+
</div>
|
|
106
|
+
|
|
107
|
+
<div class="forge-right">
|
|
108
|
+
<div class="forge-schematic" use:surface>
|
|
109
|
+
<CornerBrackets size={16} color="rgba(93, 217, 240, 0.3)" />
|
|
110
|
+
<div class="forge-schematic-inner">
|
|
111
|
+
<Label color="muted">power conduit / sector 4</Label>
|
|
112
|
+
<div class="forge-vein-wrap">
|
|
113
|
+
<ArcaneVein x1="10%" y1="20%" x2="90%" y2="20%" />
|
|
114
|
+
<ArcaneVein x1="10%" y1="50%" x2="90%" y2="50%" />
|
|
115
|
+
<ArcaneVein x1="10%" y1="80%" x2="90%" y2="80%" />
|
|
116
|
+
<EnergyArc x1="10%" y1="20%" x2="50%" y2="80%" />
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<Stack gap="var(--space-sm)">
|
|
122
|
+
<div class="forge-alert-row" use:surface={{ delay: 80 }}>
|
|
123
|
+
<StatusDot status="warn" size={6} />
|
|
124
|
+
<Label color="muted">CELL-B1 thermal variance above threshold</Label>
|
|
125
|
+
</div>
|
|
126
|
+
<div class="forge-alert-row" use:surface={{ delay: 140 }}>
|
|
127
|
+
<StatusDot status="fail" size={6} />
|
|
128
|
+
<Label color="muted">CELL-C2 offline — awaiting replacement crystal</Label>
|
|
129
|
+
</div>
|
|
130
|
+
</Stack>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
{:else if activeTab === 'schematics'}
|
|
134
|
+
<div class="forge-content forge-content--center" use:surface={{ delay: 0 }}>
|
|
135
|
+
<div class="forge-schematic forge-schematic--large" use:surface>
|
|
136
|
+
<CornerBrackets size={20} color="rgba(93, 217, 240, 0.3)" />
|
|
137
|
+
<div class="forge-schematic-inner">
|
|
138
|
+
<Label color="muted">full-sector conduit map // v2.4</Label>
|
|
139
|
+
<div class="forge-vein-large">
|
|
140
|
+
<ArcaneVein x1="5%" y1="15%" x2="95%" y2="15%" />
|
|
141
|
+
<ArcaneVein x1="5%" y1="40%" x2="95%" y2="40%" />
|
|
142
|
+
<ArcaneVein x1="5%" y1="65%" x2="95%" y2="65%" />
|
|
143
|
+
<ArcaneVein x1="5%" y1="88%" x2="95%" y2="88%" />
|
|
144
|
+
<EnergyArc x1="20%" y1="15%" x2="80%" y2="88%" />
|
|
145
|
+
<EnergyArc x1="50%" y1="15%" x2="20%" y2="65%" />
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
{:else}
|
|
151
|
+
<div class="forge-content" use:surface={{ delay: 0 }}>
|
|
152
|
+
<Stack gap="var(--space-md)">
|
|
153
|
+
<Text expression="readout">NEXT SCHEDULED MAINTENANCE // 2025.12.04 / 06:00</Text>
|
|
154
|
+
<div class="forge-checklist">
|
|
155
|
+
{#each ['inspect cell housings', 'calibrate output regulators', 'flush thermal vents', 'replace CELL-C2 crystal core', 'log to council registry'] as item}
|
|
156
|
+
<div class="forge-checklist-item">
|
|
157
|
+
<StatusDot status={item.includes('CELL-C2') ? 'pend' : 'ok'} size={6} />
|
|
158
|
+
<Label color="muted">{item}</Label>
|
|
159
|
+
</div>
|
|
160
|
+
{/each}
|
|
161
|
+
</div>
|
|
162
|
+
</Stack>
|
|
163
|
+
</div>
|
|
164
|
+
{/if}
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
<style>
|
|
169
|
+
.forge-wrap {
|
|
170
|
+
position: relative;
|
|
171
|
+
min-height: 100dvh;
|
|
172
|
+
background: var(--bg);
|
|
173
|
+
overflow: hidden;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.forge-hexgrid-host {
|
|
177
|
+
position: fixed;
|
|
178
|
+
inset: 0;
|
|
179
|
+
z-index: 0;
|
|
180
|
+
pointer-events: none;
|
|
181
|
+
opacity: 0.35;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.forge-shell {
|
|
185
|
+
position: relative;
|
|
186
|
+
z-index: 1;
|
|
187
|
+
max-width: 80rem;
|
|
188
|
+
margin: 0 auto;
|
|
189
|
+
padding: var(--space-xl) var(--space-lg);
|
|
190
|
+
display: flex;
|
|
191
|
+
flex-direction: column;
|
|
192
|
+
gap: var(--space-lg);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.forge-header {
|
|
196
|
+
position: relative;
|
|
197
|
+
padding: var(--space-md) var(--space-lg);
|
|
198
|
+
border: 1px solid var(--line);
|
|
199
|
+
background: var(--surface-card);
|
|
200
|
+
overflow: hidden;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.forge-header-inner {
|
|
204
|
+
display: flex;
|
|
205
|
+
align-items: center;
|
|
206
|
+
justify-content: space-between;
|
|
207
|
+
gap: var(--space-md);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.forge-header-left,
|
|
211
|
+
.forge-header-right {
|
|
212
|
+
display: flex;
|
|
213
|
+
align-items: center;
|
|
214
|
+
gap: var(--space-sm);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.forge-back {
|
|
218
|
+
font-family: var(--font-mono);
|
|
219
|
+
font-size: 0.72rem;
|
|
220
|
+
letter-spacing: 0.1em;
|
|
221
|
+
color: var(--muted);
|
|
222
|
+
text-decoration: none;
|
|
223
|
+
transition: color var(--transition-fast);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.forge-back:hover {
|
|
227
|
+
color: var(--text);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.forge-metrics {
|
|
231
|
+
display: grid;
|
|
232
|
+
grid-template-columns: repeat(4, 1fr);
|
|
233
|
+
gap: var(--space-sm);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.forge-content {
|
|
237
|
+
display: grid;
|
|
238
|
+
grid-template-columns: 1fr 1fr;
|
|
239
|
+
gap: var(--space-lg);
|
|
240
|
+
align-items: start;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.forge-content--center {
|
|
244
|
+
grid-template-columns: 1fr;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.forge-left,
|
|
248
|
+
.forge-right {
|
|
249
|
+
display: flex;
|
|
250
|
+
flex-direction: column;
|
|
251
|
+
gap: var(--space-md);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.forge-panel-head {
|
|
255
|
+
display: flex;
|
|
256
|
+
align-items: center;
|
|
257
|
+
gap: var(--space-sm);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.forge-schematic {
|
|
261
|
+
position: relative;
|
|
262
|
+
padding: var(--space-lg);
|
|
263
|
+
border: 1px solid var(--line);
|
|
264
|
+
background: var(--surface-panel);
|
|
265
|
+
overflow: hidden;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.forge-schematic--large {
|
|
269
|
+
min-height: 280px;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.forge-schematic-inner {
|
|
273
|
+
display: flex;
|
|
274
|
+
flex-direction: column;
|
|
275
|
+
gap: var(--space-sm);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.forge-vein-wrap {
|
|
279
|
+
position: relative;
|
|
280
|
+
height: 120px;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.forge-vein-large {
|
|
284
|
+
position: relative;
|
|
285
|
+
height: 220px;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.forge-alert-row {
|
|
289
|
+
display: flex;
|
|
290
|
+
align-items: center;
|
|
291
|
+
gap: var(--space-sm);
|
|
292
|
+
padding: var(--space-sm);
|
|
293
|
+
border: 1px solid var(--line);
|
|
294
|
+
background: var(--surface-panel);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.forge-checklist {
|
|
298
|
+
display: flex;
|
|
299
|
+
flex-direction: column;
|
|
300
|
+
gap: var(--space-xs);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.forge-checklist-item {
|
|
304
|
+
display: flex;
|
|
305
|
+
align-items: center;
|
|
306
|
+
gap: var(--space-sm);
|
|
307
|
+
padding: var(--space-xs) var(--space-sm);
|
|
308
|
+
border-bottom: 1px solid var(--line);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
@media (max-width: 768px) {
|
|
312
|
+
.forge-metrics {
|
|
313
|
+
grid-template-columns: repeat(2, 1fr);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.forge-content {
|
|
317
|
+
grid-template-columns: 1fr;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.forge-shell {
|
|
321
|
+
padding: var(--space-lg) var(--space-md);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
</style>
|
package/dist/index.d.ts
CHANGED
|
@@ -46,7 +46,14 @@ export { default as ConfirmDialog } from './components/patterns/ConfirmDialog.sv
|
|
|
46
46
|
export { default as SearchBar } from './components/patterns/SearchBar.svelte';
|
|
47
47
|
export { default as TerminalBoot } from './components/patterns/TerminalBoot.svelte';
|
|
48
48
|
export { default as ActionBar } from './components/patterns/ActionBar.svelte';
|
|
49
|
-
export {
|
|
49
|
+
export { default as RegisterSwitcher } from './components/patterns/RegisterSwitcher.svelte';
|
|
50
|
+
export { default as Manifesto } from './components/patterns/Manifesto.svelte';
|
|
51
|
+
export { default as ChapterMark } from './components/patterns/ChapterMark.svelte';
|
|
52
|
+
export { default as PullQuote } from './components/patterns/PullQuote.svelte';
|
|
53
|
+
export { default as ShowcaseFrame } from './components/patterns/ShowcaseFrame.svelte';
|
|
54
|
+
export { default as DepthPortal } from './components/patterns/DepthPortal.svelte';
|
|
55
|
+
export { default as AppShell } from './components/system/AppShell.svelte';
|
|
56
|
+
export { tokens, themeClasses } from './tokens/tokens.js';
|
|
50
57
|
export { applyRegister, clearRegister, registers } from './system/register.js';
|
|
51
58
|
export type { Register } from './system/register.js';
|
|
52
59
|
export type { Expression } from './components/primitives/text.js';
|
|
@@ -66,8 +73,15 @@ export { default as SignalRing } from './components/ambient/SignalRing.svelte';
|
|
|
66
73
|
export { default as GlyphMark } from './components/ambient/GlyphMark.svelte';
|
|
67
74
|
export { default as DataStream } from './components/ambient/DataStream.svelte';
|
|
68
75
|
export { default as ThreadLine } from './components/ambient/ThreadLine.svelte';
|
|
76
|
+
export { default as HexGrid } from './components/ambient/HexGrid.svelte';
|
|
77
|
+
export { default as BrassFiligree } from './components/ambient/BrassFiligree.svelte';
|
|
78
|
+
export { default as CrystalShard } from './components/ambient/CrystalShard.svelte';
|
|
79
|
+
export { default as ArcaneVein } from './components/ambient/ArcaneVein.svelte';
|
|
80
|
+
export { default as EnergyArc } from './components/ambient/EnergyArc.svelte';
|
|
81
|
+
export { default as ShimmerCloud } from './components/ambient/ShimmerCloud.svelte';
|
|
69
82
|
export { default as NarrativeScene } from './components/scenes/NarrativeScene.svelte';
|
|
70
83
|
export { default as ReadoutScene } from './components/scenes/ReadoutScene.svelte';
|
|
71
84
|
export { default as StageScene } from './components/scenes/StageScene.svelte';
|
|
72
85
|
export { default as ArchiveScene } from './components/scenes/ArchiveScene.svelte';
|
|
73
86
|
export { default as LogScene } from './components/scenes/LogScene.svelte';
|
|
87
|
+
export { default as DepthScene } from './components/scenes/DepthScene.svelte';
|
package/dist/index.js
CHANGED
|
@@ -54,8 +54,16 @@ export { default as ConfirmDialog } from './components/patterns/ConfirmDialog.sv
|
|
|
54
54
|
export { default as SearchBar } from './components/patterns/SearchBar.svelte';
|
|
55
55
|
export { default as TerminalBoot } from './components/patterns/TerminalBoot.svelte';
|
|
56
56
|
export { default as ActionBar } from './components/patterns/ActionBar.svelte';
|
|
57
|
+
export { default as RegisterSwitcher } from './components/patterns/RegisterSwitcher.svelte';
|
|
58
|
+
export { default as Manifesto } from './components/patterns/Manifesto.svelte';
|
|
59
|
+
export { default as ChapterMark } from './components/patterns/ChapterMark.svelte';
|
|
60
|
+
export { default as PullQuote } from './components/patterns/PullQuote.svelte';
|
|
61
|
+
export { default as ShowcaseFrame } from './components/patterns/ShowcaseFrame.svelte';
|
|
62
|
+
export { default as DepthPortal } from './components/patterns/DepthPortal.svelte';
|
|
63
|
+
// system — shell
|
|
64
|
+
export { default as AppShell } from './components/system/AppShell.svelte';
|
|
57
65
|
// tokens
|
|
58
|
-
export { tokens } from './tokens/tokens.js';
|
|
66
|
+
export { tokens, themeClasses } from './tokens/tokens.js';
|
|
59
67
|
// system — register
|
|
60
68
|
export { applyRegister, clearRegister, registers } from './system/register.js';
|
|
61
69
|
// system — actions
|
|
@@ -75,9 +83,16 @@ export { default as SignalRing } from './components/ambient/SignalRing.svelte';
|
|
|
75
83
|
export { default as GlyphMark } from './components/ambient/GlyphMark.svelte';
|
|
76
84
|
export { default as DataStream } from './components/ambient/DataStream.svelte';
|
|
77
85
|
export { default as ThreadLine } from './components/ambient/ThreadLine.svelte';
|
|
86
|
+
export { default as HexGrid } from './components/ambient/HexGrid.svelte';
|
|
87
|
+
export { default as BrassFiligree } from './components/ambient/BrassFiligree.svelte';
|
|
88
|
+
export { default as CrystalShard } from './components/ambient/CrystalShard.svelte';
|
|
89
|
+
export { default as ArcaneVein } from './components/ambient/ArcaneVein.svelte';
|
|
90
|
+
export { default as EnergyArc } from './components/ambient/EnergyArc.svelte';
|
|
91
|
+
export { default as ShimmerCloud } from './components/ambient/ShimmerCloud.svelte';
|
|
78
92
|
// scenes
|
|
79
93
|
export { default as NarrativeScene } from './components/scenes/NarrativeScene.svelte';
|
|
80
94
|
export { default as ReadoutScene } from './components/scenes/ReadoutScene.svelte';
|
|
81
95
|
export { default as StageScene } from './components/scenes/StageScene.svelte';
|
|
82
96
|
export { default as ArchiveScene } from './components/scenes/ArchiveScene.svelte';
|
|
83
97
|
export { default as LogScene } from './components/scenes/LogScene.svelte';
|
|
98
|
+
export { default as DepthScene } from './components/scenes/DepthScene.svelte';
|
package/dist/styles.css
CHANGED
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export function echo(node) {
|
|
10
10
|
const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
11
|
+
let frame = 0;
|
|
12
|
+
let t1 = 0;
|
|
13
|
+
let t2 = 0;
|
|
11
14
|
function handleClick(e) {
|
|
12
15
|
if (prefersReduced)
|
|
13
16
|
return;
|
|
@@ -22,18 +25,21 @@ export function echo(node) {
|
|
|
22
25
|
pointer-events: none;
|
|
23
26
|
background: radial-gradient(circle at ${x}% ${y}%, rgba(199, 156, 87, 0.22), transparent 70%);
|
|
24
27
|
opacity: 0;
|
|
25
|
-
transition: opacity 0.15s
|
|
28
|
+
transition: opacity 0.15s cubic-bezier(0.4, 0, 0.2, 1);
|
|
26
29
|
`;
|
|
27
30
|
const position = getComputedStyle(node).position;
|
|
28
31
|
if (position === 'static')
|
|
29
32
|
node.style.position = 'relative';
|
|
30
33
|
node.style.overflow = 'hidden';
|
|
31
34
|
node.appendChild(overlay);
|
|
32
|
-
|
|
35
|
+
cancelAnimationFrame(frame);
|
|
36
|
+
clearTimeout(t1);
|
|
37
|
+
clearTimeout(t2);
|
|
38
|
+
frame = requestAnimationFrame(() => {
|
|
33
39
|
overlay.style.opacity = '1';
|
|
34
|
-
setTimeout(() => {
|
|
40
|
+
t1 = setTimeout(() => {
|
|
35
41
|
overlay.style.opacity = '0';
|
|
36
|
-
setTimeout(() => overlay.remove(), 200);
|
|
42
|
+
t2 = setTimeout(() => overlay.remove(), 200);
|
|
37
43
|
}, 200);
|
|
38
44
|
});
|
|
39
45
|
}
|
|
@@ -41,6 +47,9 @@ export function echo(node) {
|
|
|
41
47
|
return {
|
|
42
48
|
destroy() {
|
|
43
49
|
node.removeEventListener('click', handleClick);
|
|
50
|
+
cancelAnimationFrame(frame);
|
|
51
|
+
clearTimeout(t1);
|
|
52
|
+
clearTimeout(t2);
|
|
44
53
|
}
|
|
45
54
|
};
|
|
46
55
|
}
|
|
@@ -25,6 +25,9 @@ export function resolve(node, register) {
|
|
|
25
25
|
const position = getComputedStyle(node).position;
|
|
26
26
|
if (position === 'static')
|
|
27
27
|
node.style.position = 'relative';
|
|
28
|
+
let frame = 0;
|
|
29
|
+
let t1 = 0;
|
|
30
|
+
let t2 = 0;
|
|
28
31
|
function trigger(status) {
|
|
29
32
|
node.dispatchEvent(new CustomEvent('resolve:start', { detail: status }));
|
|
30
33
|
if (prefersReduced) {
|
|
@@ -39,15 +42,18 @@ export function resolve(node, register) {
|
|
|
39
42
|
background: ${statusColors[status]};
|
|
40
43
|
opacity: 0;
|
|
41
44
|
border-radius: inherit;
|
|
42
|
-
transition: opacity 0.12s
|
|
45
|
+
transition: opacity 0.12s cubic-bezier(0.4, 0, 0.2, 1);
|
|
43
46
|
`;
|
|
44
47
|
node.appendChild(overlay);
|
|
45
|
-
|
|
48
|
+
cancelAnimationFrame(frame);
|
|
49
|
+
clearTimeout(t1);
|
|
50
|
+
clearTimeout(t2);
|
|
51
|
+
frame = requestAnimationFrame(() => {
|
|
46
52
|
overlay.style.opacity = '0.12';
|
|
47
|
-
setTimeout(() => {
|
|
48
|
-
overlay.style.transition = 'opacity 0.
|
|
53
|
+
t1 = setTimeout(() => {
|
|
54
|
+
overlay.style.transition = 'opacity 0.38s cubic-bezier(0.22, 1, 0.36, 1)';
|
|
49
55
|
overlay.style.opacity = '0';
|
|
50
|
-
setTimeout(() => {
|
|
56
|
+
t2 = setTimeout(() => {
|
|
51
57
|
overlay.remove();
|
|
52
58
|
node.dispatchEvent(new CustomEvent('resolve:end', { detail: status }));
|
|
53
59
|
}, 450);
|
|
@@ -55,5 +61,13 @@ export function resolve(node, register) {
|
|
|
55
61
|
});
|
|
56
62
|
}
|
|
57
63
|
register({ trigger });
|
|
58
|
-
return {
|
|
64
|
+
return {
|
|
65
|
+
destroy() {
|
|
66
|
+
cancelAnimationFrame(frame);
|
|
67
|
+
clearTimeout(t1);
|
|
68
|
+
clearTimeout(t2);
|
|
69
|
+
if (position === 'static')
|
|
70
|
+
node.style.position = '';
|
|
71
|
+
}
|
|
72
|
+
};
|
|
59
73
|
}
|
|
@@ -21,7 +21,7 @@ export function reveal(node, options) {
|
|
|
21
21
|
target.style.opacity = '0';
|
|
22
22
|
target.style.transform = prefersReduced ? 'none' : 'translateY(4px)';
|
|
23
23
|
if (!prefersReduced) {
|
|
24
|
-
target.style.transition = 'opacity 0.
|
|
24
|
+
target.style.transition = 'opacity 0.22s cubic-bezier(0.22, 1, 0.36, 1), transform 0.22s cubic-bezier(0.22, 1, 0.36, 1)';
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
function show() {
|
|
@@ -10,10 +10,9 @@ export function surface(node, options = {}) {
|
|
|
10
10
|
const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
11
11
|
if (prefersReduced)
|
|
12
12
|
return {};
|
|
13
|
-
node.style.willChange = 'opacity, transform';
|
|
14
13
|
node.style.opacity = '0';
|
|
15
14
|
node.style.transform = 'translateY(6px)';
|
|
16
|
-
node.style.transition = `opacity 0.
|
|
15
|
+
node.style.transition = `opacity 0.38s cubic-bezier(0.22, 1, 0.36, 1) ${delay}ms, transform 0.38s cubic-bezier(0.22, 1, 0.36, 1) ${delay}ms`;
|
|
17
16
|
function onEnd(e) {
|
|
18
17
|
if (e.propertyName !== 'transform')
|
|
19
18
|
return;
|
|
@@ -21,7 +20,6 @@ export function surface(node, options = {}) {
|
|
|
21
20
|
// Clear transforms to avoid creating containing blocks for fixed/floating UI.
|
|
22
21
|
node.style.transform = 'none';
|
|
23
22
|
node.style.transition = '';
|
|
24
|
-
node.style.willChange = '';
|
|
25
23
|
}
|
|
26
24
|
node.addEventListener('transitionend', onEnd);
|
|
27
25
|
const frame = requestAnimationFrame(() => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type Register = 'field-notebook' | 'mission-control' | 'archive';
|
|
1
|
+
export type Register = 'field-notebook' | 'mission-control' | 'archive' | 'hextech' | 'arcane';
|
|
2
2
|
/**
|
|
3
3
|
* Applies a register to an element by setting data-register.
|
|
4
4
|
* Call with a DOM element reference or 'body' to set globally.
|
package/dist/system/register.js
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* Call with a DOM element reference or 'body' to set globally.
|
|
4
4
|
*/
|
|
5
5
|
export function applyRegister(register, target = 'body') {
|
|
6
|
+
if (typeof document === 'undefined')
|
|
7
|
+
return;
|
|
6
8
|
const el = target === 'body' ? document.body : target;
|
|
7
9
|
el.dataset.register = register;
|
|
8
10
|
}
|
|
@@ -10,7 +12,9 @@ export function applyRegister(register, target = 'body') {
|
|
|
10
12
|
* Removes the register from an element, restoring default behavior.
|
|
11
13
|
*/
|
|
12
14
|
export function clearRegister(target = 'body') {
|
|
15
|
+
if (typeof document === 'undefined')
|
|
16
|
+
return;
|
|
13
17
|
const el = target === 'body' ? document.body : target;
|
|
14
18
|
delete el.dataset.register;
|
|
15
19
|
}
|
|
16
|
-
export const registers = ['field-notebook', 'mission-control', 'archive'];
|
|
20
|
+
export const registers = ['field-notebook', 'mission-control', 'archive', 'hextech', 'arcane'];
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/* ── arcane register tokens ───────────────────────────────────────────── */
|
|
2
|
+
/* Zaun-unstable. Raw crystal + smoke + organic glow. */
|
|
3
|
+
/* Applied under [data-register='arcane']. */
|
|
4
|
+
|
|
5
|
+
[data-register='arcane'] {
|
|
6
|
+
/* palette — new raw values */
|
|
7
|
+
--arc-void: #0e0818;
|
|
8
|
+
--arc-violet-deep: #2a0e3b;
|
|
9
|
+
--arc-violet: #7b2d8e;
|
|
10
|
+
--arc-magenta: #b845c9;
|
|
11
|
+
--arc-shimmer: #e94cbc;
|
|
12
|
+
--arc-pink-hot: #ff6b9d;
|
|
13
|
+
--arc-tox-green: #7fb069;
|
|
14
|
+
--arc-smoke: #3a3a4e;
|
|
15
|
+
--arc-vein-glow: rgba(184, 69, 201, 0.55);
|
|
16
|
+
--arc-crackle: rgba(233, 76, 188, 0.7);
|
|
17
|
+
--arc-particle: rgba(255, 107, 157, 0.6);
|
|
18
|
+
|
|
19
|
+
/* remap semantic tokens → arcane palette */
|
|
20
|
+
--bg: #0a0614;
|
|
21
|
+
--bg-elev: #130920;
|
|
22
|
+
--bg-elev-soft: #0f071a;
|
|
23
|
+
|
|
24
|
+
--accent: #b845c9;
|
|
25
|
+
--accent-strong: #e94cbc;
|
|
26
|
+
--signal: #7fb069;
|
|
27
|
+
|
|
28
|
+
--line: rgba(184, 69, 201, 0.18);
|
|
29
|
+
--line-strong: rgba(233, 76, 188, 0.3);
|
|
30
|
+
|
|
31
|
+
--status-ok: #7fb069;
|
|
32
|
+
--status-pend: #5a4a6e;
|
|
33
|
+
--status-warn: #e94cbc;
|
|
34
|
+
--status-fail: #ff4060;
|
|
35
|
+
|
|
36
|
+
--shadow-card: 0 8px 32px rgba(0, 0, 0, 0.65), 0 0 0 1px rgba(184, 69, 201, 0.08);
|
|
37
|
+
--shadow-veil: 0 40px 120px rgba(0, 0, 0, 0.6), 0 0 80px rgba(184, 69, 201, 0.06);
|
|
38
|
+
|
|
39
|
+
--focus-ring: 0 0 0 1px rgba(233, 76, 188, 0.5), 0 0 0 4px rgba(184, 69, 201, 0.1);
|
|
40
|
+
|
|
41
|
+
--surface-card:
|
|
42
|
+
linear-gradient(135deg, rgba(184, 69, 201, 0.08), transparent 44%),
|
|
43
|
+
linear-gradient(225deg, rgba(233, 76, 188, 0.04), transparent 32%), #0a0614;
|
|
44
|
+
--surface-panel:
|
|
45
|
+
linear-gradient(180deg, rgba(184, 69, 201, 0.1), transparent 22%),
|
|
46
|
+
linear-gradient(135deg, rgba(233, 76, 188, 0.06), #0a0614 44%),
|
|
47
|
+
#07040f;
|
|
48
|
+
--surface-soft:
|
|
49
|
+
linear-gradient(180deg, rgba(184, 69, 201, 0.03), transparent 38%),
|
|
50
|
+
linear-gradient(135deg, rgba(233, 76, 188, 0.04), transparent 50%),
|
|
51
|
+
rgba(10, 6, 20, 0.9);
|
|
52
|
+
--surface-stroke: inset 0 1px 0 rgba(233, 76, 188, 0.07);
|
|
53
|
+
|
|
54
|
+
/* motif tokens */
|
|
55
|
+
--orn-hex-density: 0;
|
|
56
|
+
--orn-vein-intensity: 1;
|
|
57
|
+
--orn-shimmer-rate: 2.4s;
|
|
58
|
+
--orn-pulse-rhythm: cubic-bezier(0.6, 0, 0.4, 1);
|
|
59
|
+
--orn-glow-radius: 20px;
|
|
60
|
+
--orn-glow-color: rgba(184, 69, 201, 0.45);
|
|
61
|
+
|
|
62
|
+
/* register weight distribution */
|
|
63
|
+
--reg-font-primary: var(--font-body);
|
|
64
|
+
--reg-font-ui: var(--font-mono);
|
|
65
|
+
--reg-heading-tracking: -0.04em;
|
|
66
|
+
--reg-heading-lh: 0.94;
|
|
67
|
+
--reg-body-size: 1.12rem;
|
|
68
|
+
--reg-label-size: 0.68rem;
|
|
69
|
+
--reg-label-tracking: 0.13em;
|
|
70
|
+
--reg-surface-opacity: 0.82;
|
|
71
|
+
--reg-ornament-opacity: 0.28;
|
|
72
|
+
--reg-accent-weight: 1.1;
|
|
73
|
+
--reg-signal-weight: 0.7;
|
|
74
|
+
--reg-spacing-scale: 1.08;
|
|
75
|
+
|
|
76
|
+
/* motion — organic, breathing */
|
|
77
|
+
--transition-smooth: 0.42s cubic-bezier(0.6, 0, 0.4, 1);
|
|
78
|
+
--transition-fast: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
|
|
79
|
+
--ease-smooth: cubic-bezier(0.6, 0, 0.4, 1);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* atmospheric background override */
|
|
83
|
+
[data-register='arcane'] body::before,
|
|
84
|
+
body[data-register='arcane']::before {
|
|
85
|
+
background:
|
|
86
|
+
radial-gradient(circle at top, rgba(184, 69, 201, 0.07), transparent 28%),
|
|
87
|
+
radial-gradient(circle at 80% 60%, rgba(233, 76, 188, 0.04), transparent 32%),
|
|
88
|
+
linear-gradient(180deg, #0a0614 0%, #07040f 40%, #050310 100%);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* selection color */
|
|
92
|
+
[data-register='arcane'] ::selection,
|
|
93
|
+
body[data-register='arcane'] ::selection {
|
|
94
|
+
background-color: rgba(184, 69, 201, 0.28);
|
|
95
|
+
color: var(--text);
|
|
96
|
+
}
|