repo: remove confirmed cross-project DockDeck Stitch scratch
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
GeoIntel release gates / AI image, SBOM and container scan (push) Canceled after 0s
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
GeoIntel release gates / AI image, SBOM and container scan (push) Canceled after 0s
This commit is contained in:
-440
@@ -1,440 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html class="dark" lang="nl"><head>
|
|
||||||
<meta charset="utf-8"/>
|
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
|
||||||
<title>DockDeck | Dashboard</title>
|
|
||||||
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Geist:wght@400;500;600;700;800&display=swap" rel="stylesheet"/>
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap" rel="stylesheet"/>
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap" rel="stylesheet"/>
|
|
||||||
<script id="tailwind-config">
|
|
||||||
tailwind.config = {
|
|
||||||
darkMode: "class",
|
|
||||||
theme: {
|
|
||||||
extend: {
|
|
||||||
"colors": {
|
|
||||||
"on-surface-variant": "#c7c4d7",
|
|
||||||
"on-surface": "#dbe2fd",
|
|
||||||
"tertiary-container": "#d97721",
|
|
||||||
"surface-dim": "#0b1326",
|
|
||||||
"on-secondary-fixed": "#002114",
|
|
||||||
"on-error": "#690005",
|
|
||||||
"background": "#0b1326",
|
|
||||||
"primary-container": "#8a8cc6",
|
|
||||||
"on-primary-container": "#222457",
|
|
||||||
"inverse-primary": "#585990",
|
|
||||||
"surface-container-lowest": "#060d20",
|
|
||||||
"secondary-fixed-dim": "#4edea3",
|
|
||||||
"tertiary": "#ffb783",
|
|
||||||
"primary-fixed-dim": "#c0c1ff",
|
|
||||||
"surface-container-highest": "#2d3449",
|
|
||||||
"secondary-container": "#00b47d",
|
|
||||||
"on-primary-fixed-variant": "#404176",
|
|
||||||
"surface-container-low": "#131b2e",
|
|
||||||
"on-tertiary-container": "#452000",
|
|
||||||
"on-tertiary-fixed": "#301400",
|
|
||||||
"on-secondary-fixed-variant": "#005236",
|
|
||||||
"error": "#ffb4ab",
|
|
||||||
"primary": "#c0c1ff",
|
|
||||||
"secondary": "#4edea3",
|
|
||||||
"outline-variant": "rgba(30, 41, 59, 0.5)",
|
|
||||||
"tertiary-fixed-dim": "#ffb783",
|
|
||||||
"surface-tint": "#c0c1ff",
|
|
||||||
"tertiary-fixed": "#ffdcc5",
|
|
||||||
"error-container": "#93000a",
|
|
||||||
"surface-container-high": "#222a3e",
|
|
||||||
"primary-fixed": "#e1e0ff",
|
|
||||||
"on-secondary-container": "#003e28",
|
|
||||||
"outline": "#908fa0",
|
|
||||||
"on-primary-fixed": "#131449",
|
|
||||||
"status-offline": "#ffb4ab",
|
|
||||||
"inverse-surface": "#dbe2fd",
|
|
||||||
"secondary-fixed": "#6ffbbe",
|
|
||||||
"on-tertiary-fixed-variant": "#703700",
|
|
||||||
"status-degraded": "#ffb783",
|
|
||||||
"on-background": "#dbe2fd",
|
|
||||||
"surface-glass": "rgba(15, 23, 42, 0.6)",
|
|
||||||
"on-tertiary": "#4f2500",
|
|
||||||
"status-online": "#4edea3",
|
|
||||||
"surface": "#0b1326",
|
|
||||||
"surface-container": "#171f33",
|
|
||||||
"surface-bright": "#31394e",
|
|
||||||
"on-secondary": "#003824",
|
|
||||||
"on-error-container": "#ffdad6",
|
|
||||||
"surface-variant": "#2d3449",
|
|
||||||
"inverse-on-surface": "#283044",
|
|
||||||
"on-primary": "#292b5e"
|
|
||||||
},
|
|
||||||
"borderRadius": {
|
|
||||||
"DEFAULT": "0.25rem",
|
|
||||||
"lg": "0.5rem",
|
|
||||||
"xl": "0.75rem",
|
|
||||||
"full": "9999px"
|
|
||||||
},
|
|
||||||
"spacing": {
|
|
||||||
"gutter": "24px",
|
|
||||||
"margin-desktop": "40px",
|
|
||||||
"stack-lg": "48px",
|
|
||||||
"base": "8px",
|
|
||||||
"margin-mobile": "16px",
|
|
||||||
"stack-md": "24px",
|
|
||||||
"container-max": "1440px",
|
|
||||||
"stack-sm": "12px"
|
|
||||||
},
|
|
||||||
"fontFamily": {
|
|
||||||
"headline-lg-mobile": ["Geist"],
|
|
||||||
"label-md": ["Geist"],
|
|
||||||
"code-sm": ["Geist"],
|
|
||||||
"headline-md": ["Geist"],
|
|
||||||
"display-lg": ["Geist"],
|
|
||||||
"body-lg": ["Inter"],
|
|
||||||
"headline-lg": ["Geist"],
|
|
||||||
"body-md": ["Inter"]
|
|
||||||
},
|
|
||||||
"fontSize": {
|
|
||||||
"headline-lg-mobile": ["24px", {"lineHeight": "32px", "fontWeight": "600"}],
|
|
||||||
"label-md": ["14px", {"lineHeight": "20px", "letterSpacing": "0.02em", "fontWeight": "500"}],
|
|
||||||
"code-sm": ["13px", {"lineHeight": "18px", "fontWeight": "400"}],
|
|
||||||
"headline-md": ["24px", {"lineHeight": "32px", "fontWeight": "500"}],
|
|
||||||
"display-lg": ["48px", {"lineHeight": "56px", "letterSpacing": "-0.02em", "fontWeight": "600"}],
|
|
||||||
"body-lg": ["18px", {"lineHeight": "28px", "fontWeight": "400"}],
|
|
||||||
"headline-lg": ["32px", {"lineHeight": "40px", "letterSpacing": "-0.01em", "fontWeight": "600"}],
|
|
||||||
"body-md": ["16px", {"lineHeight": "24px", "fontWeight": "400"}]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
background-color: #0b1326;
|
|
||||||
color: #dbe2fd;
|
|
||||||
font-family: 'Inter', sans-serif;
|
|
||||||
overflow-x: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.glass-panel {
|
|
||||||
background: rgba(15, 23, 42, 0.6);
|
|
||||||
backdrop-filter: blur(12px);
|
|
||||||
border: 1px solid rgba(30, 41, 59, 0.5);
|
|
||||||
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.glass-panel:hover {
|
|
||||||
background: rgba(45, 52, 73, 0.5);
|
|
||||||
transform: translateY(-2px);
|
|
||||||
border-color: rgba(99, 102, 241, 0.3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.active-dot {
|
|
||||||
width: 8px;
|
|
||||||
height: 8px;
|
|
||||||
border-radius: 50%;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.status-online-dot {
|
|
||||||
background-color: #4edea3;
|
|
||||||
box-shadow: 0 0 8px #4edea3;
|
|
||||||
animation: pulse 2s infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes pulse {
|
|
||||||
0% { transform: scale(1); opacity: 1; }
|
|
||||||
50% { transform: scale(1.2); opacity: 0.7; }
|
|
||||||
100% { transform: scale(1); opacity: 1; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-container:focus-within {
|
|
||||||
box-shadow: 0 0 0 2px #8a8cc6;
|
|
||||||
transform: scale(1.01);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Material Symbols weight settings */
|
|
||||||
.material-symbols-outlined {
|
|
||||||
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
|
|
||||||
}
|
|
||||||
.fill-icon {
|
|
||||||
font-variation-settings: 'FILL' 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-item-active {
|
|
||||||
background-color: #00b47d;
|
|
||||||
color: #003e28;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body class="min-h-screen flex flex-col md:flex-row">
|
|
||||||
<!-- Sidebar Navigation -->
|
|
||||||
<aside class="hidden xl:flex flex-col gap-base p-margin-mobile h-screen w-64 docked left-0 bg-surface-container-low border-r border-outline-variant sticky top-0">
|
|
||||||
<div class="mb-stack-md px-2">
|
|
||||||
<img alt="DockDeck Logo" class="h-10 w-auto object-contain" src="https://lh3.googleusercontent.com/aida-public/AB6AXuARFmQsJNz9lu_scBfpGoziJcpALmL8l2l3ZlVf_OIGLaBjpbegIzdvoCKv6mqg6RikG1n2hCh4Mdafsdgz1an2ngqLsQcVHpwUBpwtHCnV-rfdD6yuV6pHIRf-YHCDFF7Fdj0eUXtzx9QPMBx4EoqFHi9yScPNpJZqF2l4W_Zkz-iGUMQJCkXJfFlR-S8gOabCnmIMEy6LZ794BCzI-BBGR7Hzuwtvmv83KqdS-tS-5E7g5JofB4K0eeTgBYTEKx2MiFTbj5m-_lux"/>
|
|
||||||
</div>
|
|
||||||
<nav class="flex flex-col gap-1">
|
|
||||||
<a class="sidebar-item-active flex items-center gap-3 px-4 py-3 rounded-lg font-medium transition-all" href="#">
|
|
||||||
<span class="material-symbols-outlined">dashboard</span>
|
|
||||||
<span class="font-label-md text-label-md">Algemeen</span>
|
|
||||||
</a>
|
|
||||||
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
|
|
||||||
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">apps</span>
|
|
||||||
<span class="font-label-md text-label-md">Apps</span>
|
|
||||||
</a>
|
|
||||||
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
|
|
||||||
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">star</span>
|
|
||||||
<span class="font-label-md text-label-md">Favorieten</span>
|
|
||||||
</a>
|
|
||||||
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
|
|
||||||
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">category</span>
|
|
||||||
<span class="font-label-md text-label-md">Categorieën</span>
|
|
||||||
</a>
|
|
||||||
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
|
|
||||||
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">palette</span>
|
|
||||||
<span class="font-label-md text-label-md">Weergave</span>
|
|
||||||
</a>
|
|
||||||
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
|
|
||||||
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">extension</span>
|
|
||||||
<span class="font-label-md text-label-md">Integraties</span>
|
|
||||||
</a>
|
|
||||||
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
|
|
||||||
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">backup</span>
|
|
||||||
<span class="font-label-md text-label-md">Back-up</span>
|
|
||||||
</a>
|
|
||||||
</nav>
|
|
||||||
<div class="mt-auto pt-stack-md border-t border-outline-variant px-2">
|
|
||||||
<h3 class="font-label-md text-label-md font-bold text-primary">Instellingen</h3>
|
|
||||||
<p class="text-xs text-on-surface-variant">Beheer uw dashboard</p>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<!-- Main Content Area -->
|
|
||||||
<main class="flex-1 flex flex-col min-w-0">
|
|
||||||
<!-- Top Navigation / Search -->
|
|
||||||
<header class="bg-surface-glass backdrop-blur-md border-b border-outline-variant shadow-sm sticky top-0 z-50">
|
|
||||||
<div class="flex justify-between items-center w-full px-gutter h-16 max-w-container-max mx-auto">
|
|
||||||
<div class="flex items-center gap-stack-md flex-1">
|
|
||||||
<img alt="Logo" class="h-8 xl:hidden" src="https://lh3.googleusercontent.com/aida-public/AB6AXuARFmQsJNz9lu_scBfpGoziJcpALmL8l2l3ZlVf_OIGLaBjpbegIzdvoCKv6mqg6RikG1n2hCh4Mdafsdgz1an2ngqLsQcVHpwUBpwtHCnV-rfdD6yuV6pHIRf-YHCDFF7Fdj0eUXtzx9QPMBx4EoqFHi9yScPNpJZqF2l4W_Zkz-iGUMQJCkXJfFlR-S8gOabCnmIMEy6LZ794BCzI-BBGR7Hzuwtvmv83KqdS-tS-5E7g5JofB4K0eeTgBYTEKx2MiFTbj5m-_lux"/>
|
|
||||||
<div class="search-container bg-surface-container-low flex items-center px-4 py-2 rounded-full w-full max-w-xl transition-all duration-300">
|
|
||||||
<span class="material-symbols-outlined text-on-surface-variant mr-3">search</span>
|
|
||||||
<input class="bg-transparent border-none focus:ring-0 text-on-surface font-body-md text-body-md w-full placeholder-on-surface-variant/50" placeholder="Quick Launch..." type="text"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex items-center gap-4">
|
|
||||||
<button class="hover:bg-surface-variant/50 p-2 rounded-full transition-all active:scale-95">
|
|
||||||
<span class="material-symbols-outlined text-on-surface-variant">notifications</span>
|
|
||||||
</button>
|
|
||||||
<button class="hover:bg-surface-variant/50 p-2 rounded-full transition-all active:scale-95">
|
|
||||||
<span class="material-symbols-outlined text-on-surface-variant">settings</span>
|
|
||||||
</button>
|
|
||||||
<div class="h-8 w-8 rounded-full bg-primary-container flex items-center justify-center text-on-primary-container font-bold text-xs">
|
|
||||||
AD
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
<!-- Dashboard Canvas -->
|
|
||||||
<div class="flex-1 px-margin-mobile md:px-margin-desktop py-stack-md md:py-stack-lg max-w-container-max mx-auto w-full">
|
|
||||||
<!-- Greeting -->
|
|
||||||
<section class="mb-stack-lg">
|
|
||||||
<h1 class="font-headline-lg text-headline-lg text-on-surface">Goedenavond, beheerder</h1>
|
|
||||||
<p class="font-body-md text-body-md text-on-surface-variant mt-1" id="date-display">Donderdag, 24 Augustus 2023</p>
|
|
||||||
</section>
|
|
||||||
<!-- Favorites Section -->
|
|
||||||
<section class="mb-stack-lg">
|
|
||||||
<div class="flex items-center justify-between mb-stack-md">
|
|
||||||
<h2 class="font-headline-md text-headline-md text-primary flex items-center gap-2">
|
|
||||||
<span class="material-symbols-outlined fill-icon">star</span>
|
|
||||||
Favorieten
|
|
||||||
</h2>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-gutter">
|
|
||||||
<!-- Google -->
|
|
||||||
<a class="glass-panel p-stack-md rounded-xl flex items-center gap-4" href="#">
|
|
||||||
<div class="w-12 h-12 rounded-xl bg-surface-container-highest flex items-center justify-center">
|
|
||||||
<span class="material-symbols-outlined text-2xl">language</span>
|
|
||||||
</div>
|
|
||||||
<div class="flex-1">
|
|
||||||
<h3 class="font-label-md text-label-md text-on-surface">Google</h3>
|
|
||||||
<p class="text-xs text-on-surface-variant">Zoekmachine</p>
|
|
||||||
</div>
|
|
||||||
<span class="material-symbols-outlined text-on-surface-variant text-sm">open_in_new</span>
|
|
||||||
</a>
|
|
||||||
<!-- YouTube -->
|
|
||||||
<a class="glass-panel p-stack-md rounded-xl flex items-center gap-4" href="#">
|
|
||||||
<div class="w-12 h-12 rounded-xl bg-surface-container-highest flex items-center justify-center">
|
|
||||||
<span class="material-symbols-outlined text-2xl">play_circle</span>
|
|
||||||
</div>
|
|
||||||
<div class="flex-1">
|
|
||||||
<h3 class="font-label-md text-label-md text-on-surface">YouTube</h3>
|
|
||||||
<p class="text-xs text-on-surface-variant">Video platform</p>
|
|
||||||
</div>
|
|
||||||
<span class="material-symbols-outlined text-on-surface-variant text-sm">open_in_new</span>
|
|
||||||
</a>
|
|
||||||
<!-- GitHub -->
|
|
||||||
<a class="glass-panel p-stack-md rounded-xl flex items-center gap-4" href="#">
|
|
||||||
<div class="w-12 h-12 rounded-xl bg-surface-container-highest flex items-center justify-center">
|
|
||||||
<span class="material-symbols-outlined text-2xl">terminal</span>
|
|
||||||
</div>
|
|
||||||
<div class="flex-1">
|
|
||||||
<h3 class="font-label-md text-label-md text-on-surface">GitHub</h3>
|
|
||||||
<p class="text-xs text-on-surface-variant">Source control</p>
|
|
||||||
</div>
|
|
||||||
<span class="material-symbols-outlined text-on-surface-variant text-sm">open_in_new</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<!-- Categories & Apps Grid -->
|
|
||||||
<div class="flex flex-col gap-stack-lg">
|
|
||||||
<!-- Media Section -->
|
|
||||||
<section>
|
|
||||||
<div class="flex items-center gap-2 mb-stack-md border-l-4 border-secondary pl-3">
|
|
||||||
<h2 class="font-headline-md text-headline-md text-on-surface">Media</h2>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-gutter">
|
|
||||||
<!-- Plex -->
|
|
||||||
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
|
|
||||||
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-secondary/10 border border-secondary/20">
|
|
||||||
<div class="active-dot status-online-dot"></div>
|
|
||||||
<span class="text-[10px] font-bold text-secondary uppercase tracking-wider">Online</span>
|
|
||||||
</div>
|
|
||||||
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
|
|
||||||
<span class="material-symbols-outlined text-4xl text-primary">movie</span>
|
|
||||||
</div>
|
|
||||||
<h3 class="font-label-md text-label-md text-on-surface font-bold">Plex</h3>
|
|
||||||
<p class="text-xs text-on-surface-variant mt-1">Media Server</p>
|
|
||||||
</div>
|
|
||||||
<!-- Overseerr -->
|
|
||||||
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
|
|
||||||
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-secondary/10 border border-secondary/20">
|
|
||||||
<div class="active-dot status-online-dot"></div>
|
|
||||||
<span class="text-[10px] font-bold text-secondary uppercase tracking-wider">Online</span>
|
|
||||||
</div>
|
|
||||||
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
|
|
||||||
<span class="material-symbols-outlined text-4xl text-primary">shopping_cart</span>
|
|
||||||
</div>
|
|
||||||
<h3 class="font-label-md text-label-md text-on-surface font-bold">Overseerr</h3>
|
|
||||||
<p class="text-xs text-on-surface-variant mt-1">Requests</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<!-- Smart Home Section -->
|
|
||||||
<section>
|
|
||||||
<div class="flex items-center gap-2 mb-stack-md border-l-4 border-tertiary pl-3">
|
|
||||||
<h2 class="font-headline-md text-headline-md text-on-surface">Smart Home</h2>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-gutter">
|
|
||||||
<!-- Home Assistant -->
|
|
||||||
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
|
|
||||||
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-error/10 border border-error/20">
|
|
||||||
<div class="active-dot bg-status-offline"></div>
|
|
||||||
<span class="text-[10px] font-bold text-status-offline uppercase tracking-wider">Offline</span>
|
|
||||||
</div>
|
|
||||||
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
|
|
||||||
<span class="material-symbols-outlined text-4xl text-tertiary">home</span>
|
|
||||||
</div>
|
|
||||||
<h3 class="font-label-md text-label-md text-on-surface font-bold">Home Assistant</h3>
|
|
||||||
<p class="text-xs text-on-surface-variant mt-1">Automation Hub</p>
|
|
||||||
</div>
|
|
||||||
<!-- Zigbee2MQTT -->
|
|
||||||
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
|
|
||||||
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-on-surface-variant/10 border border-on-surface-variant/20">
|
|
||||||
<div class="active-dot bg-outline"></div>
|
|
||||||
<span class="text-[10px] font-bold text-on-surface-variant uppercase tracking-wider">Onbekend</span>
|
|
||||||
</div>
|
|
||||||
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
|
|
||||||
<span class="material-symbols-outlined text-4xl text-tertiary">hub</span>
|
|
||||||
</div>
|
|
||||||
<h3 class="font-label-md text-label-md text-on-surface font-bold">Zigbee2MQTT</h3>
|
|
||||||
<p class="text-xs text-on-surface-variant mt-1">Bridge</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<!-- Netwerk Section -->
|
|
||||||
<section>
|
|
||||||
<div class="flex items-center gap-2 mb-stack-md border-l-4 border-primary pl-3">
|
|
||||||
<h2 class="font-headline-md text-headline-md text-on-surface">Netwerk</h2>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-gutter">
|
|
||||||
<!-- Sonarr -->
|
|
||||||
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
|
|
||||||
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-secondary/10 border border-secondary/20">
|
|
||||||
<div class="active-dot status-online-dot"></div>
|
|
||||||
<span class="text-[10px] font-bold text-secondary uppercase tracking-wider">Online</span>
|
|
||||||
</div>
|
|
||||||
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
|
|
||||||
<span class="material-symbols-outlined text-4xl text-primary-fixed-dim">tv</span>
|
|
||||||
</div>
|
|
||||||
<h3 class="font-label-md text-label-md text-on-surface font-bold">Sonarr</h3>
|
|
||||||
<p class="text-xs text-on-surface-variant mt-1">TV Management</p>
|
|
||||||
</div>
|
|
||||||
<!-- Pi-hole -->
|
|
||||||
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
|
|
||||||
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-secondary/10 border border-secondary/20">
|
|
||||||
<div class="active-dot status-online-dot"></div>
|
|
||||||
<span class="text-[10px] font-bold text-secondary uppercase tracking-wider">Online</span>
|
|
||||||
</div>
|
|
||||||
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
|
|
||||||
<span class="material-symbols-outlined text-4xl text-primary-fixed-dim">shield</span>
|
|
||||||
</div>
|
|
||||||
<h3 class="font-label-md text-label-md text-on-surface font-bold">Pi-hole</h3>
|
|
||||||
<p class="text-xs text-on-surface-variant mt-1">Ad Blocker</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
<!-- Footer / Status Indicator -->
|
|
||||||
<footer class="mt-stack-lg border-t border-outline-variant pt-stack-md flex flex-col sm:flex-row items-center justify-between gap-4">
|
|
||||||
<div class="flex items-center gap-3 bg-surface-container-low px-4 py-2 rounded-full border border-outline-variant/30">
|
|
||||||
<span class="material-symbols-outlined text-primary text-sm">inventory_2</span>
|
|
||||||
<p class="text-xs font-medium text-on-surface-variant">3 nieuwe containers ontdekt</p>
|
|
||||||
<a class="text-xs font-bold text-primary hover:underline ml-2" href="#">Beheer apps</a>
|
|
||||||
</div>
|
|
||||||
<div class="text-xs text-outline font-code-sm">
|
|
||||||
DockDeck v2.4.1-stable • System Up: 14d 2h 45m
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
<!-- Mobile Bottom Navigation -->
|
|
||||||
<nav class="md:hidden fixed bottom-0 left-0 right-0 bg-surface-glass backdrop-blur-lg border-t border-outline-variant flex justify-around items-center h-16 z-50">
|
|
||||||
<a class="flex flex-col items-center gap-1 text-primary" href="#">
|
|
||||||
<span class="material-symbols-outlined fill-icon">dashboard</span>
|
|
||||||
<span class="text-[10px] font-bold">Home</span>
|
|
||||||
</a>
|
|
||||||
<a class="flex flex-col items-center gap-1 text-on-surface-variant" href="#">
|
|
||||||
<span class="material-symbols-outlined">apps</span>
|
|
||||||
<span class="text-[10px]">Apps</span>
|
|
||||||
</a>
|
|
||||||
<a class="flex flex-col items-center gap-1 text-on-surface-variant" href="#">
|
|
||||||
<span class="material-symbols-outlined">search</span>
|
|
||||||
<span class="text-[10px]">Zoek</span>
|
|
||||||
</a>
|
|
||||||
<a class="flex flex-col items-center gap-1 text-on-surface-variant" href="#">
|
|
||||||
<span class="material-symbols-outlined">person</span>
|
|
||||||
<span class="text-[10px]">Profiel</span>
|
|
||||||
</a>
|
|
||||||
</nav>
|
|
||||||
<script>
|
|
||||||
// Update date display
|
|
||||||
function updateDate() {
|
|
||||||
const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
|
|
||||||
const today = new Date();
|
|
||||||
const localeDate = today.toLocaleDateString('nl-NL', options);
|
|
||||||
const capitalized = localeDate.charAt(0).toUpperCase() + localeDate.slice(1);
|
|
||||||
document.getElementById('date-display').textContent = capitalized;
|
|
||||||
}
|
|
||||||
updateDate();
|
|
||||||
|
|
||||||
// Subtle micro-interaction for app tiles
|
|
||||||
document.querySelectorAll('.glass-panel').forEach(panel => {
|
|
||||||
panel.addEventListener('mousedown', () => {
|
|
||||||
panel.style.transform = 'scale(0.98) translateY(0px)';
|
|
||||||
});
|
|
||||||
panel.addEventListener('mouseup', () => {
|
|
||||||
panel.style.transform = 'translateY(-2px)';
|
|
||||||
});
|
|
||||||
panel.addEventListener('mouseleave', () => {
|
|
||||||
panel.style.transform = 'translateY(0px)';
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body></html>
|
|
||||||
Reference in New Issue
Block a user