/* ========== Root palette ========== */
:root{
  --bg:#0b1020;          /* deep navy */
  --bg2:#0f172a;         /* slate */
  --card:#111827;        /* card surface */
  --muted:#94a3b8;       /* muted text */
  --border:#1f2937;      /* borders */
  --text:#e5e7eb;        /* foreground */
  --brand:#f59e0b;       /* Plex orange accent */
  --ok:#86efac;          /* success */
  --warn:#fbbf24;        /* warning */
  --portal-bg-color: #0b1020;
}

/* Reset / Base */
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;color:var(--text);font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,"Helvetica Neue",Arial}
body.modal-open{overflow:hidden;}

/* ========== Overseerr-like background ========== */
/* Layered gradients for rich depth */
.bg{
  position: relative;
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  background:
    radial-gradient(70% 60% at 10% 10%, #1e293b 0%, transparent 60%),
    radial-gradient(70% 60% at 90% 20%, #0b1220 0%, transparent 55%),
    linear-gradient(180deg, var(--bg) 0%, var(--bg2) 100%);
  overflow-x: hidden;
  overflow-y: auto;
}
.bg.bg-mode-solid{
  background: var(--portal-bg-color);
}
.bg.bg-mode-image{
  background-image:
    linear-gradient(180deg, rgba(11,16,32,.36), rgba(11,16,32,.62)),
    var(--portal-bg-image);
  background-position: center, center;
  background-size: cover, cover;
  background-repeat: no-repeat, no-repeat;
  background-color: var(--portal-bg-color);
}
.bg.bg-mode-image.bg-image-fit{
  background-size: cover, contain;
}
.bg.bg-mode-image.bg-image-centered{
  background-size: cover, auto;
}
.bg.bg-mode-image.bg-image-original{
  background-position: center, left top;
  background-size: cover, auto;
}
.bg.bg-mode-image.bg-image-stretch{
  background-size: cover, 100% 100%;
}
.bg.bg-mode-image.bg-image-tile{
  background-position: center, left top;
  background-size: cover, auto;
  background-repeat: no-repeat, repeat;
}

/* Animated film grain (very subtle) */
.bg::after{
  content:"";
  position:fixed; inset:0;
  background-image: repeating-radial-gradient(rgba(255,255,255,.012) 0 1px, transparent 2px 4px);
  opacity:.25;
  mix-blend-mode: soft-light;
  animation: grain 12s steps(10) infinite;
  pointer-events:none;
}
@keyframes grain{
  0%{transform:translate(0,0)}
  10%{transform:translate(-1%,1%)}
  20%{transform:translate(1%,-1%)}
  30%{transform:translate(-1%,0)}
  40%{transform:translate(1%,1%)}
  50%{transform:translate(0,-1%)}
  60%{transform:translate(-1%,1%)}
  70%{transform:translate(1%,0)}
  80%{transform:translate(-1%,-1%)}
  90%{transform:translate(1%,-1%)}
  100%{transform:translate(0,0)}
}

/* ========== Layout ========== */
.center{flex:1;min-height:0;display:grid;place-items:center;padding:2rem;position:relative;z-index:1}

.card{
  width:100%;max-width:520px;
  background:linear-gradient(180deg, rgba(17,24,39,.9), rgba(17,24,39,.92));
  border:1px solid var(--border);
  padding:2rem;border-radius:16px;
  box-shadow:0 10px 40px rgba(0,0,0,.35), 0 0 0 1px rgba(255,255,255,.02) inset;
  backdrop-filter: blur(6px);
  animation: fadeIn .8s ease-out both;
  position:relative;
  overflow:hidden;
}
.card.card-mode-solid{background:var(--portal-card-color, #111827);}

.brand{display:flex;flex-direction:column;align-items:center;gap:.5rem;margin-bottom:1.25rem}
.logo{width:42px;height:42px;border-radius:8px}
.portal-logo-image{
  width:min(100%, 320px);
  height:auto;
  max-height:120px;
  border-radius:0;
  object-fit:contain;
  background:transparent;
  display:block;
}
h1{font-size:1.6rem;margin:0}
.muted{color:var(--muted)}
.footnote{margin-top:1rem;color:var(--muted);font-size:.9rem}

/* ========== Buttons ========== */
.auth-btn {
  font-size: 18px;
  font-weight: 700;
  padding: 14px 22px;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  border: 1px solid transparent;
  cursor: pointer;
  line-height: 1;
  transition:
    transform .18s ease,
    box-shadow .18s ease,
    background-color .18s ease,
    border-color .18s ease;
}
.auth-btn:hover:not(:disabled) {
  transform: translateY(-2px);
}
.auth-btn:active:not(:disabled) {
  transform: translateY(0);
}
.auth-btn:disabled {
  opacity: 0.6;
  cursor: not-allowed;
  box-shadow: none;
  transform: none;
}
.auth-btn:focus-visible {
  outline: 2px solid rgba(255, 255, 255, 0.65);
  outline-offset: 2px;
}

/* Overseerr-style Plex CTA in Plex Orange */
.plex-btn {
  background: #e5a00d; /* Plex orange */
  border: 1px solid #d48f0b;
  color: #000000; /* black text + icon */
  font-size: 18px;
  font-weight: 700;
  padding: 14px 22px;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  box-shadow: 0 6px 20px rgba(229, 160, 13, 0.25);
  transition:
    transform .18s ease,
    box-shadow .18s ease,
    background-color .18s ease,
    border-color .18s ease;
}

.plex-btn:hover {
  background: #f59e0b; /* brighter Plex orange */
  border-color: #cc7a00;
  box-shadow: 0 12px 36px rgba(229, 160, 13, 0.35);
  transform: translateY(-2px);
}

.plex-btn:active {
  transform: translateY(0);
  background: #d48f0b;
  border-color: #a86400;
}

/* ---------- Icon sizing inside the button (applies to Emby/Jellyfin <img>, inline <svg>, and Plex mask) */
.plex-btn img,
.plex-btn svg,
.plex-btn .plex-logo-mask{
  width:22px;
  height:22px;
  max-width:22px;
  max-height:22px;
  flex:0 0 22px;
  display:inline-block;
  object-fit:contain;
  vertical-align:middle;
}
.auth-btn img,
.auth-btn svg,
.auth-btn .plex-logo-mask{
  width:22px;
  height:22px;
  max-width:22px;
  max-height:22px;
  flex:0 0 22px;
  display:inline-block;
  object-fit:contain;
  vertical-align:middle;
}

/* Inline SVG logo â†’ force black (Plex mask already black via background) */
.plex-btn .plex-logo,
.plex-btn .plex-logo *{
  fill:#000 !important;
  stroke:#000 !important;
}

/* If you happen to use an <img> for the Plex logo, make it black via filter */
.plex-btn img.plex-logo{
  filter:brightness(0) saturate(100%) !important;
}

/* Monochrome Plex icon, painted by background-color (always black) */
.plex-btn .plex-logo-mask{
  background-color:#000;                 /* <- icon color */
  -webkit-mask-image:url('/static/plex.svg');
  -webkit-mask-repeat:no-repeat;
  -webkit-mask-position:center;
  -webkit-mask-size:contain;
  mask-image:url('/static/plex.svg');
  mask-repeat:no-repeat;
  mask-position:center;
  mask-size:contain;
}

/* badges for portal auth state */
.btn.badge{
  cursor: default;
  font-weight: 700;
  border-radius: 12px;
  padding: .6rem 1rem;
  letter-spacing:.2px;
}
.btn.badge.success{
  background:#0f3d25;
  border:1px solid #1f7a4a;
  color:#b8f3d3;
}
.btn.badge.danger{
  background:#3d0f16;
  border:1px solid #7a1f2f;
  color:#f3b8c2;
}

.badge{
  display:inline-block;padding:.35rem .55rem;border-radius:999px;
  font-weight:700;font-size:.85rem;border:1px solid transparent
}
.badge.ok{background:#052e1a;border-color:#0a5a35;color:#b2f5cf}
.badge.warn{background:#2c1605;border-color:#8a4b16;color:#ffd8b3}

/* (Optional/unused) Jellyfin button skeleton â€” keep sizes consistent if you ever switch classes */
.jellyfin-btn{
  background:#7a45ff;
  border:1px solid #5933c2;
  color:#fff;
  font-size:18px;
  font-weight:700;
  padding:14px 22px;
  border-radius:12px;
  display:inline-flex;
  align-items:center;
  gap:12px;
}

/* ========== Footer ========== */
.footer{
  flex-shrink:0;
  display:flex;justify-content:center;align-items:center;
  padding:14px 10px;font-size:14px;color:#8b8f99;z-index:1;
  background: linear-gradient(to top, rgba(11,16,32,.55), rgba(11,16,32,0));
  backdrop-filter: blur(2px);
}
.footer a{
  color:var(--brand);
  text-decoration:none;font-weight:700;
}
.footer a:hover{text-decoration:underline}

/* ========== Small niceties ========== */
a{color:var(--text)}
a:hover{opacity:.9}
@keyframes fadeIn{from{opacity:0;transform:translateY(14px)} to{opacity:1;transform:translateY(0)}}

/* ========== Admin Console ========== */
.admin-page{--brand:#18d1e7;--bg:#090b0f;--bg2:#0e1017;--card:#13141a;--border:#1e2030;--muted:#8b93a8;--text:#e5e7eb;--kicker:#93c5fd;--info-icon-bg:#334155;--info-icon-fg:#f8fafc;--info-icon-border:#64748b;--info-icon-hover-bg:#475569;--info-icon-hover-border:#94a3b8;--status-info-fg:#dbeafe;--status-ok-fg:#dcfce7;--status-err-fg:#ffe4e6;--danger-fg:#ffe4e6;--secret-fg:#dbeafe;--panel-shadow:0 2px 8px rgba(0,0,0,.3);--modal-shadow:0 24px 48px rgba(0,0,0,.45);--menu-shadow:0 8px 24px rgba(0,0,0,.4);background:var(--bg2);color:var(--text);min-height:100vh;margin:0;}
/* Light theme (forced) */
.admin-page[data-theme="light"]{--brand:#0891b2;--bg:#f8fafc;--bg2:#f1f5f9;--card:#ffffff;--border:#e2e8f0;--muted:#64748b;--text:#0f172a;--kicker:#2563eb;--info-icon-bg:#e2e8f0;--info-icon-fg:#334155;--info-icon-border:#94a3b8;--info-icon-hover-bg:#cbd5e1;--info-icon-hover-border:#64748b;--status-info-fg:#1e40af;--status-ok-fg:#166534;--status-err-fg:#9f1239;--danger-fg:#7f1d1d;--secret-fg:#1e40af;--panel-shadow:0 1px 4px rgba(0,0,0,.08);--modal-shadow:0 24px 48px rgba(0,0,0,.15);--menu-shadow:0 8px 24px rgba(0,0,0,.12);}
/* Light theme (system preference) */
@media(prefers-color-scheme:light){.admin-page:not([data-theme="dark"]){--brand:#0891b2;--bg:#f8fafc;--bg2:#f1f5f9;--card:#ffffff;--border:#e2e8f0;--muted:#64748b;--text:#0f172a;--kicker:#2563eb;--info-icon-bg:#e2e8f0;--info-icon-fg:#334155;--info-icon-border:#94a3b8;--info-icon-hover-bg:#cbd5e1;--info-icon-hover-border:#64748b;--status-info-fg:#1e40af;--status-ok-fg:#166534;--status-err-fg:#9f1239;--danger-fg:#7f1d1d;--secret-fg:#1e40af;--panel-shadow:0 1px 4px rgba(0,0,0,.08);--modal-shadow:0 24px 48px rgba(0,0,0,.15);--menu-shadow:0 8px 24px rgba(0,0,0,.12);}}
.admin-layout{display:flex;min-height:100vh;}

/* ---- Sidebar ---- */
.admin-sidebar{width:240px;min-width:240px;height:100vh;position:sticky;top:0;background:var(--card);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden;transition:width .2s ease,min-width .2s ease;}
.admin-sidebar-header{display:flex;align-items:center;gap:.75rem;padding:1.1rem 1rem;border-bottom:1px solid var(--border);flex-shrink:0;overflow:hidden;}
.admin-sidebar-logo{width:30px;height:30px;flex-shrink:0;}
.admin-sidebar-title{font-weight:700;font-size:.95rem;color:var(--text);white-space:nowrap;overflow:hidden;transition:opacity .15s ease;}
.admin-sidebar-nav{flex:1;display:flex;flex-direction:column;gap:.2rem;padding:.6rem .5rem;overflow-y:auto;}
.admin-sidebar-footer{padding:.75rem 1rem;border-top:1px solid var(--border);flex-shrink:0;overflow:hidden;}
.admin-sidebar-version{font-size:.72rem;color:var(--muted);white-space:nowrap;display:block;transition:opacity .15s ease;text-decoration:none;}
.admin-sidebar-version:hover{color:var(--brand);}

/* Collapsed sidebar */
.admin-layout[data-collapsed] .admin-sidebar{width:60px;min-width:60px;}
.admin-layout[data-collapsed] .admin-sidebar-title{opacity:0;}
.admin-layout[data-collapsed] .admin-sidebar-version{opacity:0;}
.admin-layout[data-collapsed] .admin-tab span{opacity:0;width:0;overflow:hidden;}
.admin-layout[data-collapsed] .admin-tab{justify-content:center;}

/* ---- Main area ---- */
.admin-main-area{flex:1;display:flex;flex-direction:column;min-width:0;}

/* ---- Header ---- */
.admin-header{display:flex;justify-content:space-between;align-items:center;padding:.875rem 1.5rem;background:var(--card);border-bottom:1px solid var(--border);flex-shrink:0;gap:1rem;}
.admin-header-left{display:flex;align-items:center;gap:.875rem;min-width:0;}
.admin-header h1{margin:0;font-size:1.05rem;white-space:nowrap;}
.admin-header .muted{margin:.15rem 0 0;font-size:.82rem;}
.admin-header-actions{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;flex-shrink:0;}
.admin-home-link{text-decoration:none;}
.highlight{color:var(--brand);font-weight:600;}
/* ---- User menu dropdown ---- */
.user-menu{position:relative;}
.user-menu-trigger{display:flex;align-items:center;gap:.45rem;max-width:180px;}
.user-menu-trigger span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.user-menu-chevron{flex-shrink:0;transition:transform .15s ease;}
.user-menu.open .user-menu-chevron{transform:rotate(180deg);}
.user-menu-dropdown{position:absolute;right:0;top:calc(100% + .5rem);min-width:180px;background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:var(--menu-shadow);z-index:100;overflow:hidden;display:flex;flex-direction:column;}
.user-menu-dropdown[hidden]{display:none;}
.user-menu-item{display:flex;align-items:center;gap:.6rem;padding:.65rem 1rem;font-size:.88rem;font-weight:500;color:var(--text);background:transparent;border:none;cursor:pointer;text-decoration:none;text-align:left;width:100%;white-space:nowrap;transition:background .12s;}
.user-menu-item:hover{background:rgba(148,163,184,.1);}
.user-menu-item-danger{color:#f87171;}
.user-menu-item-danger:hover{background:rgba(248,113,113,.1);}
.user-menu-logout{margin:0;padding:0;border-top:1px solid var(--border);}
/* ---- Theme menu dropdown ---- */
.theme-menu{position:relative;}
.theme-menu-dropdown{position:absolute;right:0;top:calc(100% + .5rem);min-width:140px;background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:var(--menu-shadow);z-index:100;overflow:hidden;display:flex;flex-direction:column;}
.theme-menu-dropdown[hidden]{display:none;}
.theme-menu-item{display:flex;align-items:center;gap:.6rem;padding:.6rem .9rem;font-size:.88rem;font-weight:500;color:var(--text);background:transparent;border:none;cursor:pointer;text-align:left;width:100%;white-space:nowrap;transition:background .12s;}
.theme-menu-item:hover{background:rgba(148,163,184,.1);}
.theme-menu-item.active{color:var(--brand);}
.theme-menu-item.active:hover{background:rgba(24,209,231,.08);}
.sidebar-toggle,.theme-toggle{background:transparent;border:1px solid var(--border);border-radius:7px;color:var(--muted);width:34px;height:34px;display:flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;transition:background .15s,border-color .15s,color .15s;}
.sidebar-toggle:hover,.theme-toggle:hover{background:rgba(148,163,184,.1);border-color:rgba(148,163,184,.35);color:var(--text);}
.sidebar-toggle:focus-visible,.theme-toggle:focus-visible{outline:2px solid rgba(24,209,231,.6);outline-offset:2px;}

/* ---- Nav tabs ---- */
.admin-tab{display:flex;align-items:center;gap:.6rem;padding:.55rem .75rem;border-radius:7px;border:1px solid transparent;background:transparent;color:var(--muted);font-size:.875rem;font-weight:500;cursor:pointer;text-align:left;width:100%;white-space:nowrap;overflow:hidden;transition:background .15s,border-color .15s,color .15s;}
.admin-tab svg{width:17px;height:17px;flex-shrink:0;}
.admin-tab span{overflow:hidden;transition:opacity .1s,width .1s;}
.admin-tab:hover:not(.active){background:rgba(148,163,184,.08);color:var(--text);}
.admin-tab.active{background:rgba(24,209,231,.1);border-color:rgba(24,209,231,.28);color:var(--brand);}

/* ---- Status banner ---- */
.status-banner{margin:.875rem 1.5rem 0;padding:.7rem 1rem;border-radius:8px;display:none;line-height:1.4;font-size:.88rem;}
.status-banner.show{display:block;}
.status-banner.info{background:rgba(59,130,246,.14);border:1px solid rgba(59,130,246,.4);color:var(--status-info-fg);}
.status-banner.success{background:rgba(34,197,94,.14);border:1px solid rgba(34,197,94,.4);color:var(--status-ok-fg);}
.status-banner.error{background:rgba(248,113,113,.14);border:1px solid rgba(248,113,113,.4);color:var(--status-err-fg);}

/* ---- Content ---- */
.admin-content{flex:1;padding:1.25rem 1.5rem;overflow:auto;}
.admin-panels{display:grid;gap:1.25rem;grid-template-columns:1fr;align-items:start;}

/* ---- Panels ---- */
.panel{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:1.25rem;box-shadow:var(--panel-shadow);}
.panel-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.875rem;}
.panel-header-actions{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;}
.panel-helper{color:var(--muted);margin:0 0 1rem;font-size:.85rem;line-height:1.5;}
.version-badge{font-size:.78rem;color:var(--muted);font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;}
.icon-btn{background:rgba(148,163,184,.08);border:1px solid rgba(148,163,184,.22);color:var(--text);width:30px;height:30px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;line-height:1;font-weight:700;cursor:pointer;transition:background .15s,border-color .15s;}
.icon-btn:hover:not(:disabled){background:rgba(24,209,231,.14);border-color:rgba(24,209,231,.35);}
.icon-btn:disabled{opacity:.5;cursor:not-allowed;}
.icon-btn:focus-visible{outline:2px solid rgba(24,209,231,.6);outline-offset:2px;}

/* ---- Buttons ---- */
.ghost-btn,.primary-btn,.success-btn,.danger-btn{padding:.55rem 1.1rem;border-radius:8px;font-weight:600;font-size:.88rem;line-height:1;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;cursor:pointer;transition:background .15s,border-color .15s,opacity .15s;color:var(--text);border:1px solid transparent;}
.ghost-btn{background:transparent;border-color:var(--border);}
.ghost-btn:hover:not(:disabled){background:rgba(148,163,184,.1);border-color:rgba(148,163,184,.3);}
.ghost-btn:disabled,.primary-btn:disabled,.success-btn:disabled,.danger-btn:disabled{opacity:.5;cursor:not-allowed;}
.ghost-btn:focus-visible,.primary-btn:focus-visible,.success-btn:focus-visible,.danger-btn:focus-visible{outline:2px solid rgba(24,209,231,.6);outline-offset:2px;}
.primary-btn{background:var(--brand);border-color:var(--brand);color:#001518;}
.primary-btn:hover:not(:disabled){background:#13bdd2;border-color:#13bdd2;}
.success-btn{background:#22c55e;border-color:#22c55e;color:#052e16;}
.success-btn:hover:not(:disabled){background:#16a34a;border-color:#16a34a;}
.danger-btn{background:rgba(248,113,113,.18);border-color:rgba(248,113,113,.5);color:var(--danger-fg);}
.danger-btn:hover:not(:disabled){background:rgba(248,113,113,.26);}

/* ---- Config form ---- */
#config-editor{width:100%;min-height:260px;background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:1rem;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;font-size:.9rem;resize:vertical;}
.config-fields{display:flex;flex-direction:column;gap:1rem;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:1rem;}
.config-section-stack{display:flex;flex-direction:column;gap:1.25rem;}
.config-form-grid{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));}
.config-form-row{display:flex;flex-direction:column;gap:.4rem;}
.config-form-row label{font-weight:600;font-size:.88rem;}
.form-label{font-weight:600;font-size:.9rem;}
.config-form-row input,.config-form-row select,.config-form-row textarea{background:var(--bg2);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:.55rem .8rem;font-family:inherit;font-size:.9rem;}
.config-form-row textarea{resize:vertical;min-height:80px;}
.config-form-group{border:1px dashed rgba(148,163,184,.3);border-radius:8px;padding:1rem;display:flex;flex-direction:column;gap:.8rem;}
.config-form-group h4{margin:0;font-size:.9rem;color:var(--brand);}
.portal-bg-grid{display:grid;gap:1rem;}
.portal-bg-grid-top{grid-template-columns:repeat(2,minmax(220px,1fr));}
.portal-bg-grid-bottom{grid-template-columns:minmax(260px,2fr) minmax(180px,1fr) minmax(170px,1fr);}
.portal-bg-path{min-width:0;}
.service-links-editor{display:flex;flex-direction:column;gap:.75rem;}
.service-link-row{display:grid;gap:.65rem;grid-template-columns:minmax(120px,1fr) minmax(180px,2fr) 130px minmax(160px,1fr) auto;align-items:end;}
.service-link-row .service-link-color{-webkit-appearance:none;appearance:none;width:100%;min-width:110px;height:40px;padding:0;background:transparent;border:1px solid var(--border);border-radius:8px;cursor:pointer;}
.bg.bg-mode-solid::after{display:none;}
.service-link-row .service-link-color::-webkit-color-swatch-wrapper{padding:3px;}
.service-link-row .service-link-color::-webkit-color-swatch{border:none;border-radius:6px;}
.service-link-row .service-link-color::-moz-color-swatch{border:none;border-radius:6px;}
#app-portal-bg-color,
#app-portal-modal-color,
#app-portal-title-color,
#app-portal-body-text-color{-webkit-appearance:none;appearance:none;width:100%;height:40px;padding:0;background:transparent;border:1px solid var(--border);border-radius:8px;cursor:pointer;}
#app-portal-bg-color::-webkit-color-swatch-wrapper,
#app-portal-modal-color::-webkit-color-swatch-wrapper,
#app-portal-title-color::-webkit-color-swatch-wrapper,
#app-portal-body-text-color::-webkit-color-swatch-wrapper{padding:3px;}
#app-portal-bg-color::-webkit-color-swatch,
#app-portal-modal-color::-webkit-color-swatch,
#app-portal-title-color::-webkit-color-swatch,
#app-portal-body-text-color::-webkit-color-swatch{border:none;border-radius:6px;}
#app-portal-bg-color::-moz-color-swatch,
#app-portal-modal-color::-moz-color-swatch,
#app-portal-title-color::-moz-color-swatch,
#app-portal-body-text-color::-moz-color-swatch{border:none;border-radius:6px;}
.service-link-empty{margin:0;color:var(--muted);font-size:.85rem;}
.admin-actions{display:flex;align-items:center;gap:1rem;margin-top:1rem;}
.admin-actions input{flex:1;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:.55rem .8rem;color:var(--text);}
.admin-actions .primary-btn{min-width:130px;}
.config-tools{display:flex;gap:.75rem;margin-bottom:1rem;flex-wrap:wrap;}
.config-tools .ghost-btn{min-width:100px;}
.config-tools input[type="file"]{display:none;}
.panel-section-head .config-tools{margin-bottom:0;align-items:center;}
.panel-section .oauth-form{margin-top:0;}
.panel-section .backup-schedule{margin-top:0;margin-bottom:0;}
.panel-section .admin-actions{margin-top:0;}
.config-form-group .status-banner{margin:0;}
.config-form-group .backup-table-wrapper{margin-top:0;}

/* ---- Logs ---- */
.logs-section{display:flex;flex-direction:column;gap:1rem;padding:1rem 0;}
.logs-section+.logs-section{border-top:1px solid var(--border);}
.logs-section-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;}
.logs-section-header h3{margin:0;}
.logs-filters,.logs-stream-controls{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));align-items:end;}
.logs-filters .form-row,.logs-stream-controls .form-row{display:flex;flex-direction:column;gap:.4rem;}
.logs-filters select,.logs-stream-controls select{background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:.55rem .8rem;}
.logs-pagination{display:flex;align-items:center;justify-content:flex-end;gap:.75rem;flex-wrap:wrap;}
.logs-stream-actions{display:flex;gap:.75rem;align-items:center;flex-wrap:wrap;}
.logs-table-wrapper{margin-top:0;}
.logs-table{min-width:880px;}
.logs-stream-output{margin:0;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:1rem;min-height:320px;max-height:520px;overflow:auto;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;font-size:.82rem;line-height:1.45;white-space:pre-wrap;word-break:break-word;}

/* ---- Secret banner ---- */
.secret-banner{display:none;padding:.7rem 1rem;margin:0 0 1rem;border-radius:8px;border:1px dashed rgba(59,130,246,.5);background:rgba(59,130,246,.1);color:var(--secret-fg);font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;word-break:break-all;}
.secret-banner.show{display:block;}

/* ---- OAuth ---- */
.oauth-client-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1rem;margin-bottom:1.25rem;}
.oauth-client-card{background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:1rem;display:flex;flex-direction:column;gap:.75rem;cursor:pointer;transition:border-color .15s,background .15s;}
.oauth-client-card:hover{border-color:rgba(24,209,231,.4);background:rgba(24,209,231,.04);}
.oauth-client-card h4{margin:0;font-size:1rem;}
.oauth-client-meta{font-size:.85rem;color:var(--muted);}
.oauth-client-actions{display:flex;gap:.5rem;flex-wrap:wrap;}
.oauth-detail-actions{display:flex;gap:.75rem;flex-wrap:wrap;margin-top:1rem;}
.oauth-detail-reason-row{margin-top:1rem;}
.actions-cell{display:flex;justify-content:flex-end;gap:.5rem;flex-wrap:wrap;}
.mono{font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;word-break:break-all;}
.oauth-form{display:flex;flex-direction:column;gap:1rem;margin-top:1.5rem;}
.oauth-form .form-row{display:flex;flex-direction:column;gap:.4rem;}
.oauth-form label{font-weight:600;font-size:.9rem;}
.oauth-form input,.oauth-form select,.oauth-form textarea{background:var(--bg2);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:.55rem .8rem;font-family:inherit;font-size:.9rem;resize:vertical;}
.field-hint{color:var(--muted);font-size:.8rem;}
.oauth-form-actions{display:flex;align-items:center;gap:.75rem;}
.oauth-form-actions .ghost-btn{border-color:rgba(148,163,184,.3);}
.oauth-scope-picker{display:flex;gap:.75rem;align-items:center;flex-wrap:wrap;}
.oauth-scope-picker select{min-width:240px;flex:1;}
.oauth-scope-selected{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem;}
.oauth-scope-pill{padding:.4rem .7rem;}
.oauth-scope-remove{margin-left:.4rem;font-weight:700;}

/* ---- Backups ---- */
.backup-status-grid{display:grid;gap:.75rem;grid-template-columns:repeat(auto-fit,minmax(180px,220px));}
.backup-status-card{display:flex;flex-direction:column;gap:.3rem;padding:.85rem 1rem;border-radius:10px;background:var(--bg);border:1px solid var(--border);}
.backup-status-label{font-size:.76rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);}
.backup-status-value{font-size:1rem;font-weight:700;color:var(--text);line-height:1.35;word-break:break-word;}
.backup-status-note{font-size:.78rem;color:var(--muted);}
.backup-schedule{display:flex;flex-direction:column;gap:1.2rem;margin:1.25rem 0;}
.backup-toggle{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;}
.backup-toggle label{display:flex;align-items:center;gap:.5rem;font-weight:600;}
.backup-toggle .muted{font-size:.85rem;}
.backup-schedule-grid{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));}
.backup-schedule-row{display:flex;flex-direction:column;gap:.4rem;}
.backup-schedule-row input,.backup-schedule-row select{background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:.55rem .8rem;}
.backup-sections{border:1px dashed rgba(148,163,184,.3);border-radius:8px;padding:1rem;display:flex;flex-wrap:wrap;gap:1rem;margin:0;}
.backup-sections legend{padding:0 .5rem;font-weight:600;}
.backup-sections label{display:flex;align-items:center;gap:.5rem;}
.backup-schedule-actions{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem;margin-top:.5rem;}
.backup-schedule-actions input{flex:1;min-width:220px;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:.55rem .8rem;color:var(--text);}
.backup-table-wrapper{width:100%;overflow-x:auto;margin-top:1rem;}
.backup-table{width:100%;border-collapse:collapse;min-width:540px;}
.backup-table th,.backup-table td{padding:.55rem .75rem;border-bottom:1px solid var(--border);text-align:left;}
.backup-table th{font-size:.78rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);}
.backup-actions{display:flex;gap:.5rem;flex-wrap:wrap;justify-content:flex-end;}
#backup-empty{margin:1rem 0;color:var(--muted);}

/* ---- Panel layout (shared across all tabs) ---- */
.panel-layout{display:flex;flex-direction:column;gap:1.25rem;}
.panel-title-block{display:flex;flex-direction:column;gap:.2rem;min-width:0;flex:1;}
.panel-title-block h2{margin:0;}
.panel-title-block .backup-status-grid{margin-top:.55rem;}
.panel-kicker{font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--kicker);font-weight:700;}
.ldap-sync-header-actions{display:flex;gap:.75rem;flex-wrap:wrap;justify-content:flex-end;align-items:center;}
.ldap-sync-header-actions .ghost-btn{opacity:.85;}
.ldap-sync-header-actions .primary-btn{box-shadow:0 8px 20px rgba(24,209,231,.18);}
.ldap-sync-header-actions .success-btn{box-shadow:0 8px 20px rgba(34,197,94,.18);}
.panel-section{border:1px solid var(--border);border-radius:10px;padding:1rem 1.1rem;background:var(--bg2);}
.panel-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1rem;}
.panel-section-title{display:flex;align-items:center;gap:.55rem;position:relative;}
.panel-section-head h3{margin:0;font-size:1rem;}
.section-info-icon{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;padding:0;border-radius:999px;border:1px solid var(--info-icon-border);background:var(--info-icon-bg);color:var(--info-icon-fg);font-size:.75rem;font-weight:700;line-height:1;cursor:help;position:relative;flex:0 0 auto;}
.section-info-icon::after{content:attr(data-tooltip);position:absolute;left:0;top:calc(100% + .55rem);min-width:220px;max-width:320px;padding:.6rem .75rem;border-radius:8px;background:var(--bg);border:1px solid rgba(148,163,184,.28);box-shadow:0 12px 28px rgba(0,0,0,.32);color:var(--text);font-size:.82rem;font-weight:500;line-height:1.4;opacity:0;pointer-events:none;transform:translateY(-4px);transition:opacity .16s ease,transform .16s ease;z-index:10;}
.section-info-icon:hover::after,.section-info-icon:focus-visible::after{opacity:1;transform:translateY(0);}
.section-info-icon:hover{background:var(--info-icon-hover-bg);border-color:var(--info-icon-hover-border);}
.section-info-icon:focus-visible{outline:2px solid rgba(24,209,231,.6);outline-offset:2px;}
.ldap-sync-overview-grid{display:grid;gap:.85rem;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));}
.ldap-sync-card{display:flex;flex-direction:column;gap:.35rem;padding:.9rem 1rem;border-radius:10px;background:var(--bg);border:1px solid var(--border);}
.ldap-sync-card-emphasis{grid-column:span 2;min-width:0;}
.ldap-sync-card-label{font-size:.76rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);}
.ldap-sync-card-value{font-size:1.05rem;font-weight:700;color:var(--text);}
.ldap-sync-test-grid{display:grid;gap:.75rem;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));margin-top:.85rem;}
.ldap-sync-test-item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.85rem 1rem;border-radius:10px;background:var(--bg);border:1px solid var(--border);}
.ldap-sync-test-label{font-size:.88rem;font-weight:600;color:var(--text);}
.ldap-sync-form{margin-top:0;}
.ldap-sync-settings-grid{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));}
.ldap-sync-scheduler-grid{margin-bottom:1rem;}
.ldap-sync-scheduler-settings .form-row{padding:.9rem 1rem;border-radius:10px;background:var(--bg);border:1px solid var(--border);}
.ldap-sync-toggle-card{padding:0;border:none;background:none;}
.ldap-sync-toggle-card input{margin-top:.2rem;}
.ldap-sync-toggle-group{display:flex;flex-direction:column;gap:.8rem;margin-top:1rem;}
.ldap-sync-toggle{display:flex;align-items:flex-start;gap:.65rem;padding:.8rem .9rem;border-radius:10px;background:var(--bg);border:1px solid var(--border);}
.ldap-sync-toggle input{margin-top:.15rem;}
.ldap-sync-toggle span{font-weight:600;}

