417 lines
16 KiB
CSS
417 lines
16 KiB
CSS
/* ===== ADMINER – gleicher Look wie style.css ===== */
|
||
|
||
/* ── RESET & BASE ─────────────────────────────── */
|
||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||
|
||
:root {
|
||
--bg: #0f0f13;
|
||
--surface: #1a1a24;
|
||
--surface-hover: #22222f;
|
||
--border: rgba(255,255,255,0.07);
|
||
--text: #e8e8f0;
|
||
--text-muted: #8888a8;
|
||
--radius: 16px;
|
||
--transition: 0.25s ease;
|
||
--accent: #6366f1;
|
||
}
|
||
|
||
html { scroll-behavior: smooth; overflow-x: hidden; }
|
||
|
||
body {
|
||
background-color: var(--bg);
|
||
color: var(--text);
|
||
font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
|
||
min-height: 100vh;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
padding: 2rem 1rem 4rem;
|
||
position: relative;
|
||
overflow-x: hidden;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
/* ── BACKGROUND ───────────────────────────────── */
|
||
@keyframes bgShift {
|
||
0% { opacity:1; transform:scale(1) translate(0,0); }
|
||
33% { opacity:.85; transform:scale(1.15) translate(2%,3%); }
|
||
66% { opacity:.9; transform:scale(1.08) translate(-3%,-2%); }
|
||
100% { opacity:1; transform:scale(1) translate(0,0); }
|
||
}
|
||
|
||
.background-blur {
|
||
position:fixed; inset:-25%; z-index:-1; pointer-events:none;
|
||
background:
|
||
radial-gradient(ellipse 60% 40% at 20% 10%, rgba(99,102,241,.18), transparent),
|
||
radial-gradient(ellipse 50% 40% at 80% 80%, rgba(14,165,233,.13), transparent),
|
||
radial-gradient(ellipse 40% 30% at 60% 40%, rgba(168,85,247,.08), transparent);
|
||
animation: bgShift 12s ease-in-out infinite;
|
||
}
|
||
|
||
#particle-canvas {
|
||
position:fixed; inset:0; z-index:-1; pointer-events:none; opacity:.55;
|
||
}
|
||
|
||
/* ── ORBS ─────────────────────────────────────── */
|
||
.orb {
|
||
position:fixed; border-radius:50%; pointer-events:none; z-index:-1;
|
||
filter:blur(70px); opacity:0;
|
||
animation:orbFloat var(--dur,18s) ease-in-out infinite var(--delay,0s);
|
||
}
|
||
.orb-1 { width:320px;height:320px; background:radial-gradient(circle,rgba(99,102,241,.25),transparent 70%); top:-80px;left:-80px; --dur:20s;--delay:0s; }
|
||
.orb-2 { width:260px;height:260px; background:radial-gradient(circle,rgba(14,165,233,.2), transparent 70%); bottom:5%;right:-60px; --dur:17s;--delay:-6s; }
|
||
.orb-3 { width:200px;height:200px; background:radial-gradient(circle,rgba(168,85,247,.18),transparent 70%); top:45%;left:-40px; --dur:23s;--delay:-11s;}
|
||
.orb-4 { width:180px;height:180px; background:radial-gradient(circle,rgba(236,72,153,.15), transparent 70%); top:20%;right:-30px; --dur:19s;--delay:-4s; }
|
||
@keyframes orbFloat {
|
||
0% {opacity:0; transform:translate(0,0) scale(1); }
|
||
10% {opacity:1;}
|
||
50% {opacity:1; transform:translate(20px,25px) scale(1.08); }
|
||
90% {opacity:1;}
|
||
100%{opacity:0; transform:translate(0,0) scale(1); }
|
||
}
|
||
|
||
/* Grid lines */
|
||
body::before {
|
||
content:''; position:fixed; inset:0; z-index:-1; pointer-events:none;
|
||
background-image:
|
||
linear-gradient(rgba(255,255,255,.025) 1px, transparent 1px),
|
||
linear-gradient(90deg, rgba(255,255,255,.025) 1px, transparent 1px);
|
||
background-size:60px 60px;
|
||
mask-image:radial-gradient(ellipse 80% 80% at 50% 50%, black 30%, transparent 100%);
|
||
-webkit-mask-image:radial-gradient(ellipse 80% 80% at 50% 50%, black 30%, transparent 100%);
|
||
}
|
||
|
||
/* ── LAYOUT ───────────────────────────────────── */
|
||
.wrap {
|
||
width: 100%;
|
||
max-width: 900px;
|
||
}
|
||
|
||
/* ── ANIMATIONS ───────────────────────────────── */
|
||
@keyframes fadeDown {
|
||
from { opacity:0; transform:translateY(-20px); }
|
||
to { opacity:1; transform:translateY(0); }
|
||
}
|
||
@keyframes fadeUp {
|
||
from { opacity:0; transform:translateY(24px); }
|
||
to { opacity:1; transform:translateY(0); }
|
||
}
|
||
@keyframes shimmerText {
|
||
from { background-position:0% center; }
|
||
to { background-position:200% center; }
|
||
}
|
||
|
||
/* ── HEADER ───────────────────────────────────── */
|
||
.admin-header {
|
||
text-align:center;
|
||
margin-bottom: 2.5rem;
|
||
margin-top: 1.5rem;
|
||
animation: fadeDown .7s ease both;
|
||
}
|
||
|
||
@keyframes avatarPulse {
|
||
0%,100% { box-shadow:0 0 0 4px rgba(99,102,241,.2),0 0 20px rgba(99,102,241,.1); }
|
||
50% { box-shadow:0 0 0 8px rgba(99,102,241,.12),0 0 40px rgba(99,102,241,.2); }
|
||
}
|
||
|
||
.admin-avatar {
|
||
width:72px; height:72px; border-radius:50%;
|
||
background:linear-gradient(135deg,#6366f1,#0ea5e9);
|
||
display:flex; align-items:center; justify-content:center;
|
||
font-size:1.6rem; font-weight:700;
|
||
margin:0 auto 1rem;
|
||
animation:avatarPulse 3s ease-in-out infinite;
|
||
transition:transform .3s ease;
|
||
cursor:default; user-select:none;
|
||
}
|
||
.admin-avatar:hover { transform:scale(1.08) rotate(6deg); }
|
||
|
||
.admin-title {
|
||
font-size: clamp(1.5rem,3.5vw,2.2rem);
|
||
font-weight:700;
|
||
background:linear-gradient(90deg,#e8e8f0 0%,#6366f1 40%,#0ea5e9 60%,#e8e8f0 100%);
|
||
background-size:200% auto;
|
||
-webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text;
|
||
letter-spacing:-.5px;
|
||
animation:shimmerText 5s linear infinite;
|
||
}
|
||
|
||
.admin-subtitle {
|
||
color:var(--text-muted);
|
||
margin-top:.4rem;
|
||
font-size:.95rem;
|
||
animation: fadeDown .9s ease .3s both;
|
||
}
|
||
|
||
/* ── PILL / TAG ───────────────────────────────── */
|
||
.pill {
|
||
display:inline-block;
|
||
font-size:.72rem; font-weight:600;
|
||
text-transform:uppercase; letter-spacing:1px;
|
||
color:var(--text-muted);
|
||
background:rgba(255,255,255,.06);
|
||
border:1px solid var(--border);
|
||
padding:3px 10px; border-radius:999px;
|
||
vertical-align:middle; margin-left:8px;
|
||
}
|
||
|
||
/* ── CARD ─────────────────────────────────────── */
|
||
.card {
|
||
background:var(--surface);
|
||
border:1px solid var(--border);
|
||
border-radius:var(--radius);
|
||
padding:1.4rem 1.6rem;
|
||
position:relative;
|
||
overflow:hidden;
|
||
animation: fadeUp .5s ease both;
|
||
}
|
||
.card::before {
|
||
content:''; position:absolute; inset:0; border-radius:var(--radius);
|
||
opacity:0; transition:opacity var(--transition);
|
||
background:linear-gradient(135deg,rgba(99,102,241,.07),transparent 60%);
|
||
pointer-events:none;
|
||
}
|
||
.card:hover::before { opacity:1; }
|
||
|
||
/* ── GRID LAYOUT ──────────────────────────────── */
|
||
.admin-grid {
|
||
display:grid;
|
||
grid-template-columns:240px 1fr;
|
||
gap:16px;
|
||
align-items:start;
|
||
}
|
||
@media(max-width:700px){ .admin-grid{ grid-template-columns:1fr; } }
|
||
|
||
/* ── TYPOGRAPHY ───────────────────────────────── */
|
||
h2 {
|
||
font-size:1rem; font-weight:700;
|
||
color:var(--text-muted);
|
||
text-transform:uppercase; letter-spacing:1.2px;
|
||
margin-bottom:.75rem;
|
||
padding-bottom:.5rem;
|
||
border-bottom:1px solid var(--border);
|
||
}
|
||
h3 {
|
||
font-size:.95rem; font-weight:600; color:var(--text-muted);
|
||
text-transform:uppercase; letter-spacing:1px;
|
||
margin-bottom:.6rem;
|
||
}
|
||
a { color:#93c5fd; text-decoration:none; }
|
||
a:hover { text-decoration:underline; }
|
||
.muted { color:var(--text-muted); font-size:.88rem; }
|
||
code { font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:.85em;
|
||
background:rgba(255,255,255,.06); border:1px solid var(--border); padding:1px 5px; border-radius:5px; }
|
||
|
||
hr { border:0; border-top:1px solid var(--border); margin:1.2rem 0; }
|
||
|
||
/* ── FORM ─────────────────────────────────────── */
|
||
label {
|
||
display:block;
|
||
font-size:.82rem; font-weight:600; color:var(--text-muted);
|
||
text-transform:uppercase; letter-spacing:.8px;
|
||
margin-bottom:.35rem;
|
||
}
|
||
input, textarea, select {
|
||
width:100%; padding:10px 14px;
|
||
border-radius:12px;
|
||
background:rgba(255,255,255,.04);
|
||
border:1px solid var(--border);
|
||
color:var(--text);
|
||
font-family:inherit; font-size:.95rem;
|
||
outline:none;
|
||
transition:border-color var(--transition), box-shadow var(--transition);
|
||
}
|
||
input:focus, textarea:focus, select:focus {
|
||
border-color:rgba(99,102,241,.7);
|
||
box-shadow:0 0 0 3px rgba(99,102,241,.15);
|
||
}
|
||
textarea { font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; resize:vertical; }
|
||
|
||
/* ── SELECT DROPDOWN ──────────────────────────── */
|
||
select {
|
||
appearance:none;
|
||
-webkit-appearance:none;
|
||
padding-right:2.6rem;
|
||
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238888a8' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
|
||
background-repeat:no-repeat;
|
||
background-position:right 12px center;
|
||
background-size:16px 16px;
|
||
cursor:pointer;
|
||
}
|
||
select:focus {
|
||
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23a5b4fc' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
|
||
}
|
||
select option {
|
||
background:var(--surface);
|
||
color:var(--text);
|
||
padding:8px 12px;
|
||
}
|
||
select option:checked {
|
||
background:rgba(99,102,241,.25);
|
||
color:#a5b4fc;
|
||
}
|
||
|
||
/* ── NUMBER INPUT (Port) ──────────────────────── */
|
||
input[type=number] {
|
||
appearance:textfield;
|
||
-moz-appearance:textfield;
|
||
}
|
||
input[type=number]::-webkit-inner-spin-button,
|
||
input[type=number]::-webkit-outer-spin-button {
|
||
-webkit-appearance:none;
|
||
appearance:none;
|
||
margin:0;
|
||
}
|
||
.field-port {
|
||
position:relative;
|
||
}
|
||
.field-port input[type=number] {
|
||
padding-right:2.8rem;
|
||
}
|
||
.field-port__spinners {
|
||
position:absolute;
|
||
right:8px; top:50%; transform:translateY(-50%);
|
||
display:flex; flex-direction:column; gap:2px;
|
||
}
|
||
.field-port__spinners button {
|
||
width:22px; height:22px;
|
||
display:flex; align-items:center; justify-content:center;
|
||
background:rgba(255,255,255,.07);
|
||
border:1px solid var(--border);
|
||
border-radius:6px;
|
||
color:var(--text-muted);
|
||
cursor:pointer; font-size:.7rem; line-height:1;
|
||
padding:0;
|
||
transition:background var(--transition), color var(--transition), border-color var(--transition);
|
||
}
|
||
.field-port__spinners button:hover {
|
||
background:rgba(99,102,241,.2);
|
||
border-color:rgba(99,102,241,.4);
|
||
color:#a5b4fc;
|
||
}
|
||
|
||
.field { margin-bottom:1rem; }
|
||
|
||
/* ── BUTTONS ──────────────────────────────────── */
|
||
.btn {
|
||
display:inline-flex; align-items:center; justify-content:center; gap:6px;
|
||
padding:10px 18px; border-radius:var(--radius);
|
||
border:1px solid rgba(255,255,255,.12);
|
||
cursor:pointer; font-size:.9rem; font-weight:600; letter-spacing:.2px;
|
||
background:linear-gradient(135deg,rgba(99,102,241,.9),rgba(14,165,233,.65));
|
||
color:#fff;
|
||
text-decoration:none;
|
||
transition:transform var(--transition), filter var(--transition), box-shadow var(--transition);
|
||
box-shadow:0 4px 18px rgba(99,102,241,.25);
|
||
white-space:nowrap;
|
||
}
|
||
.btn:hover { filter:brightness(1.1); transform:translateY(-1px); text-decoration:none; }
|
||
.btn:active { transform:translateY(1px); }
|
||
|
||
.btn-sm { padding:7px 12px; font-size:.82rem; border-radius:10px; }
|
||
|
||
.btn-ghost {
|
||
background:rgba(255,255,255,.06);
|
||
border:1px solid var(--border);
|
||
box-shadow:none;
|
||
}
|
||
.btn-ghost:hover { background:rgba(255,255,255,.1); filter:none; }
|
||
|
||
/* ── TABS ─────────────────────────────────────── */
|
||
.tabs { display:flex; gap:6px; margin-bottom:1.4rem; }
|
||
.tab {
|
||
padding:8px 18px; border-radius:10px; font-size:.88rem; font-weight:600;
|
||
border:1px solid var(--border);
|
||
background:rgba(255,255,255,.04); color:var(--text-muted);
|
||
text-decoration:none; transition:background var(--transition), color var(--transition), border-color var(--transition);
|
||
cursor:pointer;
|
||
}
|
||
.tab:hover { background:rgba(255,255,255,.08); color:var(--text); text-decoration:none; }
|
||
.tab.active {
|
||
background:rgba(99,102,241,.18); border-color:rgba(99,102,241,.4);
|
||
color:#a5b4fc;
|
||
}
|
||
|
||
/* ── NOTICE / ALERTS ──────────────────────────── */
|
||
.notice {
|
||
padding:10px 14px; border-radius:12px; font-size:.88rem;
|
||
border:1px solid var(--border); margin-bottom:1rem;
|
||
}
|
||
.notice-ok { background:rgba(34,197,94,.1); border-color:rgba(34,197,94,.25); color:#86efac; }
|
||
.notice-err { background:rgba(239,68,68,.09); border-color:rgba(239,68,68,.25); color:#fca5a5; }
|
||
|
||
/* ── NAV LIST (Tabellenliste) ─────────────────── */
|
||
.nav-list { list-style:none; }
|
||
.nav-list li { margin:3px 0; }
|
||
.nav-list a {
|
||
display:block; padding:8px 12px; border-radius:12px;
|
||
color:var(--text-muted); font-size:.88rem;
|
||
border:1px solid transparent;
|
||
transition:background var(--transition), color var(--transition), border-color var(--transition);
|
||
}
|
||
.nav-list a:hover { background:var(--surface-hover); color:var(--text); text-decoration:none; }
|
||
.nav-list a.active {
|
||
background:rgba(99,102,241,.12);
|
||
border-color:rgba(99,102,241,.25);
|
||
color:#a5b4fc;
|
||
}
|
||
|
||
/* ── TABLE ────────────────────────────────────── */
|
||
.db-table {
|
||
width:100%; border-collapse:collapse; font-size:.85rem;
|
||
overflow:hidden;
|
||
}
|
||
.db-table thead th {
|
||
padding:9px 10px; text-align:left;
|
||
font-size:.75rem; font-weight:700; text-transform:uppercase; letter-spacing:.8px;
|
||
color:var(--text-muted);
|
||
background:rgba(255,255,255,.03);
|
||
border-bottom:1px solid var(--border);
|
||
}
|
||
.db-table tbody td {
|
||
padding:9px 10px;
|
||
border-bottom:1px solid var(--border);
|
||
vertical-align:top;
|
||
font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
|
||
font-size:.82rem;
|
||
color:var(--text);
|
||
word-break:break-word;
|
||
max-width:280px;
|
||
overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
|
||
}
|
||
.db-table tbody tr:hover td { background:rgba(255,255,255,.025); }
|
||
.db-table tbody tr:last-child td { border-bottom:none; }
|
||
.null-val { color:var(--text-muted); font-style:italic; font-size:.8rem; }
|
||
|
||
/* ── PAGINATION ───────────────────────────────── */
|
||
.pagination { display:flex; gap:8px; margin-top:12px; align-items:center; }
|
||
|
||
/* ── TOP BAR ──────────────────────────────────── */
|
||
.top-bar {
|
||
display:flex; align-items:center; justify-content:space-between; gap:12px;
|
||
margin-bottom:1.4rem;
|
||
flex-wrap:wrap;
|
||
}
|
||
.top-bar-left { display:flex; align-items:center; gap:10px; }
|
||
.top-bar-actions { display:flex; gap:8px; flex-wrap:wrap; }
|
||
|
||
/* ── LOGIN CARD CENTERED ──────────────────────── */
|
||
.login-wrap {
|
||
width:100%; max-width:420px;
|
||
margin:0 auto;
|
||
animation: fadeUp .5s ease both;
|
||
}
|
||
|
||
/* ── BACK LINK ────────────────────────────────── */
|
||
.back-link {
|
||
display:inline-flex; align-items:center; gap:5px;
|
||
color:var(--text-muted); font-size:.85rem;
|
||
margin-bottom:1.2rem;
|
||
}
|
||
.back-link:hover { color:var(--text); text-decoration:none; }
|
||
|
||
@media(max-width:480px) {
|
||
body { padding:1.2rem .75rem 3rem; }
|
||
.admin-grid { grid-template-columns:1fr; }
|
||
}
|