:root{
  --bg: #0A0F1A;
  --panel: #111827;
  --panel-2: #0D1420;
  --border: #1E293B;
  --border-soft: #18202F;
  --text: #E5EAF1;
  --muted: #6B7686;
  --muted-2: #4A5568;
  --accent: #4FD8C4;
  --accent-dim: rgba(79,216,196,0.12);
  --accent-2: #F0B429;
  --success: #3ECF8E;
  --danger: #F0576B;
  --mono: 'JetBrains Mono', monospace;
  --sans: 'Inter', sans-serif;
}
/* "System" (Standard): folgt der Geräte-Einstellung, solange der Account
   keine bewusste Wahl getroffen hat (kein data-theme-Attribut gesetzt). */
@media (prefers-color-scheme: light){
  html:not([data-theme]){
    --bg: #F3F5F8;
    --panel: #FFFFFF;
    --panel-2: #EDF0F4;
    --border: #D7DDE6;
    --border-soft: #E5E9EF;
    --text: #1A2233;
    --muted: #667085;
    --muted-2: #8A94A6;
    --accent: #0F9C86;
    --accent-dim: rgba(15,156,134,0.12);
    --accent-2: #B9790A;
    --success: #1E9E63;
    --danger: #D63D52;
  }
}
/* Bewusste Wahl "Hell" im Konto, unabhängig von der Geräte-Einstellung. */
html[data-theme="light"]{
  --bg: #F3F5F8;
  --panel: #FFFFFF;
  --panel-2: #EDF0F4;
  --border: #D7DDE6;
  --border-soft: #E5E9EF;
  --text: #1A2233;
  --muted: #667085;
  --muted-2: #8A94A6;
  --accent: #0F9C86;
  --accent-dim: rgba(15,156,134,0.12);
  --accent-2: #B9790A;
  --success: #1E9E63;
  --danger: #D63D52;
}
/* Bewusste Wahl "Dunkel" im Konto — überschreibt auch dann, wenn das
   Gerät selbst auf Hell eingestellt ist. */
html[data-theme="dark"]{
  --bg: #0A0F1A;
  --panel: #111827;
  --panel-2: #0D1420;
  --border: #1E293B;
  --border-soft: #18202F;
  --text: #E5EAF1;
  --muted: #6B7686;
  --muted-2: #4A5568;
  --accent: #4FD8C4;
  --accent-dim: rgba(79,216,196,0.12);
  --accent-2: #F0B429;
  --success: #3ECF8E;
  --danger: #F0576B;
}
*{box-sizing:border-box; margin:0; padding:0;}
body{
  font-family: var(--sans); background: var(--bg); color: var(--text);
  min-height:100vh; -webkit-font-smoothing: antialiased;
  transition: background-color .15s ease, color .15s ease;
}
#root{min-height:100vh;}
a{color:inherit;}
button{font-family:inherit;}

