# Plan 75: AIOS Admin — dwa tryby UI (Podstawowy / Pełny), ekran „Witaj” i nowa paleta

**Status:** YOLO-ready (gate: decyzja właściciela o palecie i o częstości powitania — P75.0) · **Data:** 2026-09-03 · **Skala:** S (`/planuj --quick`) · **Rodzic:** [`plans/74`](74-aios-admin-panel.md) (Astro SSR `apps/admin`, RBAC, plansze Sesja 03.09) · **SoT produktu:** [`plans/59`](59-aion-web-dev-aios.md)
**Handoff:** `/yolo-implementuj plan 75` od P75.0 · **Repo:** `/var/www/aios-core` (`design/`, `docs/`, `apps/admin`)

**Werdykt jednolinijkowy:** tryb Podstawowy to **filtr nad tym samym IA** (`data-mode` na `<html>`, ortogonalny do `data-theme`), nie drugi zestaw stron; preferencja trybu żyje w Directusie na użytkowniku (cookie tylko jako lustro dla SSR), domyślnie per rola; ekran `/admin/witaj` = jedna trasa SSR z animowanym powitaniem **i** kafelkami wyboru na tej samej stronie, pokazywana przy braku preferencji (first-run) z przełącznikiem „pokazuj przy każdym logowaniu” dla właściciela; nowa paleta = podmiana **dwóch bloków tokenów** w 12 istniejących planszach (nazwy z kontraktu bez zmian), lint 12/12 jako bramka.

---

## 0. Allowed Facts (grounding, 2026-09-03)

| # | Fakt | Źródło | Świeżość |
|---|---|---|---|
| F1 | 12 widoków admina; Directus zostaje edytorem treści | `aios-core/docs/admin-ui-views.md` §1–2 | LIVE |
| F2 | Persony operator / owner / member / self-host; „to samo IA w obu trybach aion\|standalone” | `admin-ui-views.md` §0 | LIVE |
| F3 | RBAC: member bez Moduły/Tracking/Usage/Build/Eject; owner bez Chaos seed, Tor B/C, `DIRECTUS_*` | `plans/74` §1 | LIVE |
| F4 | Astro 7 SSR `apps/admin`, islands Preact; `ci:no-nuxt`; admin w paczce eject | `plans/74` D1 | LIVE |
| F5 | Auth = Directus; preferencje użytkownika **nie mają miejsca w modelu** — `schema.snapshot.json` nie ma pól na `directus_users` | `plans/74` D3; `aios-core/schema/schema.snapshot.json` (fields dla `directus_users` = 0) | LIVE (sprawdzone 09:55) |
| F6 | Shell: menu systemu 244/64 lewo, AionLine 56/200 prawo (tylko `aion`), topbar bez dzwonka/profilu | `aionflow-hub/design/AIONLINE-CONTRACT.md` | LIVE |
| F7 | Kontrakt 20 tokenów; hex tylko w `:root` i `[data-theme="operator"]`; `--accent-*` ≠ `--warn/--critical/--ok/--teal`; test desaturacji | `aios-core/design/BRIEF-SESJA-03.09.md` §2 | LIVE |
| F8 | Anty-slop: kolor = stan; cisza jako OK; ruch ≤ 140 ms tylko hover/focus/skeleton; zero glow/gradient/blur/pill/emoji/hero | BRIEF §4 | LIVE |
| F9 | Paleta Sesji 03.09 (odrzucona estetycznie): jasny `--bg #f3f1ec`, `--accent-op #4a3208` (miód), ciemny `--bg #15171b`, `--accent-op #f7cd78` | `aios-core/design/README.md` | LIVE |
| F10 | Marka www: `#0A0B0D` / ink `#EDE8DA` / terra `#E8784A` / lime `#B6E04A`; zakaz kopiowania hexów marketing ↔ hub | `aion-marketing.pl/astro/src/styles/tokens.css`; `hub/client/design/ANTI-SLOP-MARKETING.md` | LIVE |
| F11 | Hub: `aion.css --accent #E0A340`; `tokens.css --accent-op = --warn` (wada zdiagnozowana w v2) | `aion-ui/assets/css/aion.css`; hub prompt v2 §1 | LIVE |
| F12 | Wzorzec powitania imieniem istnieje (`welcomeName`, hub `index.vue:188`); hub v2: „welcome overlay przy pierwszej wizycie” | `aionflow-hub/pages/index.vue`; prompt v2 §6.1 | LIVE |
| F13 | 12 plansz przechodzi `design-lint` 12/12; tokeny ujednolicone; zmiana palety = podmiana 2 bloków | `aios-core/design/README.md`; `scripts/design-lint.mjs` | LIVE |
| F14 | Mobile: tylko Puls + Blockery + akcje | `admin-ui-views.md` §4 | LIVE |
| F15 | Directus `:8155` health `ok`; kolekcje: articles, authors, globals, pages, redirects, tracking_config, usage_log | `curl :8155/server/health` | LIVE 09:55 |