/* ---- Access Control ---- */
.access-binding-helper{margin-bottom:0;}
.rbac-binding-editor{display:flex;flex-direction:column;gap:.75rem;}
.rbac-binding-list{display:flex;flex-direction:column;gap:.75rem;}
.rbac-binding-row{display:grid;gap:.75rem;grid-template-columns:minmax(220px,2fr) minmax(140px,1fr) auto;align-items:end;}
.rbac-binding-row input,.rbac-binding-row select{background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:.55rem .8rem;}
.rbac-binding-row-header{align-items:center;color:var(--muted);font-size:.8rem;letter-spacing:.05em;text-transform:uppercase;}
.rbac-binding-row-header span:last-child{visibility:hidden;}
.rbac-user-pick{padding:.4rem .7rem;}
.actions-col{width:1%;}
.rbac-system-chip{display:inline-flex;align-items:center;margin-left:.4rem;padding:.1rem .45rem;border-radius:999px;background:rgba(148,163,184,.14);border:1px solid rgba(148,163,184,.3);color:var(--muted);font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;vertical-align:middle;}

/* ---- Modals ---- */
.modal{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;width:100vw;height:100vh;padding:2rem;z-index:2000;background:transparent;border:none;max-width:none;max-height:none;}
.modal[hidden]{display:none;}
.modal-backdrop{position:absolute;inset:0;background:transparent;}
.modal::backdrop{background:transparent;}
.modal-dialog{position:relative;background:var(--card);border:1px solid var(--border);border-radius:12px;max-width:640px;width:100%;padding:2rem 1.75rem 1.75rem;box-shadow:var(--modal-shadow);}
.modal-dialog h3{margin:0 0 1rem;color:var(--text);}
.modal-dialog:focus{outline:none;}
.modal-body{max-height:60vh;overflow:auto;line-height:1.5;color:var(--text);}
.modal-body p{margin:0 0 1rem;}
.modal-body ul{margin:0 0 1rem 1.25rem;padding:0;}
.modal-body li{margin:.35rem 0;}
.modal-body pre{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:1rem;overflow:auto;font-size:.88rem;}
.modal-body code{font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;}
.close-btn{position:absolute;top:1rem;right:1rem;}