/* ================= LOGIN SCREEN ================= */
.shell{
  display:flex; min-height:100vh; position:relative;
  /* Innerhalb der gesamten Login-Fläche bleiben alle Farben fest auf
     Dunkel, egal welches Design gewählt ist — reine Marken-/Login-Fläche,
     das Logo ist für dunklen Hintergrund gestaltet (helle/silberne
     Schrift). Der Verlauf sitzt bewusst hier am gemeinsamen Container statt
     einzeln pro Panel, damit links und rechts EIN durchgehender
     Hintergrund sind statt zwei unterschiedlicher (auch auf Mobile, wo die
     Panels untereinander stehen). */
  --bg: #0A0F1A; --panel: #111827; --panel-2: #0D1420;
  --border: #1E293B; --border-soft: #18202F;
  --text: #E5EAF1; --muted: #6B7686; --muted-2: #4A5568;
  --accent: #4FD8C4; --accent-dim: rgba(79,216,196,0.12); --accent-2: #F0B429;
  --success: #3ECF8E; --danger: #F0576B;
  color: var(--text);
  background: radial-gradient(ellipse at 20% 20%, rgba(79,216,196,0.07), transparent 55%),
    linear-gradient(180deg, var(--panel-2) 0%, #090D16 100%);
}
.infra-panel{
  position:relative; flex: 1.15;
  overflow:hidden; display:flex; flex-direction:column; align-items:center; justify-content:center;
  padding: 44px 48px; border-right:1px solid var(--border-soft); min-height: 100vh;
}
.infra-panel canvas, .auth-panel canvas{ position:absolute; inset:0; width:100%; height:100%; opacity:0.55; }
.infra-top{position:relative; z-index:2;}
.brand{ display:flex; align-items:center; gap:10px; }
.brand-mark{
  width:30px; height:30px; border-radius:8px;
  background: linear-gradient(135deg, var(--accent), #2A9D8F);
  display:flex; align-items:center; justify-content:center;
  font-family: var(--mono); font-weight:700; font-size:14px; color:#041713; flex-shrink:0;
}
.brand-name{ font-family: var(--mono); font-weight:600; font-size:15px; letter-spacing:0.02em; }
.brand-with-logo{ display:block; }
.brand-logo{ max-width: 340px; width:100%; height:auto; display:block; }
.brand-sidebar{
  display:block; background:#0A0F1A; border-radius:10px; padding:14px 16px;
}
.sidebar-wordmark{ width:100%; height:auto; display:block; }
.infra-headline{ margin-top: 72px; max-width: 460px; }
.eyebrow{
  font-family: var(--mono); font-size:11px; letter-spacing:0.14em; text-transform:uppercase;
  color:var(--accent); display:flex; align-items:center; gap:8px; margin-bottom:18px;
}
.eyebrow::before{ content:''; width:6px; height:6px; border-radius:50%; background:var(--success); box-shadow:0 0 0 3px rgba(62,207,142,0.18); }
.infra-headline h1{ font-size: 34px; line-height:1.22; font-weight:700; letter-spacing:-0.01em; }
.infra-headline p{ margin-top:14px; color:var(--muted); font-size:14.5px; line-height:1.6; max-width:400px; }

.auth-panel{ position:relative; overflow:hidden; flex:1; display:flex; align-items:center; justify-content:center; padding: 32px 24px; }
.auth-card{ position:relative; z-index:2; width:100%; max-width: 380px; }
.auth-card-header{margin-bottom:28px;}
.auth-card-header h2{ font-size:22px; font-weight:700; }
.auth-card-header p{ color:var(--muted); font-size:13.5px; margin-top:6px; }

/* ================= FORM ELEMENTS (shared) ================= */
.field{margin-bottom:16px;}
.field label{
  display:block; font-family:var(--mono); font-size:11px; letter-spacing:0.06em;
  text-transform:uppercase; color:var(--muted); margin-bottom:7px;
}
.field input, .field select, .field textarea{
  width:100%; background: var(--panel); border:1px solid var(--border); color:var(--text);
  font-family:var(--sans); font-size:14.5px; padding:11px 13px; border-radius:8px; outline:none;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.field textarea{resize:vertical; min-height:90px; font-family:var(--sans);}
.field input::placeholder, .field textarea::placeholder{color:var(--muted-2);}
.field input:focus, .field select:focus, .field textarea:focus{ border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-dim); }

.btn{
  background: linear-gradient(135deg, var(--accent), #2A9D8F);
  color:#041713; border:none; font-family:var(--sans); font-weight:700; font-size:13.5px;
  padding:10px 18px; border-radius:8px; cursor:pointer; text-decoration:none; display:inline-flex;
  align-items:center; justify-content:center; gap:8px;
  transition: transform .12s ease, box-shadow .12s ease, opacity .12s ease;
  box-shadow: 0 6px 18px rgba(79,216,196,0.16);
}
.btn:hover:not(:disabled){transform: translateY(-1px); box-shadow: 0 8px 22px rgba(79,216,196,0.24);}
.btn:active:not(:disabled){transform: translateY(0);}
.btn:disabled{opacity:0.55; cursor:not-allowed;}
.btn.block{width:100%;}
.btn.secondary{ background:transparent; color:var(--text); border:1px solid var(--border); box-shadow:none; }
.btn.secondary:hover:not(:disabled){ border-color:var(--accent); color:var(--accent); }
.btn.danger{ background:transparent; color:#FF8FA0; border:1px solid rgba(240,87,107,0.35); box-shadow:none; }
.btn.danger:hover:not(:disabled){ background:rgba(240,87,107,0.1); border-color:var(--danger); }
.btn.small{ padding:7px 12px; font-size:12.5px; }
.icon-btn{ padding:7px 9px; }

.file-menu-wrap{ position:relative; }
.file-menu{
  position:absolute; right:0; top:calc(100% + 4px);
  background:var(--panel); border:1px solid var(--border); border-radius:8px;
  box-shadow:0 10px 28px rgba(0,0,0,0.45); z-index:30; min-width:170px; overflow:hidden;
}
.file-menu-item{
  display:block; width:100%; text-align:left; background:transparent; border:none;
  color:var(--text); font-size:13px; padding:10px 14px; cursor:pointer;
  text-decoration:none; font-family:var(--sans);
}
.file-menu-item:hover{ background: rgba(255,255,255,0.05); }
.file-menu-item.danger{ color:#FF8FA0; }
.file-menu-item.danger:hover{ background: rgba(240,87,107,0.1); }

.preview-modal-overlay{
  position:fixed; inset:0; background:rgba(0,0,0,0.82); z-index:100100;
  display:flex; align-items:center; justify-content:center; padding:24px;
}
.preview-modal{
  background:var(--panel); border:1px solid var(--border); border-radius:14px;
  /* Feste Größe unabhängig vom jeweils geöffneten Bild/Video, damit das
     Modal beim Durchblättern nicht ständig die Größe wechselt — nur der
     Inhalt darin (img/video) skaliert sich per object-fit auf diese
     feste Fläche. */
  width:min(1100px, 92vw); height:min(760px, 92vh);
  display:flex; flex-direction:column; overflow:hidden;
}
.preview-modal-header{
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:14px 18px; border-bottom:1px solid var(--border-soft); flex-shrink:0;
}
.preview-modal-title{ font-size:13.5px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.preview-modal-close{
  background:transparent; border:none; color:var(--muted); font-size:26px; line-height:1;
  cursor:pointer; padding:0 4px; flex-shrink:0;
}
.preview-modal-close:hover{ color:var(--text); }
.preview-modal-body{
  position:relative;
  flex:1; min-height:0; display:flex; align-items:center; justify-content:center;
  overflow:auto; background:#000;
}
.preview-modal-body img{ max-width:100%; max-height:100%; object-fit:contain; }
.preview-modal-body video{ max-width:100%; max-height:100%; object-fit:contain; }
.preview-modal-body iframe{ width:100%; height:100%; border:none; background:#fff; }

.preview-video-spinner{
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  display:none; pointer-events:none; z-index:5;
}
.preview-video-spinner.active{ display:block; }

.preview-nav-btn{
  display:none; position:absolute; top:50%; transform:translateY(-50%);
  background:rgba(0,0,0,0.5); color:#fff; border:none; width:44px; height:44px;
  border-radius:50%; font-size:26px; line-height:1; cursor:pointer; z-index:10;
  align-items:center; justify-content:center;
}
.preview-nav-btn.prev{ left:14px; }
.preview-nav-btn.next{ right:14px; }
@media (hover:hover) and (pointer:fine){
  .preview-nav-btn{ display:flex; }
}
.preview-nav-btn:hover{ background:rgba(0,0,0,0.75); }

.sidebar-transfer{
  position:relative;
  background:var(--bg); border:1px solid var(--border); border-radius:10px;
  padding:12px 14px; margin-bottom:14px;
}
.sidebar-transfer .label,
.transfer-toast .label{
  font-size:12.5px; font-weight:600; margin-bottom:2px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; padding-right:20px;
}
.sidebar-transfer .sub,
.transfer-toast .sub{ font-size:11px; color:var(--muted); font-family:var(--mono); margin-bottom:8px; }
.sidebar-transfer .bar-track,
.transfer-toast .bar-track{ height:6px; background:var(--border); border-radius:999px; overflow:hidden; }
.sidebar-transfer .bar-fill,
.transfer-toast .bar-fill{ height:100%; background:var(--accent); transition:width .15s ease; }
.sidebar-transfer .pct,
.transfer-toast .pct{ margin-top:6px; font-family:var(--mono); font-size:11px; color:var(--muted); }
.transfer-toast-cancel{
  position:absolute; top:10px; right:10px; background:transparent; border:none;
  color:var(--danger); font-size:16px; line-height:1; cursor:pointer; padding:2px 5px; border-radius:5px;
}
.transfer-toast-cancel:hover{ background:var(--danger); color:#2b0409; }

.transfer-hint{
  position:fixed; right:20px; bottom:20px; z-index:200;
  background: linear-gradient(135deg, var(--accent), #2A9D8F);
  border:1px solid var(--accent); border-radius:10px; color:#041713; font-weight:600;
  padding:10px 14px; font-size:12.5px;
  box-shadow:0 10px 30px rgba(79,216,196,0.35);
  animation: transfer-hint-fade 4s ease forwards;
  pointer-events:none;
}
@keyframes transfer-hint-fade{
  0%{ opacity:0; transform:translateY(6px); }
  12%{ opacity:1; transform:translateY(0); }
  75%{ opacity:1; }
  100%{ opacity:0; }
}
@media (prefers-reduced-motion: reduce){ .transfer-hint{ animation:none; } }

.paypal-donate-btn{
  display:inline-flex; align-items:center; gap:9px;
  background:#0070ba; color:#fff; font-weight:700; font-size:15px;
  padding:12px 22px; border-radius:999px; text-decoration:none;
  box-shadow:0 6px 18px rgba(0,112,186,0.35); transition:background .15s ease, transform .1s ease;
}
.paypal-donate-btn:hover{ background:#005ea6; }
.paypal-donate-btn:active{ transform:scale(0.98); }
.no-spinner::-webkit-outer-spin-button, .no-spinner::-webkit-inner-spin-button{ -webkit-appearance:none; margin:0; }
.no-spinner{ -moz-appearance:textfield; }

.btn-icon-round{
  width:38px; height:38px; border-radius:50%; border:none; cursor:pointer;
  display:flex; align-items:center; justify-content:center; font-size:17px; font-weight:700;
  flex-shrink:0; transition: filter .12s ease;
}
.btn-icon-round.success{ background: var(--success); color:#04210f; }
.btn-icon-round.danger{ background: var(--danger); color:#2b0409; }
.btn-icon-round:hover{ filter:brightness(1.1); }

.hint{ font-size:11.5px; color:var(--muted-2); margin-top:6px; }

.msg{ display:flex; align-items:flex-start; gap:8px; font-size:13px; padding:10px 12px; border-radius:8px; margin-bottom:16px; line-height:1.45; }
.msg.error{background:rgba(240,87,107,0.1); color:#FF8FA0; border:1px solid rgba(240,87,107,0.25);}
.msg.success{background:rgba(62,207,142,0.1); color:#7EE7B2; border:1px solid rgba(62,207,142,0.25);}
.msg.info{background:rgba(240,180,41,0.08); color:#F5CD7C; border:1px solid rgba(240,180,41,0.25);}

.auth-footnote{ margin-top:22px; font-size:12px; color:var(--muted-2); line-height:1.6; font-family:var(--mono); }

.loading-dot{ display:inline-block; width:6px; height:6px; border-radius:50%; background: var(--accent); margin-right:2px; animation: pulse 1.1s ease-in-out infinite; }
@keyframes pulse{ 0%,100%{opacity:0.25;} 50%{opacity:1;} }

.kolonas-spinner-gear{
  transform-box: fill-box; transform-origin: center;
  animation: kolonas-spin 3s linear infinite;
}
@keyframes kolonas-spin{ from{ transform: rotate(0deg); } to{ transform: rotate(360deg); } }
.kolonas-spinner-k{ font-family: var(--mono); font-weight:800; fill: var(--text); }
@media (prefers-reduced-motion: reduce){ .kolonas-spinner-gear{ animation:none; } }

/* ================= APP SHELL (nach Login) ================= */
.app-shell{ display:flex; align-items:flex-start; min-height:100vh; }
.sidebar{
  width:240px; flex-shrink:0; background: var(--panel-2); border-right:1px solid var(--border-soft);
  display:flex; flex-direction:column; padding:22px 14px;
  position:sticky; top:0; height:100vh; overflow-y:auto;
}
.sidebar .brand{ padding:0 8px; margin-bottom:30px; }
.nav-list{ list-style:none; display:flex; flex-direction:column; gap:2px; flex:1; }
.nav-item{
  display:flex; align-items:center; gap:10px; padding:10px 12px; border-radius:8px;
  color:var(--muted); font-size:13.5px; font-weight:600; cursor:pointer; text-decoration:none;
  border-left:2px solid transparent; transition: background .12s ease, color .12s ease;
}
.nav-item .dot{ width:6px; height:6px; border-radius:50%; background:var(--muted-2); flex-shrink:0; transition: background .12s ease; }
.nav-item:hover{ background: rgba(255,255,255,0.03); color:var(--text); }
.nav-item.active{ background: var(--accent-dim); color:var(--accent); border-left-color:var(--accent); }
.nav-item.active .dot{ background: var(--accent); box-shadow:0 0 0 3px var(--accent-dim); }

.nav-chevron{ margin-left:auto; font-size:12px; transition: transform .15s ease; color:var(--muted-2); }
.nav-chevron.open{ transform: rotate(180deg); }
.nav-sublist{ list-style:none; display:flex; flex-direction:column; gap:2px; margin:2px 0 2px 18px; }
.nav-subitem{ font-size:12.5px; padding:8px 12px; }

.new-badge{
  display:inline-block; background: var(--accent); color:#041713;
  font-family:var(--mono); font-size:9.5px; font-weight:700; letter-spacing:.04em;
  text-transform:uppercase; padding:2px 6px; border-radius:999px; margin-left:6px;
  vertical-align:middle;
}

.fb-crumb{ cursor:pointer; color:var(--accent); }
.fb-crumb:hover{ text-decoration:underline; }

.view-toggle-btn{
  display:flex; align-items:center; gap:8px;
  background:transparent; border:none; cursor:pointer;
  padding:6px; flex-shrink:0;
}
.view-toggle-track{
  width:32px; height:18px; border-radius:999px; background:var(--border);
  position:relative; flex-shrink:0; transition: background .15s ease;
}
.view-toggle-thumb{
  position:absolute; top:2px; left:2px; width:14px; height:14px; border-radius:50%;
  background:var(--muted); transition: transform .15s ease, background .15s ease;
}
.view-toggle-btn.on .view-toggle-track{ background: var(--accent-dim); }
.view-toggle-btn.on .view-toggle-thumb{ transform: translateX(14px); background: var(--accent); }

.view-eye-icon{
  display:inline-flex; align-items:center; justify-content:center;
  width:22px; height:22px; border-radius:50%; flex-shrink:0;
  background: var(--accent-dim); border:none; cursor:pointer;
  font-size:12px; line-height:1; vertical-align:middle;
}
.view-eye-icon:hover{ background: var(--accent); }

.sidebar-footer{ border-top:1px solid var(--border-soft); padding-top:14px; margin-top:10px; }
.sidebar-user{ display:flex; align-items:center; gap:10px; padding:0 8px 12px; }
.sidebar-avatar{
  width:34px; height:34px; border-radius:8px; flex-shrink:0;
  background: linear-gradient(135deg, var(--accent), #2A9D8F);
  display:flex; align-items:center; justify-content:center;
  font-family:var(--mono); font-weight:700; color:#041713; font-size:14px;
}
.sidebar-user .name{ font-size:13px; font-weight:700; line-height:1.3; }
.sidebar-user .role{ font-size:11px; color:var(--muted); font-family:var(--mono); }
.sidebar .logout-btn{
  width:100%; background:transparent; border:1px solid var(--border); color:var(--muted);
  font-weight:600; font-size:12.5px; padding:9px 0; border-radius:8px; cursor:pointer;
  transition: border-color .15s ease, color .15s ease;
}
.sidebar .logout-btn:hover{ border-color: var(--danger); color:#FF8FA0; }

.main{ flex:1; min-width:0; display:flex; flex-direction:column; }
.topbar{
  padding:22px 34px; border-bottom:1px solid var(--border-soft); display:flex; align-items:center; justify-content:space-between;
  position:sticky; top:0; z-index:99999; background:var(--bg);
}
.topbar-logo, .topbar-logo-chip{ display:none; }

.topbar-embed{ flex-direction:row !important; align-items:center; gap:12px; position:relative; }
.topbar-embed .menu-toggle-btn{ display:inline-flex; position:relative; z-index:2; }
.topbar-embed .topbar-logo-chip{
  display:block; position:absolute; left:50%; top:50%; transform:translate(-50%, -50%);
}
.topbar-embed .topbar-logo{ display:block; height:32px; width:auto; }
.topbar-row2{ display:flex; align-items:center; gap:10px; width:100%; }
.topbar h1{ font-size:19px; font-weight:700; }
.topbar p{ font-size:12.5px; color:var(--muted); margin-top:3px; font-family:var(--mono); }
.page{ padding:30px 34px 60px; max-width:840px; }
.page.wide{ max-width:none; }

.card{ background:var(--panel); border:1px solid var(--border); border-radius:12px; padding:20px; margin-bottom:18px; }
.card h3{ font-size:14.5px; font-weight:700; margin-bottom:4px; }
.card .card-sub{ font-size:12.5px; color:var(--muted); margin-bottom:16px; }

.card-header-toggle{ display:flex; align-items:center; justify-content:space-between; gap:12px; cursor:pointer; user-select:none; }
.card-header-toggle .card-sub{ margin-bottom:0 !important; }
.card-header-toggle .chevron{ font-size:16px; color:var(--muted); transition: transform .15s ease; flex-shrink:0; }
.card-header-toggle .chevron.open{ transform: rotate(180deg); }
.card-body-collapsible{ margin-top:18px; }

.empty-state{ text-align:center; padding:40px 20px; color:var(--muted); font-size:13.5px; border:1px dashed var(--border); border-radius:12px; }

.announcement{ border-bottom:1px solid var(--border-soft); padding:16px 0; }
.announcement:last-child{ border-bottom:none; }
.announcement-head{ display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:6px; }
.announcement-head h4{ font-size:14.5px; font-weight:700; }
.announcement-meta{ font-size:11px; color:var(--muted-2); font-family:var(--mono); margin-top:2px; }
.announcement-body{ font-size:13.5px; color:var(--muted); line-height:1.6; white-space:pre-wrap; }
.announcement-body a{ color:var(--accent); text-decoration:underline; word-break:break-all; }
.announcement-body a:hover{ color:#fff; }
.copy-chip{
  display:inline-flex; align-items:center; gap:5px; cursor:pointer;
  background:var(--bg); border:1px dashed var(--border); border-radius:6px;
  padding:1px 7px; font-family:var(--mono); font-size:12.5px; color:var(--text);
}
.copy-chip:hover{ border-color:var(--accent); }
.copy-chip .copy-icon{ font-size:12px; color:var(--muted); }
.editor-toolbar{ display:flex; gap:6px; margin-bottom:6px; }

.iframe-wrap{ flex:1; display:flex; padding:0; }
.iframe-wrap iframe{ width:100%; height:calc(100vh - 90px); border:none; background:#fff; }

.info-row{ display:flex; justify-content:space-between; align-items:center; padding:10px 0; border-bottom:1px solid var(--border-soft); font-size:13.5px; }
.info-row:last-child{ border-bottom:none; }
.info-row .k{ color:var(--muted); font-family:var(--mono); font-size:11.5px; letter-spacing:.04em; text-transform:uppercase; }
.info-row .v{ font-weight:600; }

.user-row{ display:flex; flex-wrap:wrap; align-items:center; gap:10px; padding:14px 0; border-bottom:1px solid var(--border-soft); }
.user-row:last-child{ border-bottom:none; }
.user-row .u-info{ min-width:180px; flex:1 1 180px; }
.user-row .u-info .name{ font-weight:700; font-size:13.5px; }
.user-row .u-info .sub{ font-size:11.5px; color:var(--muted); font-family:var(--mono); }
.user-row .u-controls{ display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.user-row select{ background: var(--bg); border:1px solid var(--border); color:var(--text); font-size:12.5px; padding:7px 9px; border-radius:6px; outline:none; }
.role-badge{ font-family:var(--mono); font-size:10.5px; letter-spacing:.05em; text-transform:uppercase; padding:3px 8px; border-radius:5px; background:var(--accent-dim); color:var(--accent); }
.role-badge.user{ background:rgba(107,118,134,0.15); color:var(--muted); }
.status-badge{ font-family:var(--mono); font-size:10.5px; letter-spacing:.05em; text-transform:uppercase; padding:3px 8px; border-radius:5px; }
.status-badge.enabled{ background:rgba(62,207,142,0.12); color:var(--success); }
.status-badge.disabled{ background:rgba(240,87,107,0.12); color:#FF8FA0; }

.file-row{
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:12px 10px; border-bottom:1px solid var(--border-soft);
  border-radius:8px; transition: background .12s ease;
}
.file-row:last-child{ border-bottom:none; }
@media (hover:hover) and (pointer:fine){
  .file-row:hover{ background: rgba(255,255,255,0.035); }
}
.file-row .u-info{ min-width:0; flex:1 1 auto; overflow:hidden; }
.file-row .u-info .name{ font-weight:700; font-size:13.5px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.file-row .u-info .sub{ font-size:11.5px; color:var(--muted); font-family:var(--mono); }
.file-row .u-controls{ flex-shrink:0; }

.install-banner{
  display:flex; align-items:center; gap:12px;
  background: var(--panel); border:1px solid var(--border); border-radius:12px;
  padding:14px 16px; margin: 0 34px 18px;
}
.install-banner .install-icon{
  width:36px; height:36px; border-radius:9px; flex-shrink:0;
  background: linear-gradient(135deg, var(--accent), #2A9D8F);
  display:flex; align-items:center; justify-content:center;
  font-family:var(--mono); font-weight:700; color:#041713; font-size:15px;
}
.install-banner .install-text{ flex:1; min-width:0; }
.install-banner .install-text .t{ font-size:13.5px; font-weight:700; }
.install-banner .install-text .s{ font-size:12px; color:var(--muted); margin-top:2px; }
.install-banner .install-actions{ display:flex; gap:8px; flex-shrink:0; }
.install-banner .install-dismiss{
  background:transparent; border:none; color:var(--muted); font-size:18px; line-height:1;
  cursor:pointer; padding:4px 6px;
}
.install-banner .install-dismiss:hover{ color:var(--text); }

/* ---------------- mobiles Seitenmenü ---------------- */
.menu-toggle-btn{
  display:none;
  background:transparent; border:1px solid var(--border); color:var(--text);
  width:38px; height:38px; border-radius:8px; cursor:pointer;
  align-items:center; justify-content:center; flex-shrink:0;
}
.menu-toggle-btn:hover{ border-color: var(--accent); }
.menu-toggle-btn .bar{ display:block; width:16px; height:2px; background:currentColor; position:relative; }
.menu-toggle-btn .bar::before, .menu-toggle-btn .bar::after{
  content:''; position:absolute; left:0; width:16px; height:2px; background:currentColor;
}
.menu-toggle-btn .bar::before{ top:-5px; }
.menu-toggle-btn .bar::after{ top:5px; }

.sidebar-overlay{
  display:none; position:fixed; inset:0; background:rgba(0,0,0,0.55);
  z-index:100040; opacity:0; transition:opacity .2s ease;
}
.sidebar-overlay.open{ display:block; opacity:1; }

@media (min-width: 901px){
  /* Wenn eine eingebettete Webseite (Website / Wünsche 1 / Wünsche 2)
     geöffnet ist, verhält sich die Sidebar auch am Desktop wie das
     mobile Ausklapp-Menü: standardmäßig ausgeblendet, volle Breite für
     den eingebetteten Inhalt, per Hamburger-Button oben links erreichbar. */
  .app-shell.embed-mode .sidebar{
    position:fixed; top:0; left:0; height:100vh; width:270px;
    z-index:100050; transform:translateX(-100%); transition:transform .22s ease;
    box-shadow: 8px 0 30px rgba(0,0,0,0.4);
  }
  .app-shell.embed-mode .sidebar.open{ transform:translateX(0); }
  .app-shell.embed-mode .menu-toggle-btn{ display:inline-flex; }
}

@media (max-width: 900px){
  .app-shell{ flex-direction:column; align-items:stretch; }
  .menu-toggle-btn{ display:inline-flex; }
  .sidebar{
    position:fixed; left:0; width:270px; max-width:82vw;
    top: var(--mobile-drawer-top, 96px);
    min-height:0;
    height: calc(100vh - var(--mobile-drawer-top, 96px));
    height: calc(100dvh - var(--mobile-drawer-top, 96px));
    height: var(--mobile-drawer-height, calc(100dvh - var(--mobile-drawer-top, 96px)));
    z-index:100050; transform:translateX(-100%); transition:transform .22s ease;
    flex-direction:column; align-items:stretch; padding:16px 14px;
    padding-bottom: max(16px, env(safe-area-inset-bottom));
    overflow-y:auto; overflow-x:hidden; box-shadow: 8px 0 30px rgba(0,0,0,0.4);
    border-top:1px solid var(--border-soft);
  }
  .sidebar.open{ transform:translateX(0); }
  .sidebar .brand-sidebar{ display:none; }
  .nav-list{ flex-direction:column; gap:2px; }
  .nav-item{ white-space:normal; }
  .sidebar-footer{ display:block; flex-shrink:0; }
  .sidebar-overlay{
    top: var(--mobile-drawer-top, 96px);
    height: calc(100vh - var(--mobile-drawer-top, 96px));
    height: calc(100dvh - var(--mobile-drawer-top, 96px));
    height: var(--mobile-drawer-height, calc(100dvh - var(--mobile-drawer-top, 96px)));
  }
  .topbar{
    flex-direction:column; align-items:stretch; gap:10px;
    padding:14px 16px; position:sticky; top:0; z-index:99999; background:var(--bg);
    padding-top: max(14px, env(safe-area-inset-top));
  }
  .topbar-logo-chip{
    display:block; align-self:center; background:#0A0F1A; border-radius:10px; padding:8px 14px;
  }
  .topbar-logo{ display:block; height:44px; width:auto; }
  .page{ padding:20px; padding-bottom: max(20px, env(safe-area-inset-bottom)); }
  .iframe-wrap iframe{ height: var(--mobile-content-height, 70vh); }
  .install-banner{ margin: 0 20px 16px; flex-wrap:wrap; }
}
@media (max-width: 860px){
  .shell{flex-direction:column;}
  .infra-panel{ min-height:auto; padding: 28px 24px; padding-top: max(28px, env(safe-area-inset-top)); }
  .infra-headline{margin-top:32px;}
  .infra-headline h1{font-size:26px;}
  .auth-panel{padding:36px 22px 60px;}
}
@media (max-width: 480px){
  .user-row .u-controls{ width:100%; }
  .user-row select, .user-row .btn{ flex:1 1 auto; }
}
@media (prefers-reduced-motion: reduce){ .loading-dot{animation:none;} }