## 1. Pytania badawcze → digest

| Q | Pytanie | Wynik |
|---|---|---|
| Q1 | Dwa tryby = osobne strony, ukryte sekcje czy filtr nawigacji? | [WEB] NN/G: ujawniaj z góry to, co częste; >2 poziomy = spadek użyteczności. [WEB] Koder.ai (admin tools): sortuj wg częstotliwość × ryzyko; **signposting** — ukryta funkcja musi zostawić ślad read-only, inaczej użytkownik zakłada, że narzędzie tego nie umie; gating przez uprawnienia, nie samo ukrywanie. [WEB] Agentic UX „Progressive Disclosure Modes”: segmented control Simple/Advanced, default per rola, override per user, persist user + workspace. [WEB] uBlock: „never start users in advanced mode”, ten sam codebase. |
| Q2 | Animowane powitanie po każdym logowaniu — koszt? | [WEB] kompassify 2026 / usertourkit: welcome = **first-run**, każdy dodatkowy ekran „spends motivation”; stoper login → realny ekran < 30 s; skip obowiązkowy (WCAG 2.1.2; Asana +23 % completion). [WEB] Android guide: powtarzalne interstitiale = ryzyko utraty. [WEB] MFA11y/OpenReplay: `prefers-reduced-motion` → crossfade zamiast ruchu przestrzennego; SSR pierwszy render zakłada `reduce`. |
| Q3 | Nowa paleta bez beżu, spójna z marką, zgodna z F7/F8 | [WEB] Radix Colors: 12-stopniowe skale, 6 szarości (gray/mauve/slate/sage/olive/sand), kroki 1–2 tło, 11–12 tekst z gwarancją kontrastu; aliasy semantyczne. Fakty F9–F11: beż/miód odrzucony, marketing = czerń + terra, hub = bursztyn (kolizja z warn). |
| Q4 | Gdzie trzymać preferencję trybu | [WEB] Orbix: preferencje per user w DB (sesje, urządzenia); localStorage tylko dla efemerycznego stanu UI. F5: brak pola — trzeba dołożyć. |

Pętla wzorców GitHub (Exa) i You.com — **pominięte** w skali S (exclusion report §7).

## 2. Debata — adjudykacja

Panel: Głos A (ryzyka/utrzymanie, Composer), Głos B (architektura, Fable), Głos C (produkt/klient, Gemini). Sędzia: model sesji. Bridge (gpt-5.6-sol, claude-opus-5) niedostępny — patrz §7.

