Curva DS v2 — MANDATORY rule
User directive 2026-05-04 (r_goto): all future Curva work (COCONRobotics-Corp/Curva) MUST use Curva DS v2 components + tokens. Applies to BOTH corone workspaces.
Workspaces it applies to
Workspace Persona GitHub Curva mirror /var/www/corone.monster/Ryo eduson510 /tmp/Curva/var/www/kebahagiaan.corone.monster/Julian time7676 → eduson510 (per Curva rule) /tmp/Curva
Both workspaces share the same /tmp/Curva git mirror. Same rule, same DS v2.
✅ MUST use (Curva DS v2)
Components — import { ... } from '@/Components/Curva'
Need Use NEVER Button (CTA / action) <CButton variant="primary|secondary|ghost|danger|link" size="sm|md|lg"><button class="bg-..."> raw / <PrimaryButton> / <SecondaryButton> / <DangerButton>Form fields <CFormField> wrapping <CInput> / <CTextarea> / <CSelect>raw <input> / Jetstream form components Card <CCard>raw <div class="bg-white border ..."> Modal <CModal> / <CDialog>DialogModal.vue (legacy) Tabs <CTabs> + <CTab><a class="tab">Table action menu <CTableActionMenu> + <CDropdownItem>daisyui dropdown / dropdown-content / dropdown-end Dropdown <CDropdown> (Headless UI Menu wrapper)daisyui dropdown classes Layout shell <CAppShell> + <CSidebar> + <CPageHeader> + <CBreadcrumbs>4 legacy sidebars (1418 LOC) Status pill <CStatusPill> / <CBadge><JetBarBadge>KPI card <CKpi><JetBarStatCard>Avatar <CAvatar>raw <div class="avatar"> Empty state <CEmptyState>hand-rolled Loading <CSkeleton>hand-rolled Toast <CToast>notiwind raw Theme <CThemeToggle>manual class swap
Tokens — Tailwind classes via CSS vars
Purpose Class Value Brand (primary CTA) bg-curva-brand-500 / text-curva-brand-{50..900}oklch(67% 0.19 145) ≈ 06C755 (LINE green)Text text-curva-text / text-curva-text-mute / text-curva-text-faintlayered greys Background bg-curva-bg-page / bg-curva-bg-surface / bg-curva-bg-raised / bg-curva-bg-sunkendepth scale Border border-curva-border / border-curva-border-strong2 levels Semantic bg-curva-success (= brand-kin) / bg-curva-warning / bg-curva-dangergreen/orange/red Info BANNER ONLY bg-curva-info / text-curva-infoblue oklch(64% 0.13 240) — NOT for CTA Radius rounded-curva-sm|md|lg|xl|2xl|pillscale Shadow shadow-curva-sm|md|lg|xlscale Transition duration-curva-fast|base|slow ease-curva-out120/180/280ms
❌ FORBIDDEN
bg-blue-* / bg-gray-800 / hex color literals as CTA — use <CButton variant="primary"> or token
bg-curva-info as CTA — info banner color, not CTA. CRV-55 fixed 12 screens that misused this. Use bg-curva-brand-500 for primary CTA.
daisyui classes: dropdown / dropdown-content / dropdown-end / dropdown-top / menu / btn / card / collapse / drawer — daisyui plugin REMOVED in CRV-35, all classes orphan + break positioning
Legacy buttons: <PrimaryButton> / <SecondaryButton> / <DangerButton> / <Button> — all marked @deprecated
Legacy wrappers: <JetBarStatCard> / <JetBarBadge> / <JetBarIcon> / <JetBarSimplePagination> — replace with C* equivalents
Hardcoded colors in new components (color-mix, oklch(...) literals, hex) — go through tokens
Coverage state (post CRV-55 PR #1046, 2026-05-04)
Metric Count % Total Vue pages 233 100% Pages using DS v2 components 20 8.6% Pages using DS tokens 198 85% Pages still on legacy bg-curva-info CTA 56 24% Pages still on legacy buttons 92 40% Pages still on JetBar wrappers 152 65%
CRV-35 plan: ~5 of 13 dev-days complete. P5 (top 20 page migration) + P6 (a11y + axe + Lighthouse + daisyui dep removal) remain.
Workflow when picking up a new Curva ticket
First : check if the touched page uses DS v2. If not, migrate UI surface to DS v2 (see component table above).
Then implement the feature/fix.
Never add legacy components to a NEW page.
Never add bg-curva-info as CTA color.
Verify: npm run lint 0 errors, npm run build green.
Sub-task → CRV-35 if migration is significant; standalone CRV-XX if feature is independent.
Reference
Components: /tmp/Curva/resources/js/Components/Curva/
Barrel export: /tmp/Curva/resources/js/Components/Curva/index.ts
Tokens: /tmp/Curva/resources/css/curva-tokens.css
Tailwind config: /tmp/Curva/tailwind.config.js
In-app preview: /design-system route
Parent ticket: CRV-35
This-pass cleanup: CRV-55 PR #1046
concepts/corone-design-system.md — Corone Quiet-Premium DS (sibling, applies to corone-monster repo, not Curva)
concepts/curva-github-practice.md — Curva branch + commit + PR rules
concepts/ci-cd-must-pass-before-merge.md — merge gate