From aa7a7b1db817f49a352e5e21b2fc5b1e73c23494 Mon Sep 17 00:00:00 2001 From: boban Date: Sat, 13 Jun 2026 01:16:31 +0200 Subject: [PATCH] =?UTF-8?q?fix(ux):=20editor=20click=20bug=20(@js=E2=86=92?= =?UTF-8?q?index),=20self-hosted=20fonts,=20split-brand=20auth,=20R14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix Alpine "Invalid or unexpected token" on file/service/key actions: @js() does NOT compile inside a Blade component (x-btn) attribute, so a literal @js(...) reached the DOM and Alpine choked on it. Switched all 10 wire:click arguments to loop-index lookups (files: open/go/download/edit/confirmDelete; services: confirm; keys: confirmKeyRemoval) — the component resolves the value server-side by index. {{ $loop->index }} compiles in component attributes; @js does not. - Self-host fonts (R14): Chakra Petch / Space Grotesk / JetBrains Mono as local .woff2 in resources/fonts/, declared via @font-face in app.css, Vite-bundled with relative urls so they resolve in dev AND the prod build. No Google Fonts / CDN link or @import. New rule R14 added to rules.md + CLAUDE.md. - Auth redesign (split-brand, per reference): new auth layout with a brand panel (faux terminal + glow mesh, hidden below lg) + redesigned login, two-factor-challenge, two-factor-setup, password-change forms. - x-btn: add size="lg" (h-11, >=44px touch target) for the full-width auth CTA; one shared button component, no bespoke styles. - Remove unused Laravel welcome.blade.php (was full of raw hex — R3 cleanup). Verified (R12): /login 200 / 0 console errors, fonts load (Chakra+Grotesk+JB), brand panel visible @1440; file-editor REAL click -> modal opens, textarea renders, 0 Alpine errors; editor load/save roundtrip (/etc/hostname='debian'); all 7 routes 200 / 0 console errors. Full rules audit R1-R14 clean. Co-Authored-By: Claude Opus 4.8 (1M context) --- CLAUDE.md | 5 +- app/Livewire/Files/Index.php | 27 ++- app/Livewire/Servers/Show.php | 10 +- app/Livewire/Services/Index.php | 7 +- resources/css/app.css | 44 ++++ resources/fonts/chakra-petch-400.woff2 | Bin 0 -> 9756 bytes resources/fonts/chakra-petch-500.woff2 | Bin 0 -> 9956 bytes resources/fonts/chakra-petch-600.woff2 | Bin 0 -> 9968 bytes resources/fonts/chakra-petch-700.woff2 | Bin 0 -> 9900 bytes resources/fonts/jetbrains-mono.woff2 | Bin 0 -> 31432 bytes resources/fonts/space-grotesk.woff2 | Bin 0 -> 22288 bytes resources/views/components/btn.blade.php | 12 +- resources/views/components/icon.blade.php | 1 + resources/views/layouts/auth.blade.php | 77 +++++- resources/views/livewire/auth/login.blade.php | 50 ++-- .../livewire/auth/password-change.blade.php | 45 ++-- .../auth/two-factor-challenge.blade.php | 41 +++- .../livewire/auth/two-factor-setup.blade.php | 48 ++-- .../views/livewire/files/index.blade.php | 12 +- .../views/livewire/servers/show.blade.php | 2 +- .../views/livewire/services/index.blade.php | 6 +- resources/views/welcome.blade.php | 223 ------------------ rules.md | 33 +++ 23 files changed, 316 insertions(+), 327 deletions(-) create mode 100644 resources/fonts/chakra-petch-400.woff2 create mode 100644 resources/fonts/chakra-petch-500.woff2 create mode 100644 resources/fonts/chakra-petch-600.woff2 create mode 100644 resources/fonts/chakra-petch-700.woff2 create mode 100644 resources/fonts/jetbrains-mono.woff2 create mode 100644 resources/fonts/space-grotesk.woff2 delete mode 100644 resources/views/welcome.blade.php diff --git a/CLAUDE.md b/CLAUDE.md index 8ed83e2..f21ff06 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -49,7 +49,7 @@ dashboard**, connecting **agentless over SSH**. The operator sees and steers the | SSH | **phpseclib** (exec + SFTP) | | Charts | JS lib (ApexCharts / Chart.js / uPlot) as an **Alpine island** in Blade | | Icons | **Lucide**, inline SVG via a Blade `x-icon` component | -| Fonts | **Chakra Petch** (display) · **Space Grotesk** (sans) · **JetBrains Mono** (numbers/paths) — self-host `.woff2`, no CDN in prod | +| Fonts | **Chakra Petch** (display) · **Space Grotesk** (sans) · **JetBrains Mono** (numbers/paths) — **self-hosted only** (`public/fonts/*.woff2` + `@font-face` in `app.css`), **never a CDN/Google Fonts link or `@import`** (R14) | > **Version note (2026-06-11):** handoff §3 specifies Laravel 12; **Laravel 13** is used (it is the current release; user decision). Livewire 3 / Tailwind 4 / wire-elements/modal / Reverb are unaffected; PHP pinned to **8.3**. @@ -156,6 +156,9 @@ number/IP/path**. All tokens live in `resources/css/app.css` (R3). Token groups: PK (`getRouteKeyName(): 'uuid'`). (R11) - **Route paths + names are English**, always — `/settings` not `/einstellungen`, `/files` not `/dateien`. German lives in the visible nav label, never in the `href`/route name. (R13) +- **Fonts self-hosted only** — `.woff2` in `resources/fonts/` (Vite-bundled, relative + `url('../fonts/…')`) + `@font-face` in `app.css`; never a Google Fonts / CDN `` or + `@import`. (R14) - **Responsive:** every screen at **375 / 768 / 1280+**; sidebar → drawer on small; KPI grid 4→2→1; tables scroll/stack; touch targets ≥ 44px. (R7) - **Docs language:** these meta-docs are in English; **UI strings are German**. diff --git a/app/Livewire/Files/Index.php b/app/Livewire/Files/Index.php index 410a004..3f90389 100644 --- a/app/Livewire/Files/Index.php +++ b/app/Livewire/Files/Index.php @@ -53,14 +53,20 @@ class Index extends Component $this->ready = true; } - public function open(string $name): void + public function open(int $index): void { + $name = $this->entries[$index]['name'] ?? null; + if ($name === null) { + return; + } + $this->path = rtrim($this->path, '/').'/'.$name; $this->load(); } - public function go(string $path): void + public function go(int $index): void { + $path = $this->crumbs[$index]['path'] ?? '/'; $this->path = $path !== '' ? $path : '/'; $this->load(); } @@ -92,10 +98,11 @@ class Index extends Component } /** Stream a remote file to the browser as a download (SFTP get). */ - public function download(string $name, FleetService $fleet) + public function download(int $index, FleetService $fleet) { + $name = $this->entries[$index]['name'] ?? null; $active = $this->activeServer(); - if (! $active || ! $active->credential_exists) { + if ($name === null || ! $active || ! $active->credential_exists) { return null; } @@ -111,10 +118,11 @@ class Index extends Component } /** Open the view/edit modal for a file. */ - public function edit(string $name): void + public function edit(int $index): void { + $name = $this->entries[$index]['name'] ?? null; $active = $this->activeServer(); - if (! $active) { + if ($name === null || ! $active) { return; } @@ -156,8 +164,13 @@ class Index extends Component * Delete a file (R5): opens the confirm modal, which writes the AuditEvent * and re-dispatches `fileConfirmed`. SFTP unlink is wired in behind this later. */ - public function confirmDelete(string $name): void + public function confirmDelete(int $index): void { + $name = $this->entries[$index]['name'] ?? null; + if ($name === null) { + return; + } + $this->dispatch('openModal', component: 'modals.confirm-action', arguments: [ diff --git a/app/Livewire/Servers/Show.php b/app/Livewire/Servers/Show.php index 6f9e0cc..5b7a24b 100644 --- a/app/Livewire/Servers/Show.php +++ b/app/Livewire/Servers/Show.php @@ -95,8 +95,16 @@ class Show extends Component * Revoke an SSH key (R5): opens the confirm modal, which writes the * AuditEvent and re-dispatches `keyRemoved`. SSH layer removal lands later. */ - public function confirmKeyRemoval(string $fingerprint, string $comment): void + public function confirmKeyRemoval(int $index): void { + $key = $this->sshKeys[$index] ?? null; + if ($key === null) { + return; + } + + $fingerprint = $key['fingerprint']; + $comment = $key['comment']; + $this->dispatch('openModal', component: 'modals.confirm-action', arguments: [ diff --git a/app/Livewire/Services/Index.php b/app/Livewire/Services/Index.php index 96240b1..aa9849f 100644 --- a/app/Livewire/Services/Index.php +++ b/app/Livewire/Services/Index.php @@ -61,8 +61,13 @@ class Index extends Component * modal writes the AuditEvent and re-dispatches `serviceConfirmed`, which * applyService() handles. SSH exec (systemctl) is wired in behind this later. */ - public function confirm(string $op, string $name): void + public function confirm(string $op, int $index): void { + $name = $this->filteredServices[$index]['name'] ?? null; + if ($name === null) { + return; + } + [$heading, $phrase, $label, $action, $icon] = match ($op) { 'start' => ['Dienst starten', 'wird gestartet', 'Starten', 'service.start', 'power'], 'stop' => ['Dienst stoppen', 'wird gestoppt', 'Stoppen', 'service.stop', 'power'], diff --git a/resources/css/app.css b/resources/css/app.css index f8c3c69..a89a383 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -6,6 +6,50 @@ @source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; @source '../../storage/framework/views/*.php'; +/* ── Self-hosted fonts (R14 — local only, never a CDN/@import from Google) ─ */ +@font-face { + font-family: 'Chakra Petch'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('../fonts/chakra-petch-400.woff2') format('woff2'); +} +@font-face { + font-family: 'Chakra Petch'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('../fonts/chakra-petch-500.woff2') format('woff2'); +} +@font-face { + font-family: 'Chakra Petch'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('../fonts/chakra-petch-600.woff2') format('woff2'); +} +@font-face { + font-family: 'Chakra Petch'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('../fonts/chakra-petch-700.woff2') format('woff2'); +} +@font-face { + font-family: 'Space Grotesk'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url('../fonts/space-grotesk.woff2') format('woff2'); +} +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 100 800; + font-display: swap; + src: url('../fonts/jetbrains-mono.woff2') format('woff2'); +} + /* ── Clusev design tokens — "Tactical Terminal" (handoff §6) ───────────── */ @theme { /* surfaces */ diff --git a/resources/fonts/chakra-petch-400.woff2 b/resources/fonts/chakra-petch-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f7a66022dde0ab1d862d202807f5988453a9bdf4 GIT binary patch literal 9756 zcmV+%Cga(6Pew8T0RR91045v&4gdfE0AKt7042l#0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/resources/fonts/chakra-petch-600.woff2 b/resources/fonts/chakra-petch-600.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e4d90d5186d9da8c65e075940cc74449d94bbef4 GIT binary patch literal 9968 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 literal 0 HcmV?d00001 diff --git a/resources/fonts/jetbrains-mono.woff2 b/resources/fonts/jetbrains-mono.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d09cda4a4c3f4c08ae253dd8a9c5133a89b31b7 GIT binary patch literal 31432 zcmV)AK*YayPew8T0RR910D8y(6951J0W!b<0D4*g0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/resources/fonts/space-grotesk.woff2 b/resources/fonts/space-grotesk.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0f3474ee8af2f8253225f3b41bf79be986a1ae13 GIT binary patch literal 22288 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 S8#S~?xaXqu;tAo2S~9su2vSq{fi^hG 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 literal 0 HcmV?d00001 diff --git a/resources/views/components/btn.blade.php b/resources/views/components/btn.blade.php index fbd92f3..af346a3 100644 --- a/resources/views/components/btn.blade.php +++ b/resources/views/components/btn.blade.php @@ -1,4 +1,4 @@ -@props(['variant' => 'secondary', 'icon' => false, 'href' => null]) +@props(['variant' => 'secondary', 'icon' => false, 'href' => null, 'size' => 'sm']) @php // One button style for the whole app — compact, consistent (R10). $variants = [ @@ -9,10 +9,14 @@ 'ghost' => 'text-ink-2 hover:bg-raised hover:text-ink', 'ghost-danger' => 'text-ink-3 hover:bg-offline/10 hover:text-offline', ]; - $shape = $icon ? 'h-8 w-8 justify-center' : 'h-8 px-3'; - $classes = 'inline-flex items-center gap-1.5 rounded-md text-xs font-medium transition-colors ' + // sm = compact toolbar/row buttons; lg = full-height primary CTA (≥44px touch target, R7). + $sizes = [ + 'sm' => ($icon ? 'h-8 w-8' : 'h-8 px-3').' text-xs', + 'lg' => ($icon ? 'h-11 w-11' : 'h-11 px-4').' text-sm', + ]; + $classes = 'inline-flex items-center justify-center gap-1.5 rounded-md font-medium transition-colors ' .'disabled:opacity-50 disabled:pointer-events-none ' - .$shape.' '.($variants[$variant] ?? $variants['secondary']); + .($sizes[$size] ?? $sizes['sm']).' '.($variants[$variant] ?? $variants['secondary']); @endphp @if ($href) merge(['class' => $classes]) }}>{{ $slot }} diff --git a/resources/views/components/icon.blade.php b/resources/views/components/icon.blade.php index c40012b..331fdaf 100644 --- a/resources/views/components/icon.blade.php +++ b/resources/views/components/icon.blade.php @@ -3,6 +3,7 @@ // Lucide SVG paths (24x24, stroke). Add icons here as needed. $paths = [ 'menu' => '', + 'chevron-left' => '', 'x' => '', 'dashboard' => '', 'server' => '', diff --git a/resources/views/layouts/auth.blade.php b/resources/views/layouts/auth.blade.php index c4005a8..a022a48 100644 --- a/resources/views/layouts/auth.blade.php +++ b/resources/views/layouts/auth.blade.php @@ -8,20 +8,73 @@ @vite(['resources/css/app.css', 'resources/js/app.js']) @livewireStyles - -
-
- - - - Clusev -
+ +
+ {{-- Brand panel — hidden below lg --}} + + + {{-- Form panel --}} +
+
+ {{-- wordmark for small screens (brand panel hidden) --}} +
+ + + + Clusev +
+ + {{ $slot }} +
+
@livewireScripts diff --git a/resources/views/livewire/auth/login.blade.php b/resources/views/livewire/auth/login.blade.php index 4506f09..6c37f64 100644 --- a/resources/views/livewire/auth/login.blade.php +++ b/resources/views/livewire/auth/login.blade.php @@ -1,33 +1,51 @@ -
-

Anmelden

-

Zugang zum Clusev-Control-Panel.

+@php + $field = 'h-11 w-full rounded-md border border-line bg-inset px-3 font-mono text-sm text-ink placeholder:text-ink-4 focus:border-accent/40 focus:outline-none'; + $label = 'mb-1.5 block font-mono text-[11px] uppercase tracking-wider text-ink-3'; + $err = 'mt-1.5 flex items-center gap-1.5 font-mono text-[11px] text-offline'; +@endphp -
+
+
+

Control Plane

+

Anmelden

+

Zugang zum Clusev-Panel.

+
+ +
- + - @error('email')

{{ $message }}

@enderror + class="{{ $field }}" placeholder="admin@clusev.local" /> + @error('email')

{{ $message }}

@enderror
- + - @error('password')

{{ $message }}

@enderror + class="{{ $field }}" placeholder="••••••••" /> + @error('password')

{{ $message }}

@enderror
-
diff --git a/resources/views/livewire/auth/password-change.blade.php b/resources/views/livewire/auth/password-change.blade.php index dc24ab5..994fcb1 100644 --- a/resources/views/livewire/auth/password-change.blade.php +++ b/resources/views/livewire/auth/password-change.blade.php @@ -1,31 +1,38 @@ -
-

Passwort ändern

-

Lege ein eigenes Passwort fest (min. 12 Zeichen, Groß-/Kleinschreibung + Zahl).

+@php + $field = 'h-11 w-full rounded-md border border-line bg-inset px-3 font-mono text-sm text-ink placeholder:text-ink-4 focus:border-accent/40 focus:outline-none'; + $label = 'mb-1.5 block font-mono text-[11px] uppercase tracking-wider text-ink-3'; + $err = 'mt-1.5 flex items-center gap-1.5 font-mono text-[11px] text-offline'; +@endphp -
+
+
+

Sicherheit

+

Passwort ändern

+

Lege ein eigenes Passwort fest (min. 12 Zeichen, Groß-/Kleinschreibung + Zahl).

+
+ +
- - - @error('current')

{{ $message }}

@enderror + + + @error('current')

{{ $message }}

@enderror
- - - @error('password')

{{ $message }}

@enderror + + + @error('password')

{{ $message }}

@enderror
- - + +
- + + + Speichern & weiter + Speichere… +
diff --git a/resources/views/livewire/auth/two-factor-challenge.blade.php b/resources/views/livewire/auth/two-factor-challenge.blade.php index 8085a12..c007d9d 100644 --- a/resources/views/livewire/auth/two-factor-challenge.blade.php +++ b/resources/views/livewire/auth/two-factor-challenge.blade.php @@ -1,19 +1,34 @@ -
-

Zwei-Faktor-Bestätigung

-

Gib den 6-stelligen Code aus deiner Authenticator-App ein.

+@php + $field = 'h-14 w-full rounded-md border border-line bg-inset text-center font-mono text-2xl font-semibold tracking-[0.5em] text-ink caret-accent placeholder:text-ink-4 focus:border-accent/40 focus:outline-none'; + $label = 'mb-1.5 block font-mono text-[11px] uppercase tracking-wider text-ink-3'; + $err = 'mt-1.5 flex items-center gap-1.5 font-mono text-[11px] text-offline'; +@endphp -
+
+
+

Zwei-Faktor

+

Bestätigung

+

6-stelliger Code aus deiner Authenticator-App.

+
+ +
- - - @error('code')

{{ $message }}

@enderror + + + @error('code')

{{ $message }}

@enderror
- + + + Bestätigen + Prüfe… + + +
diff --git a/resources/views/livewire/auth/two-factor-setup.blade.php b/resources/views/livewire/auth/two-factor-setup.blade.php index 7cda438..f1c9064 100644 --- a/resources/views/livewire/auth/two-factor-setup.blade.php +++ b/resources/views/livewire/auth/two-factor-setup.blade.php @@ -1,30 +1,38 @@ -
-

Zwei-Faktor einrichten

-

Scanne den Code mit einer Authenticator-App (Aegis, Google Authenticator, …) und bestätige mit einem Code.

+@php + $field = 'h-14 w-full rounded-md border border-line bg-inset text-center font-mono text-2xl font-semibold tracking-[0.5em] text-ink caret-accent placeholder:text-ink-4 focus:border-accent/40 focus:outline-none'; + $label = 'mb-1.5 block font-mono text-[11px] uppercase tracking-wider text-ink-3'; + $err = 'mt-1.5 flex items-center gap-1.5 font-mono text-[11px] text-offline'; +@endphp -
-
+
+
+

Zwei-Faktor

+

Einrichten

+

Scanne den Code mit einer Authenticator-App (Aegis, Google Authenticator, …) und bestätige mit einem Code.

+
+ +
+
2FA-QR-Code
+
+

Geheimnis (manuell)

+

{{ $secret }}

+
-
-

Geheimnis (manuell)

-

{{ $secret }}

-
- -
+
- - - @error('code')

{{ $message }}

@enderror + + + @error('code')

{{ $message }}

@enderror
- + + + Aktivieren + Prüfe… +
diff --git a/resources/views/livewire/files/index.blade.php b/resources/views/livewire/files/index.blade.php index 242b06c..3808a99 100644 --- a/resources/views/livewire/files/index.blade.php +++ b/resources/views/livewire/files/index.blade.php @@ -37,7 +37,7 @@ @if (! $loop->first) / @endif - @else - + @endif
@@ -119,10 +119,10 @@ {{-- Row actions --}}
@unless ($isDir) - Download - Bearbeiten + Download + Bearbeiten @endunless - Löschen + Löschen
@endforeach diff --git a/resources/views/livewire/servers/show.blade.php b/resources/views/livewire/servers/show.blade.php index d123616..51cfe8d 100644 --- a/resources/views/livewire/servers/show.blade.php +++ b/resources/views/livewire/servers/show.blade.php @@ -205,7 +205,7 @@

{{ $key['fingerprint'] }}

- +
diff --git a/resources/views/livewire/services/index.blade.php b/resources/views/livewire/services/index.blade.php index c3e7cc3..8e64ea3 100644 --- a/resources/views/livewire/services/index.blade.php +++ b/resources/views/livewire/services/index.blade.php @@ -70,9 +70,9 @@ {{-- R5: wire to wire-elements/modal --}}
- Starten - Stopp - Neustart + Starten + Stopp + Neustart
diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php deleted file mode 100644 index 26e294a..0000000 --- a/resources/views/welcome.blade.php +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - {{ config('app.name', 'Laravel') }} - - @fonts - - - @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot'))) - @vite(['resources/css/app.css', 'resources/js/app.js']) - @else - - @endif - - -
- @if (Route::has('login')) - - @endif -
-
-
-
-

Let's get started

-

With so many options available to you,
we suggest you start with the following:

- - - -

- v{{ app()->version() }} - - View changelog - - - - -

-
-
- {{-- Laravel Logo --}} - - - - - - - - - - - {{-- 13 --}} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - @if (Route::has('login')) - - @endif - - diff --git a/rules.md b/rules.md index 468100a..f8811af 100644 --- a/rules.md +++ b/rules.md @@ -22,6 +22,8 @@ - [ ] **R10** — Reused existing `@theme` tokens + Blade components (no ad-hoc colors/widgets). - [ ] **R11** — Records exposed in URLs are addressed by **UUID**, never the integer PK. - [ ] **R12** — every touched page loads in a **browser** at **HTTP 200** with **zero console errors** (the **loaded** state of `wire:init` pages, not just the skeleton). +- [ ] **R13** — route **paths + names are English** (`/settings`, not `/einstellungen`); German only in the visible label. +- [ ] **R14** — fonts are **self-hosted locally** (`resources/fonts/*.woff2` bundled by Vite + `@font-face` in `app.css`) — **no Google Fonts / CDN `` or `@import`**. - [ ] **Secrets** — `git status` shows **no** `.env*`, token, key, or home-dir dotfile staged. --- @@ -393,6 +395,37 @@ Route::get('/dateien', ...); // → use /files --- +## R14 — Fonts are self-hosted locally, never loaded from a CDN + +**Why.** A self-hosted control plane runs in private/air-gapped networks and must not leak +requests to third parties or break when the internet is unreachable. Every font ships **with the +app** — `.woff2` files in `public/fonts/`, declared via `@font-face` in `resources/css/app.css`. +**No** ``, no `@import url(...)` from a CDN, no `fonts.gstatic.com`. + +✅ **Correct** +```css +/* resources/css/app.css — local file in resources/fonts/, bundled + hashed by Vite + (relative url so it resolves on the Vite dev server AND in the prod build) */ +@font-face { + font-family: 'Space Grotesk'; + font-weight: 300 700; + font-display: swap; + src: url('../fonts/space-grotesk.woff2') format('woff2'); +} +``` +> Use a **relative** `url('../fonts/…')` (not `/fonts/…`): an absolute path resolves against the +> Vite dev-server origin in dev → 404. Relative lets Vite resolve + emit the asset for both modes. + +❌ **Forbidden** +```html + +``` +```css +@import url('https://fonts.googleapis.com/css2?family=Chakra+Petch'); /* ❌ CDN import */ +``` + +--- + ## Appendix — Secret hygiene The project lives in `/home/nexxo/clusev` (its own git repo). The Gitea push token lives in