| Konflikt | Stanowiska | Werdykt sędziego | Conf. |
|---|---|---|---|
| Osobne strony vs filtr | A: (iii) filtr nawigacji + (ii) ukryte sekcje, odrzuć (i) fork stron (0,88). B: `data-mode` ortogonalny do `data-theme`, filtr nad IA (0,9). C: zgodny. | **Filtr `data-mode` + signposting.** Zero drugiego drzewa komponentów. Argument rozstrzygający: koszt utrzymania 12 widoków ×2 + F2 „to samo IA”. | 0,9 |
| Powitanie przy każdym logowaniu (żądanie właściciela) vs first-run (research) | A, B, C jednogłośnie: first-run + skip; B: warunek pokazania = brak preferencji (eliminuje flagę `first_run`). | **First-run jako default + preferencja właściciela `aios_welcome = first \| always \| never`.** Właściciel może mieć powitanie zawsze; klienci domyślnie raz. Kafelki i napis na **jednej** trasie `/admin/witaj`, nie dwa interstitiale. Dobrze uargumentowane (A, B, C) i udowodnione ([WEB] ×3). | 0,85 |
| Animacja vs F8 (ruch ≤ 140 ms tylko hover/focus/skeleton) | B: literalne naruszenie, wymaga aneksu do BRIEF; C: animacja = skeleton rozwiązujący się do „Witaj, Imię” (1,0). A: ≤ 140 ms, reduce → crossfade. | **Aneks BRIEF §4a**: wyjątek scoped do `/admin/witaj`: jedna sekwencja one-shot ≤ 600 ms łącznie (3 linie, każda ≤ 140 ms, opacity + translateY 6 px), bez pętli/glow/typewritera; `reduce` → crossfade 140 ms; SSR renderuje stan końcowy (brak JS = brak ruchu, treść widoczna). Trzecia linia niesie **treść** (mono: `puls sprawny · gate 4 blockery · build 12 min`), żeby ruch nie był dekoracją. | 0,8 |
| Nazwy trybów | C: „Widok podstawowy” / „Widok pełny” (nie „prosty/zaawansowany” — protekcjonalne/żargon). | **Podstawowy / Pełny.** | 0,85 |
| Przełącznik trybu — gdzie | B: stopka menu 244/64 + Ustawienia, nie topbar (F6). | Zgoda z B. | 0,8 |
| Persistencja | A: nie localStorage, wymaga rozszerzenia D3. B: Directus user + cookie-lustro dla SSR, default per rola. C: DB per user. | **Pola na `directus_users`** (`aios_ui_mode`, `aios_welcome`) + cookie `aios_mode` jako lustro (Path=/admin). Default: member/owner → `basic`, operator → `full`. Schemat w paczce eject. | 0,85 |
| Akcent | C: rust dla `--accent-op` **i** `--accent-cl`. B/F7: `accent-op ≠ accent-cl` (role). | F7 wygrywa: dwa akcenty rozróżnialne; rust tylko dla operatora, klient chłodny. Sprzeciw C → rejestr. | 0,8 |

**Rejestr sprzeciwu:** (1) C — jeden akcent dla obu ról: odrzucone kontraktem F7; (2) B — animacja powinna wylecieć, jeśli właściciel nie podpisze aneksu: przyjęte jako **kill criterion** P75.1; (3) A — segmented control conf. 0,76 „bo brak persistencji”: rozwiązane przez D2.

## 3. Decyzje (wiążące)