/* ---- Footer ---- */
.admin-footer{padding:.875rem 1.5rem;border-top:1px solid var(--border);background:var(--card);color:var(--muted);text-align:center;font-size:.82rem;}

.consent-card{max-width:520px;}
.consent-section{margin:1.5rem 0;}
.consent-section h2{margin:0 0 .75rem;font-size:1.1rem;}
.scope-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem;}
.scope-list li{background:rgba(148,163,184,.12);border:1px solid rgba(148,163,184,.16);padding:.85rem 1rem;border-radius:12px;display:flex;flex-direction:column;gap:.35rem;}
.scope-list strong{font-size:1rem;}
.scope-list span{color:var(--muted);font-size:.88rem;}
.consent-note{margin-bottom:1.25rem;padding:1rem;border-radius:12px;background:rgba(245,158,11,.14);border:1px solid rgba(245,158,11,.28);color:#fed7aa;font-size:.9rem;}
.consent-form{display:flex;flex-direction:column;gap:1rem;}
.consent-actions{display:flex;justify-content:space-between;gap:1rem;}
.portal-service-links{display:flex;flex-direction:column;align-items:center;gap:10px;margin-top:10px;}
.portal-service-btn{text-decoration:none;min-width:220px;}
.portal-actions{display:flex;justify-content:center;gap:12px;margin-top:16px;flex-wrap:wrap;}
.portal-actions-inline{margin-top:10px;}
.portal-actions a.primary-btn,.portal-actions a.ghost-btn,.portal-actions a.success-btn,.portal-actions a.danger-btn{text-decoration:none;}
.portal-logout-form{margin-top:16px;text-align:center;}

@media (max-width:960px){
  /* Admin sidebar → horizontal top bar on mobile */
  .admin-layout{flex-direction:column;}
  .admin-sidebar{width:100%;min-width:100%;height:auto;position:static;flex-direction:row;border-right:none;border-bottom:1px solid var(--border);}
  .admin-sidebar-header{border-bottom:none;border-right:1px solid var(--border);padding:.6rem .875rem;flex-shrink:0;}
  .admin-sidebar-title{display:none;}
  .admin-sidebar-nav{flex-direction:row;flex-wrap:wrap;overflow-x:hidden;padding:.4rem .5rem;gap:.25rem;flex:1;}
  .admin-sidebar-footer{display:none;}
  .admin-tab{padding:.5rem .6rem;justify-content:center;flex:0 0 auto;width:auto;}
  .admin-tab span{display:none;}
  /* Override desktop collapse on mobile */
  .admin-layout[data-collapsed] .admin-sidebar{width:100% !important;min-width:100% !important;flex-direction:row;}
  .admin-layout[data-collapsed] .admin-tab{justify-content:center;}
  .sidebar-toggle{display:none;}
  /* Component responsive */
  .panel{min-width:0;}
  .panel-section,.panel-layout{min-width:0;}
  .panel-header{flex-wrap:wrap;gap:.5rem;}
  .panel-title-block{flex-basis:100%;}
  .panel-header-actions,.ldap-sync-header-actions{justify-content:flex-start;}
  .ldap-sync-card-emphasis{grid-column:span 1;}
  .panel-section-head{flex-direction:column;}
  .section-info-icon::after{left:auto;right:0;}
  .actions-cell{justify-content:flex-start;}
  .service-link-row{grid-template-columns:1fr;}
  .portal-bg-grid-top,.portal-bg-grid-bottom{grid-template-columns:1fr;}
  .rbac-binding-row{grid-template-columns:1fr;}
}
