CluPilotCloud/resources/views/components/ui
nexxo 2a97d76b2d Rebuild the settings page out of panels and rows
**The withdrawal was invisible in two different ways.** It rendered only
while the fourteen days were still running, so the moment they expired the
whole block vanished — indistinguishable from a feature nobody built. And
the account it was looked for on has no contract at all: no package, no
subscription, nothing to withdraw from, so there was never anything for it
to be about.

It is now a row for every CONSUMER who has a contract, open or not: while
it runs, the deadline and the button; afterwards, the sentence saying why
it is over. A business never sees it — WithdrawalRight answers that, and
Settings::withdraw() refuses them again on the server. And an account with
no package says so and offers the packages, instead of a dead sentence in
a box.

**The page is built out of two pieces now.** x-ui.panel is a group: a card
with a header that names it. x-ui.row is a setting inside it: what it is
on the left, the control on the right, dividers between rows. That is the
shape every settings page worth copying uses, and it is the shape that
uses the width — a 280px label column with the control beside it fills the
line, where a stack of full-width inputs leaves two thirds of it empty and
a grid of cards of different heights walks down the screen as a staircase.

All four tabs are rebuilt on it, so the page reads as one designed thing
rather than four pages that happen to share a tab bar. Below `sm` the rows
stack, because on a telephone a label belongs above its field.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 17:38:57 +02:00
..
alert.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
badge.blade.php Restart a machine, enforce the quota that was sold, end a route that ended 2026-07-29 18:28:28 +02:00
brand.blade.php Give people a way back in, and put the URL in English 2026-07-29 16:50:29 +02:00
button.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
card.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
chart.blade.php feat(dashboard): rich overview with Chart.js (customer-portal template) 2026-07-25 07:59:19 +02:00
checkbox.blade.php feat(admin): a console for creating, pricing and scheduling plans 2026-07-26 12:41:51 +02:00
delivery.blade.php Quote what a person pays, and tab the settings page 2026-07-29 19:18:10 +02:00
icon.blade.php List issued invoices in the console, with no way to change one 2026-07-29 02:21:15 +02:00
input.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
logo.blade.php feat(brand): CluPilot logo mark + SVG favicon across layouts 2026-07-25 15:31:33 +02:00
metric.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
modal.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
nav-item.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
otp-input.blade.php Give the console a front door of its own 2026-07-28 11:45:22 +02:00
panel.blade.php Rebuild the settings page out of panels and rows 2026-07-30 17:38:57 +02:00
progress-stepper.blade.php feat(portal): Fortify auth + Login/2FA/Dashboard + component kit 2026-07-25 01:20:25 +02:00
ring.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
row.blade.php Rebuild the settings page out of panels and rows 2026-07-30 17:38:57 +02:00
spark.blade.php Measure what the template draws 2026-07-27 16:29:28 +02:00
stat-tile.blade.php feat(portal): Fortify auth + Login/2FA/Dashboard + component kit 2026-07-25 01:20:25 +02:00