| # | Decyzja |
|---|---|
| D1 | `<html data-theme="…" data-mode="basic\|full">`. `data-theme` = wyłącznie kolor; `data-mode` = widoczność/gęstość. Selektory `[data-mode]` **nie mogą** zawierać wartości koloru ani deklarować tokenów (rozszerzenie `design-lint`). |
| D2 | Preferencje na `directus_users`: `aios_ui_mode` (`basic\|full\|null`), `aios_welcome` (`first\|always\|never`, default `first`). Resolver SSR: pref → cookie-lustro → default per rola. Fragment schematu w `schema/` i w paczce eject. |
| D3 | RBAC (plan 74) decyduje, co **istnieje**; tryb decyduje, co jest **widoczne domyślnie**. Member w trybie Pełnym nadal nie widzi Build/Eject. |
| D4 | Tryb Podstawowy = menu: **Start (Puls podstawowy) · Treść · SEO · Obrazy · Ustawienia**; w Pulsie podstawowym: 3 kafle statusu (Strona, Treść do wydania, SEO) + lista blockerów z deep-linkami + 1 akcja (`Otwórz Directus`) + **wiersz signposting** read-only dla ukrytych modułów („Build: ok · 12 min · Tracking: skonfigurowany · Usage: 74 %”) z linkiem „Pokaż widok pełny”. |
| D5 | `/admin/witaj`: jedna trasa SSR; nagłówek animowany (D-aneks) + 2 kafelki (`Widok podstawowy` — zalecany dla większości; `Widok pełny` — konfiguracja, build, usage, eject) + `Pomiń` (zapisuje default roli). Kafelki = `<form method="post">`, zero islands. Pokazywana gdy `aios_ui_mode == null` **lub** `aios_welcome == always`. Link „Pokaż ekran powitalny ponownie” w Ustawieniach. |
| D6 | Paleta: **2 kandydaci na planszy porównawczej**, decyzja właściciela, potem podmiana 2 bloków w 12 planszach (F13). Rekomendacja sędziego: **P1 Grafit + Rdza**. |
| D7 | Przełącznik trybu (segmented, jedyna nowa island) w stopce menu systemu i w Ustawieniach; topbar bez zmian (F6). |
| D8 | Bez `apps/admin-simple`, bez trzeciego motywu, bez localStorage jako źródła prawdy, bez overlaya na Pulsie (F14). |

### Kandydaci palety (proposal — hexy orientacyjne, finalne po teście kontrastu w P75.0)

| Token | P1 Grafit + Rdza (jasny) | P1 ciemny (`operator`) | P2 Grafit + Kobalt (jasny) | P2 ciemny |
|---|---|---|---|---|
| `--bg` | `#f5f6f8` | `#111318` | `#f5f6f8` | `#111318` |
| `--card` | `#ffffff` | `#181b21` | `#ffffff` | `#181b21` |
| `--surface-2` / `-3` | `#eceef1` / `#dfe3e8` | `#1f232a` / `#282d35` | jak P1 | jak P1 |
| `--line` / `--line-soft` | `#d0d5dc` / `#e4e8ed` | `#343a44` / `#262b33` | jak P1 | jak P1 |
| `--text` / `--muted` | `#16181d` / `#5c6370` | `#e6e8ec` / `#9aa3b2` | jak P1 | jak P1 |
| `--ok` / `--warn` / `--critical` | `#1f7a45` / `#9a6400` / `#b3261e` | `#5cbf86` / `#c9962f` / `#e5695f` | jak P1 | jak P1 |
| `--teal` / `--blue` / `--purple` | `#0e6f6e` / `#2f5fd0` / `#5b3d7a` | `#4fb59a` / `#8fa9e6` / `#b79ad6` | jak P1 | jak P1 |
| `--accent-op` | `#8f3312` (rdza, L≈37 vs warn L≈45) | `#ffa27a` (L≈75 vs warn L≈66) | `#1d3fbf` (kobalt) | `#9db4ff` |
| `--accent-cl` | `#1d4ed8` (chłodny błękit) | `#7fb6e0` | `#b4531f` (ciepły dla klienta) | `#f3a57e` |

Szarość: **Slate** (chłodna, Radix) w obu — to jest realna zmiana względem beżu F9. Różnica P1/P2 = zamiana temperatur akcentów: P1 operator ciepły (rdza, echo marki F10 bez kopiowania hexów) / klient chłodny; P2 operator kobalt / klient ciepły. Odrzucone kandydaty na `--accent-cl`: teal-podobne (kolizja z `--teal`), fiolet (`--purple` zakazany F7). Guardy z F7 (accent ≠ warn/critical/ok/teal, desaturacja) sprawdzane lintem w P75.0.

