2023-08-29 14:31:46 +00:00
|
|
|
@extends('layouts.base')
|
|
|
|
|
@section('body')
|
|
|
|
|
@parent
|
2024-03-25 13:44:31 +00:00
|
|
|
@if (isSubscribed() || !isCloud())
|
2024-03-21 13:30:35 +00:00
|
|
|
<livewire:layout-popups />
|
|
|
|
|
@endif
|
2025-09-28 17:05:56 +00:00
|
|
|
<!-- Global search component - included once to prevent keyboard shortcut duplication -->
|
|
|
|
|
<livewire:global-search />
|
2024-03-20 11:54:06 +00:00
|
|
|
@auth
|
2024-03-27 11:45:53 +00:00
|
|
|
<div x-data="{
|
2025-11-05 07:59:05 +00:00
|
|
|
open: false,
|
2026-06-02 09:54:38 +00:00
|
|
|
collapsed: localStorage.getItem('sidebarCollapsed') === 'true',
|
2026-08-16 18:54:50 +00:00
|
|
|
pageWidth: localStorage.getItem('pageWidth') || 'full',
|
2026-06-02 09:54:38 +00:00
|
|
|
sidebarReady: false,
|
2025-11-05 07:59:05 +00:00
|
|
|
init() {
|
2026-06-02 09:54:38 +00:00
|
|
|
this.$nextTick(() => {
|
|
|
|
|
requestAnimationFrame(() => {
|
|
|
|
|
this.sidebarReady = true;
|
|
|
|
|
});
|
|
|
|
|
});
|
2026-05-06 12:56:13 +00:00
|
|
|
},
|
|
|
|
|
toggleSidebar() {
|
|
|
|
|
this.collapsed = !this.collapsed;
|
|
|
|
|
localStorage.setItem('sidebarCollapsed', this.collapsed);
|
2025-11-05 07:59:05 +00:00
|
|
|
}
|
2026-08-16 18:54:50 +00:00
|
|
|
}" @open-global-search.window="open = false" @page-width-changed.window="pageWidth = $event.detail" x-cloak
|
|
|
|
|
class="dark:text-inherit text-black">
|
2026-05-11 14:25:15 +00:00
|
|
|
<livewire:deployments-indicator />
|
2026-08-03 21:11:54 +00:00
|
|
|
|
|
|
|
|
{{-- ============ DESKTOP TOP BAR ============ --}}
|
|
|
|
|
<header
|
2026-08-12 09:32:00 +00:00
|
|
|
x-data="{ resourceActionsOpen: false }"
|
|
|
|
|
@resource-actions-toggled.window="resourceActionsOpen = $event.detail.open"
|
|
|
|
|
:class="{ 'z-[1000]': resourceActionsOpen }"
|
2026-08-16 19:00:33 +00:00
|
|
|
class="hidden lg:flex fixed top-0 inset-x-0 z-50 h-12 items-center bg-white/95 dark:bg-panel/95 backdrop-blur">
|
2026-08-03 21:11:54 +00:00
|
|
|
{{-- Brand (width tracks sidebar) --}}
|
|
|
|
|
<div class="flex items-center gap-2 h-full shrink-0 border-r border-neutral-200 dark:border-white/[0.06] transition-[width] duration-200"
|
|
|
|
|
:class="collapsed ? 'w-16 justify-center px-0' : 'w-56 px-4'">
|
|
|
|
|
<div class="flex shrink-0 items-baseline gap-1.5 min-w-0">
|
|
|
|
|
<a href="/" {{ wireNavigate() }} title="Coolify"
|
|
|
|
|
class="flex items-center hover:opacity-80 transition-opacity">
|
|
|
|
|
<img x-show="collapsed" x-cloak src="/coolify-logo.svg" alt="Coolify"
|
|
|
|
|
class="size-5" />
|
|
|
|
|
<span x-show="!collapsed" class="text-[15px] font-semibold tracking-tight text-black dark:text-white">Coolify</span>
|
|
|
|
|
</a>
|
|
|
|
|
<x-version x-show="!collapsed"
|
|
|
|
|
class="!text-[10.5px] font-medium text-neutral-400 dark:text-fg-faint !opacity-100 hover:!opacity-100 dark:hover:text-fg hover:text-black" />
|
|
|
|
|
</div>
|
|
|
|
|
@if (isInstanceAdmin() && !isCloud())
|
|
|
|
|
<div x-show="!collapsed" class="ml-auto shrink-0">
|
|
|
|
|
@persist('upgrade')
|
|
|
|
|
<livewire:upgrade />
|
|
|
|
|
@endpersist
|
|
|
|
|
</div>
|
|
|
|
|
@endif
|
|
|
|
|
</div>
|
|
|
|
|
{{-- Collapse toggle + team switcher --}}
|
2026-08-16 19:10:15 +00:00
|
|
|
<div
|
|
|
|
|
class="flex h-full items-center gap-0.5 min-w-0 flex-1 border-b border-neutral-200 pl-3 pr-4 dark:border-white/[0.06]">
|
2026-08-06 13:37:30 +00:00
|
|
|
<div class="relative flex min-w-0 flex-1 items-center">
|
|
|
|
|
<x-top-breadcrumb />
|
|
|
|
|
<div id="server-topbar-context" class="min-w-0"></div>
|
|
|
|
|
</div>
|
2026-08-03 21:11:54 +00:00
|
|
|
{{-- Dev Server-Timing HUD docks here (local only; empty in production) --}}
|
|
|
|
|
<div id="server-timing-hud-slot" data-server-timing-hud-slot class="hidden shrink-0 items-center"></div>
|
2026-08-12 14:24:01 +00:00
|
|
|
<div id="configuration-warning-hud-slot" class="relative shrink-0"></div>
|
2026-08-05 18:17:21 +00:00
|
|
|
{{-- Resource actions dock here on desktop. --}}
|
|
|
|
|
<div id="resource-action-hud-slot" class="hidden shrink-0 items-center xl:flex"></div>
|
2026-08-03 21:11:54 +00:00
|
|
|
</div>
|
|
|
|
|
</header>
|
|
|
|
|
|
feat(ui): WCAG contrast, neutral oklch surface system, and mobile nav overhaul
Design tokens
- Fix WCAG AA text failures: darken light muted text and lighten dark
tertiary text so 13-14px copy clears 4.5:1 on every surface.
- Rebuild the dark surface ladder in correct values (oklch compresses to
near-black below ~15%), giving visible steps: content, chrome, cards.
- Establish a 3-layer shell (deep content, lighter sidebar/topbar chrome,
lifted cards) with crisp hairline rings and a restrained card shadow.
- Unify every surface to one neutral temperature (pure gray); neutralize
the cool-tinted sidebar text and legacy surface tokens.
- Convert all color tokens to oklch (neutrals + brand).
- Unify inputs to the recessed token; fix invisible dark placeholders.
- One shared --shadow-dropdown for all menus/listboxes/command palette.
Settings sidebar
- Sticky contained-card rail with subtle scrollbar; collapsible sub-section
groups (active open by default), cross-page section links.
- Mobile: collapsible disclosure with animated open, outside/Escape dismiss,
press feedback, and reduced-motion support.
Mobile
- Consolidate the resource header (title + status + links on one row).
- Tighten settings-page vertical rhythm.
- Rebuild the main sidebar as an animated shadcn-style sheet (slide/fade,
Escape, scroll lock, in-panel close, close-on-navigate).
Fixes
- #11532: selected server invisible in the light-mode terminal toolbar.
Docs: update DESIGN.md tokens, shell layering, and temperature rules.
2026-09-07 02:35:56 +00:00
|
|
|
{{-- ============ MOBILE SLIDE-OVER SIDEBAR (shadcn-style sheet) ============ --}}
|
|
|
|
|
<div class="mobile-sidebar-sheet relative z-[1000] lg:hidden" role="dialog" aria-modal="true"
|
|
|
|
|
x-on:keydown.escape.window="open = false"
|
|
|
|
|
x-on:livewire:navigated.window="open = false"
|
|
|
|
|
x-effect="document.body.classList.toggle('overflow-hidden', open)">
|
|
|
|
|
{{-- Scrim: fades in/out --}}
|
|
|
|
|
<div class="fixed inset-0 bg-black/50" x-show="open" x-cloak x-on:click="open = false"
|
|
|
|
|
x-transition:enter="transition-opacity ease-out duration-300"
|
|
|
|
|
x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100"
|
|
|
|
|
x-transition:leave="transition-opacity ease-in duration-200"
|
|
|
|
|
x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"></div>
|
|
|
|
|
{{-- Panel: slides in from the right (iOS drawer curve), exits faster --}}
|
|
|
|
|
<div class="fixed inset-y-0 right-0 flex" :class="!open && 'pointer-events-none'">
|
|
|
|
|
<div x-show="open" x-cloak
|
|
|
|
|
x-transition:enter="transform transition ease-[cubic-bezier(0.32,0.72,0,1)] duration-300"
|
|
|
|
|
x-transition:enter-start="translate-x-full" x-transition:enter-end="translate-x-0"
|
|
|
|
|
x-transition:leave="transform transition ease-in duration-200"
|
|
|
|
|
x-transition:leave-start="translate-x-0" x-transition:leave-end="translate-x-full"
|
2026-09-07 04:33:37 +00:00
|
|
|
class="relative flex h-full w-72 max-w-[85vw] min-w-0 flex-col overflow-hidden rounded-l-2xl border-l border-neutral-200 bg-white shadow-[-8px_0_30px_-6px_rgba(0,0,0,0.18)] dark:border-white/[0.12] dark:bg-panel dark:shadow-[-8px_0_30px_-4px_rgba(0,0,0,0.5)]">
|
feat(ui): WCAG contrast, neutral oklch surface system, and mobile nav overhaul
Design tokens
- Fix WCAG AA text failures: darken light muted text and lighten dark
tertiary text so 13-14px copy clears 4.5:1 on every surface.
- Rebuild the dark surface ladder in correct values (oklch compresses to
near-black below ~15%), giving visible steps: content, chrome, cards.
- Establish a 3-layer shell (deep content, lighter sidebar/topbar chrome,
lifted cards) with crisp hairline rings and a restrained card shadow.
- Unify every surface to one neutral temperature (pure gray); neutralize
the cool-tinted sidebar text and legacy surface tokens.
- Convert all color tokens to oklch (neutrals + brand).
- Unify inputs to the recessed token; fix invisible dark placeholders.
- One shared --shadow-dropdown for all menus/listboxes/command palette.
Settings sidebar
- Sticky contained-card rail with subtle scrollbar; collapsible sub-section
groups (active open by default), cross-page section links.
- Mobile: collapsible disclosure with animated open, outside/Escape dismiss,
press feedback, and reduced-motion support.
Mobile
- Consolidate the resource header (title + status + links on one row).
- Tighten settings-page vertical rhythm.
- Rebuild the main sidebar as an animated shadcn-style sheet (slide/fade,
Escape, scroll lock, in-panel close, close-on-navigate).
Fixes
- #11532: selected server invisible in the light-mode terminal toolbar.
Docs: update DESIGN.md tokens, shell layering, and temperature rules.
2026-09-07 02:35:56 +00:00
|
|
|
<div data-mobile-sidebar-brand
|
|
|
|
|
class="flex h-12 shrink-0 items-center justify-between gap-1.5 border-b border-neutral-200 px-4 dark:border-white/[0.06]">
|
|
|
|
|
<div class="flex min-w-0 items-baseline gap-1.5">
|
|
|
|
|
<a href="/" {{ wireNavigate() }} title="Coolify"
|
|
|
|
|
class="text-[15px] font-semibold tracking-tight text-black transition-opacity hover:opacity-80 dark:text-white">
|
|
|
|
|
Coolify
|
|
|
|
|
</a>
|
|
|
|
|
<x-version class="!text-[10.5px] font-medium text-neutral-400 dark:text-fg-faint !opacity-100 hover:!opacity-100 hover:text-black dark:hover:text-fg" />
|
|
|
|
|
</div>
|
|
|
|
|
<button type="button" x-on:click="open = false" aria-label="Close menu"
|
|
|
|
|
class="-mr-1.5 flex size-8 shrink-0 items-center justify-center rounded-md text-neutral-500 transition-colors hover:bg-neutral-100 hover:text-black active:scale-95 dark:text-fg-dim dark:hover:bg-white/[0.06] dark:hover:text-fg">
|
|
|
|
|
<svg class="size-5" fill="none" viewBox="0 0 24 24" stroke-width="1.75"
|
2024-03-20 11:54:06 +00:00
|
|
|
stroke="currentColor" aria-hidden="true">
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
|
|
|
|
|
</svg>
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
2026-08-03 21:11:54 +00:00
|
|
|
<div class="flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto pb-2 scrollbar">
|
2024-03-20 11:54:06 +00:00
|
|
|
<x-navbar />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-08-03 21:11:54 +00:00
|
|
|
{{-- ============ DESKTOP SIDEBAR (below top bar) ============ --}}
|
|
|
|
|
<div class="hidden lg:fixed lg:top-12 lg:bottom-0 lg:left-0 lg:z-40 lg:flex lg:flex-col min-w-0"
|
2026-06-02 09:54:38 +00:00
|
|
|
:class="[collapsed ? 'lg:w-16' : 'lg:w-56', sidebarReady ? 'transition-[width] duration-200' : '']">
|
2026-08-05 18:17:21 +00:00
|
|
|
<div class="flex grow min-w-0 flex-col overflow-visible">
|
2024-03-20 11:54:06 +00:00
|
|
|
<x-navbar />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-08-03 21:11:54 +00:00
|
|
|
{{-- ============ MOBILE TOP BAR ============ --}}
|
2025-11-04 20:15:59 +00:00
|
|
|
<div
|
2026-08-03 21:11:54 +00:00
|
|
|
class="sticky top-0 z-40 flex items-center justify-between px-4 py-3 gap-x-4 sm:px-6 lg:hidden bg-white/95 dark:bg-panel/95 backdrop-blur-sm border-b border-neutral-200/60 dark:border-white/[0.06]">
|
2026-08-05 19:35:13 +00:00
|
|
|
<div class="flex min-w-0 flex-1 items-center gap-2.5">
|
|
|
|
|
<a href="/"
|
|
|
|
|
class="flex size-8 shrink-0 items-center justify-center rounded-lg bg-neutral-100 transition-opacity hover:opacity-80 dark:bg-white/[0.06]">
|
2026-08-03 21:11:54 +00:00
|
|
|
<img src="/coolify-logo.svg" alt="Coolify" class="w-[18px] h-[18px]" />
|
|
|
|
|
</a>
|
|
|
|
|
<div class="min-w-0" x-data="{ collapsed: false }">
|
|
|
|
|
<livewire:switch-team />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-08-05 19:35:13 +00:00
|
|
|
<div class="flex shrink-0 items-center gap-1">
|
2026-08-05 19:24:25 +00:00
|
|
|
{{-- Dev Server-Timing HUD docks here on <lg (desktop uses #server-timing-hud-slot) --}}
|
|
|
|
|
<div id="server-timing-hud-slot-mobile" data-server-timing-hud-slot
|
|
|
|
|
class="hidden shrink-0 items-center"></div>
|
2026-08-12 14:24:01 +00:00
|
|
|
<div id="configuration-warning-hud-slot-mobile" class="relative shrink-0"></div>
|
2026-08-19 09:41:41 +00:00
|
|
|
@if (isInstanceAdmin() && !isCloud())
|
|
|
|
|
<livewire:upgrade key="mobile-upgrade" />
|
|
|
|
|
@endif
|
2026-08-03 21:11:54 +00:00
|
|
|
<x-top-user-menu />
|
feat(ui): WCAG contrast, neutral oklch surface system, and mobile nav overhaul
Design tokens
- Fix WCAG AA text failures: darken light muted text and lighten dark
tertiary text so 13-14px copy clears 4.5:1 on every surface.
- Rebuild the dark surface ladder in correct values (oklch compresses to
near-black below ~15%), giving visible steps: content, chrome, cards.
- Establish a 3-layer shell (deep content, lighter sidebar/topbar chrome,
lifted cards) with crisp hairline rings and a restrained card shadow.
- Unify every surface to one neutral temperature (pure gray); neutralize
the cool-tinted sidebar text and legacy surface tokens.
- Convert all color tokens to oklch (neutrals + brand).
- Unify inputs to the recessed token; fix invisible dark placeholders.
- One shared --shadow-dropdown for all menus/listboxes/command palette.
Settings sidebar
- Sticky contained-card rail with subtle scrollbar; collapsible sub-section
groups (active open by default), cross-page section links.
- Mobile: collapsible disclosure with animated open, outside/Escape dismiss,
press feedback, and reduced-motion support.
Mobile
- Consolidate the resource header (title + status + links on one row).
- Tighten settings-page vertical rhythm.
- Rebuild the main sidebar as an animated shadcn-style sheet (slide/fade,
Escape, scroll lock, in-panel close, close-on-navigate).
Fixes
- #11532: selected server invisible in the light-mode terminal toolbar.
Docs: update DESIGN.md tokens, shell layering, and temperature rules.
2026-09-07 02:35:56 +00:00
|
|
|
<button type="button" x-on:click="open = !open"
|
|
|
|
|
class="-mr-1 flex size-9 items-center justify-center rounded-md text-neutral-500 transition-transform duration-100 ease-out hover:bg-neutral-100 hover:text-black active:scale-90 dark:text-fg-dim dark:hover:bg-white/[0.06] dark:hover:text-fg">
|
2026-08-03 21:11:54 +00:00
|
|
|
<span class="sr-only">Open sidebar</span>
|
2026-09-07 02:55:58 +00:00
|
|
|
<svg class="size-5" viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
|
|
|
|
<rect x="3" y="4" width="18" height="16" rx="2" stroke="currentColor" stroke-width="1.6" />
|
|
|
|
|
<path d="M9 4v16" stroke="currentColor" stroke-width="1.6" />
|
2026-08-03 21:11:54 +00:00
|
|
|
</svg>
|
|
|
|
|
</button>
|
2025-10-08 17:50:06 +00:00
|
|
|
</div>
|
2024-03-20 11:54:06 +00:00
|
|
|
</div>
|
|
|
|
|
|
2026-08-03 21:11:54 +00:00
|
|
|
{{-- ============ MAIN ============ --}}
|
|
|
|
|
<main
|
feat(ui): WCAG contrast, neutral oklch surface system, and mobile nav overhaul
Design tokens
- Fix WCAG AA text failures: darken light muted text and lighten dark
tertiary text so 13-14px copy clears 4.5:1 on every surface.
- Rebuild the dark surface ladder in correct values (oklch compresses to
near-black below ~15%), giving visible steps: content, chrome, cards.
- Establish a 3-layer shell (deep content, lighter sidebar/topbar chrome,
lifted cards) with crisp hairline rings and a restrained card shadow.
- Unify every surface to one neutral temperature (pure gray); neutralize
the cool-tinted sidebar text and legacy surface tokens.
- Convert all color tokens to oklch (neutrals + brand).
- Unify inputs to the recessed token; fix invisible dark placeholders.
- One shared --shadow-dropdown for all menus/listboxes/command palette.
Settings sidebar
- Sticky contained-card rail with subtle scrollbar; collapsible sub-section
groups (active open by default), cross-page section links.
- Mobile: collapsible disclosure with animated open, outside/Escape dismiss,
press feedback, and reduced-motion support.
Mobile
- Consolidate the resource header (title + status + links on one row).
- Tighten settings-page vertical rhythm.
- Rebuild the main sidebar as an animated shadcn-style sheet (slide/fade,
Escape, scroll lock, in-panel close, close-on-navigate).
Fixes
- #11532: selected server invisible in the light-mode terminal toolbar.
Docs: update DESIGN.md tokens, shell layering, and temperature rules.
2026-09-07 02:35:56 +00:00
|
|
|
class="min-h-screen bg-neutral-50 dark:bg-app px-5 py-6 sm:px-8 lg:px-10 lg:pt-[calc(3rem+1.75rem)] lg:pb-10"
|
2026-08-03 21:11:54 +00:00
|
|
|
:class="[collapsed ? 'lg:ml-16' : 'lg:ml-56', sidebarReady ? 'transition-[margin] duration-200' : '']">
|
2026-08-16 18:54:50 +00:00
|
|
|
<div class="w-full" :class="pageWidth === 'centered' ? 'mx-auto max-w-[1400px]' : 'max-w-none'">
|
2024-03-24 15:00:25 +00:00
|
|
|
{{ $slot }}
|
2026-08-03 21:11:54 +00:00
|
|
|
</div>
|
2024-03-20 11:54:06 +00:00
|
|
|
</main>
|
2024-03-19 14:37:16 +00:00
|
|
|
</div>
|
2024-03-20 11:54:06 +00:00
|
|
|
@endauth
|
2025-11-05 07:59:05 +00:00
|
|
|
@endsection
|