## 4. Fazy realizacji (P75) — verify×3

Zależności: P75.0–P75.2 = warstwa designu, niezależne od kodu; P75.3–P75.5 po **P74.1** (scaffold `apps/admin`).

### P75.0 — Paleta: plansza porównawcza + decyzja + podmiana (S) — GATE właściciela
- [ ] Plansza `design/Sesja 03.09/AIOS — 00b Paleta kandydaci.dc.html`: P1 i P2 × jasny/ciemny na tym samym fragmencie Pulsa (kafle, tabela, CTA, badge warn) + pasek desaturacji + tabela kontrastów AA. Generator: Fable wg BRIEF (jak Sesja 03.09).
- [ ] Decyzja właściciela: P1 / P2 / korekta. Równolegle decyzja: `aios_welcome` default dla operatora (`always` czy `first`).
- [ ] Podmiana bloków `:root` i `[data-theme="operator"]` w 12 planszach (skrypt jak przy ujednoleniu) → `npm run design:lint` → smoke render 3 plansz przez Aion Browser.
- **Verify:** `node scripts/design-lint.mjs "design/Sesja 03.09"` → `13/13 plików czystych` ×3; `rg -c '#f3f1ec|#4a3208|#f7cd78' design/Sesja\ 03.09/*.dc.html` → 0 (stara paleta zniknęła); zrzuty 3 plansz bez przycięć.
- **Kill:** lint wykrywa `--accent-op == --warn` lub desaturacja < 10 pkt L → kandydat wraca.

### P75.1 — Aneks kontraktu: tryby + powitanie + lint (S)
- [ ] `BRIEF-SESJA-03.09.md` §4a „Wyjątek: `/admin/witaj`” (D-aneks) i §8 „Tryby Podstawowy/Pełny” (D1, D4, D7); `docs/admin-ui-views.md` §1: atrybut `data-mode`, tabela „widok → tier basic/full → co zostaje jako signposting”.
- [ ] `scripts/design-lint.mjs`: reguła „selektor `[data-mode` nie zawiera `#`, `rgb(`, `hsl(`, `color-mix(` ani `--<token>:`”; reguła „`@keyframes` poza skeletonem tylko w pliku `Witaj`”.
- **Verify:** lint z wstrzykniętym `[data-mode="basic"]{color:#000}` do pliku testowego w `/tmp` → FAIL ×3; bez wstrzyknięcia → PASS.
- **Kill (B):** właściciel nie akceptuje aneksu → animacja wylatuje, `/admin/witaj` zostaje statyczny (reszta planu bez zmian).

### P75.2 — Plansze: Witaj + Puls podstawowy + menu podstawowe (M)
- [ ] `AIOS — Witaj.dc.html`: 01 jasny owner · 02 ciemny operator · 03 stany (reduce-motion = końcowy stan, brak imienia = „Witaj”, błąd zapisu preferencji) · 04 mobile 390 · 05 spec (sekwencja czasowa 3 linii ≤ 600 ms, treść linii 3 z realnych statusów).
- [ ] `AIOS — Puls podstawowy.dc.html`: 01/02 desktop z menu 5 pozycji + wiersz signposting + stopka z segmented `Podstawowy | Pełny`; 03 stany; 04 mobile; 05 spec (mapa: co z Pulsa pełnego zostało, co poszło do signpostingu).
- [ ] Artboard „Ustawienia → Widok” (sekcja preferencji: tryb, powitanie, „pokaż ekran powitalny ponownie”) dopisany do `AIOS — Ustawienia.dc.html`.
- **Verify:** `design:lint` 15/15 ×3; oba nowe pliki ≥ 60 KB, ≥ 5 artboardów; zrzut mobile Witaj: kafelki ≥ 44 px wysokości (test DOM przez Aion Browser).

### P75.3 — Model preferencji w Directusie (S) — po P74.1
- [ ] Fragment schematu `schema/fragments/aios-user-prefs.json`: pola na `directus_users`: `aios_ui_mode` (string, choices basic/full, nullable), `aios_welcome` (string, choices first/always/never, default `first`). Import do snapshotu + do paczki eject (`scripts/aios-eject.mjs` kopiuje `schema/`).
- [ ] `apps/admin/src/lib/prefs.ts`: `resolveMode(user, cookie)` → `basic|full`; `shouldShowWelcome(user)`; zapis przez `@directus/sdk` `updateMe`; cookie `aios_mode` `Path=/admin; SameSite=Lax; HttpOnly`.
- **Verify:** `curl :8155/fields/directus_users` zawiera oba pola ×3; test jednostkowy `node --test apps/admin/test/prefs.test.mjs`: default member→basic, operator→full, pref>cookie>default; eject ZIP zawiera fragment (`unzip -l | rg aios-user-prefs`).

### P75.4 — Implementacja: `data-mode`, filtr menu, `/admin/witaj`, przełącznik (M)
- [ ] `AdminLayout.astro`: `<html data-mode={mode}>`; `nav.ts`: każda pozycja ma `tier: 'basic'|'full'` i `roles[]`; render = RBAC ∧ tier.
- [ ] `pages/witaj.astro` (SSR): nagłówek 3 linie (imię z Directusa, F12; linia 3 z `/admin/api/health`), 2 kafelki `<form method="post" action="/admin/api/prefs">` + `Pomiń`; CSS one-shot wg aneksu; `@media (prefers-reduced-motion: reduce)` → crossfade.
- [ ] `middleware.ts`: po loginie → `shouldShowWelcome ? /admin/witaj : /admin/`; nigdy pętla (po POST pref ustawiona).
- [ ] Puls: wariant `basic` = 3 kafle + blockery + 1 akcja + `SignpostRow` (read-only, dane z `/admin/api/health` i usage).
- [ ] `ModeSwitch` (Preact island): segmented w stopce menu i w Ustawieniach → POST prefs → reload.
- **Verify:** login member bez pref → 302 `/admin/witaj` → POST `basic` → 302 `/admin/` z `<html data-mode="basic">` i 5 pozycjami menu ×3; ponowny login → brak `/admin/witaj`; operator z `aios_welcome=always` → zawsze `/admin/witaj`; `curl` HTML Pulsa basic zawiera `class="signpost-row"` z „Build” i „Usage”; member w trybie `full` nie ma linku `/admin/build` (RBAC) ×3.

### P75.5 — Jakość: a11y, ruch, eject (S)
- [ ] Test reduce-motion: Aion Browser + CDP `Emulation.setEmulatedMedia({features:[{name:'prefers-reduced-motion',value:'reduce'}]})` → brak `transform` w computed style linii powitania.
- [ ] Lighthouse a11y ≥ 95 na `/admin/witaj` i `/admin/` (basic i full).
- [ ] Eject smoke: `npm run eject` → paczka uruchamia `apps/admin` w `standalone`, login self-host → `/admin/witaj` raz, potem Puls; brak requestów `*.aionflow.pl` (`runExitHarness` na `apps/admin/dist` PASS).
- **Verify:** trzy komendy powyżej ×3 z zapisanym outputem w `docs/verify/75-*.log`.

## 5. Kryteria akceptacji całości
- [ ] Jedna baza kodu; `rg -l "admin-simple|SimplePuls" apps/` → 0.
- [ ] `data-mode` nie wnosi koloru (lint), `design:lint` 15/15.
- [ ] Powitanie: first-run default; właściciel może ustawić `always`; nigdy pętla; skip zawsze widoczny; login → Puls < 30 s bez interakcji poza kafelkiem.
- [ ] Tryb Podstawowy: 5 pozycji menu, signposting dla 4 ukrytych modułów, RBAC nienaruszony.
- [ ] Paleta: brak hexów F9 w planszach; brak hexów marketingu F10 (`rg -c '#0A0B0D|#E8784A|#B6E04A'` → 0); accent ≠ warn po desaturacji.

## 6. Pre-mortem (sygnały wczesne = checkpointy)
1. **Fork IA przez tylne drzwi** — ktoś dodaje `PulsBasic.astro` zamiast wariantu w tym samym pliku → sygnał: PR z nowym plikiem `*Basic*`/`*Simple*` (P75.4 review).
2. **Trzeci motyw** — kolor w `[data-mode]` → lint czerwony (P75.1).
3. **Welcome w pętli** u self-hosta bez fragmentu schematu → sygnał: eject smoke (P75.5) 302 → 302.
4. **Flash trybu** — SSR `data-mode` ≠ po hydracji → ktoś czyta localStorage; sygnał: test „HTML z curl == DOM po load”.
5. **Animacja rośnie** (pętla, glow, typewriter) → lint `@keyframes` poza Witaj/skeleton; wizualny kill.
6. **Paleta P1 zlewa rdzę z warn w ciemnym** → desaturacja < 10 pkt L → wraca do P75.0.
7. **Signposting jako śmietnik** — wiersz > 4 pozycji → limit twardy 4 w komponencie.
8. **Właściciel chce powitania zawsze, klienci narzekają** — `aios_welcome` per user, default `first` dla ról klienta; sygnał: ticket „znowu ekran powitalny”.

## 7. Exclusion report
| Źródło | Status | Skutek |
|---|---|---|
| Bridge `127.0.0.1:8741` (gpt-5.6-sol, claude-opus-5, także alias `agentrouter/*`) | **502 Bad Gateway ×2 próby** (09:53, 09:55) | Głosy A/B zastąpione lokalnymi subagentami cross-family (Composer, Fable); Głos C = Gemini. Sędzia = model sesji (ta sama rodzina co Głos B) — punkty, gdzie B przeważył (D1, D2, D5), oflagowane conf. ≤ 0,9. |
| You.com deep | pominięte (skala S, budżet) | brak |
| Exa pętla wzorców GitHub | pominięta (skala S) | wzorce oparte na [WEB] (NN/G, Koder, Agentic UX, Radix, uBlock) |
| KB `querySEO/queryPPC` | nietrafne tematycznie (UI admina) | brak |
| Dream atoms / Discovery | brak scope klienta | brak |

## 7b. Status
- 2026-09-03 10:16–10:43: Claude Design **PROMPT0 + K01–K03 DONE** (Fable 5.1) — projekt `https://claude.ai/design/p/a47ecb7b-159c-4e73-afec-6715d41c9101`.
- 2026-09-04 00:07: **LIVE** host statusowy [`https://aios.aionflow.pl/`](https://aios.aionflow.pl/) — galeria plansz (`/boards` Sesja 03.09, `/claude` export: DS v2, Paleta, Witaj, Puls podstawowy). Ustawienia Widok tylko w Claude Design (export CDP crash). Kod nadal `/var/www/aios-core`; `apps/admin` = proposal (plan 74). GATE P75.0: decyzja palety P1/P2 na `/claude/00b-paleta-kandydaci.html`.
- 2026-09-04 00:22: właściciel ustawił **kierunek brand Aion Automation** (mono dark · silver · fala · halo · watermark) — superseduje P1 Rdza / K04 Warmth. Host `aios.aionflow.pl` przebudowany w tym stylu; Claude Design: K04 w toku → potem **K05** (`design/_run/K05.txt`, token `AIOS_75_DONE_5`). Referencje: `design/_run/refs/` + `/brand/` na hoście.

## 8. Poza zakresem
- Edytor tokenów w adminie (plan 74 §5); AionLine LIVE i Authentik (P74.8, LOCAL-GATED); migracja palety do hub `tokens.css` (osobna decyzja hub v2); i18n adminu.
