/* Portal-Shell: globale Layout-Hülle mit linker Sidebar (Hauptmenü-Drawer).

   Die Sidebar liegt jetzt AUSSERHALB des <main class="card">-Frames — sie
   sitzt direkt am linken Viewport-Rand (Flex-Sibling zu <main>). Damit
   bekommt der Inhaltsbereich auf großen Monitoren mehr Platz und die
   Sidebar wirkt wie der rechte Tabs-Drawer, nur am linken Bildschirmrand.

   Markup-Anker (in base.html):
     <body>
       <nav class="app-header">…</nav>
       <div class="portal-body" data-dashboard-shell>
         <aside class="dashboard-side-nav">…</aside>
         <button class="dashboard-side-nav__reveal" hidden>…</button>
         <main class="card">…</main>
       </div>
     </body>

   Die Klassennamen .dashboard-shell-bezogen / .dashboard-side-nav bleiben
   erhalten, weil dashboard-side-navigation.js sie als State-Anker nutzt. */

.portal-body{
  display:flex;
  flex-direction:row;
  align-items:stretch;
  gap:0;
  min-height:calc(100vh - 1px);
  position:relative;
}

.portal-body > main.card{
  flex:1 1 auto;
  min-width:0;
}

/* Linke Sidebar — Flex-Sibling, sticky an der Viewport-Oberkante,
   eigene Scroll-Achse. */
.portal-body .dashboard-side-nav{
  flex:0 0 286px;
  position:sticky;
  top:0;
  align-self:flex-start;
  max-height:100vh;
  display:flex;
  flex-direction:column;
  border:none;
  border-right:1px solid var(--border);
  border-radius:0;
  background:var(--bg-card);
  box-shadow:6px 0 22px rgba(15,23,42,.08);
  overflow:hidden;
  z-index:30;
}

/* Collapsed: nur Icons */
.portal-body[data-dashboard-shell].is-side-nav-collapsed > .dashboard-side-nav{
  flex:0 0 84px;
}

/* Ausgeblendet */
.portal-body[data-dashboard-shell].is-side-nav-hidden > .dashboard-side-nav{
  display:none;
}

/* Toolbar oben in der Sidebar */
.dashboard-side-nav__toolbar{
  display:flex;
  align-items:center;
  gap:8px;
  padding:10px;
  border-bottom:1px solid var(--border);
  background:color-mix(in srgb, var(--bg-card), var(--btn-bg-hover) 45%);
}
.dashboard-side-nav__icon-btn{
  width:36px;
  height:36px;
  border-radius:10px;
  border:1px solid var(--btn-bd);
  background:var(--btn-bg);
  color:var(--fg);
  display:inline-flex;
  align-items:center;
  justify-content:center;
  cursor:pointer;
  transition:transform .16s ease, box-shadow .18s ease, border-color .18s ease;
}
.dashboard-side-nav__icon-btn:hover{
  transform:translateY(-1px);
  border-color:var(--btn-bd-hover);
  box-shadow:0 8px 18px rgba(15,23,42,.14);
}
.dashboard-side-nav__icon{
  width:18px;
  height:18px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
}
.dashboard-side-nav__icon svg{
  width:18px;
  height:18px;
  display:block;
}
.dashboard-side-nav__icon--collapse-closed,
.dashboard-side-nav__icon--hidden{
  display:none;
}
.portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__icon--collapse-open{
  display:none;
}
.portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__icon--collapse-closed{
  display:inline-flex;
}
.portal-body[data-dashboard-shell].is-side-nav-hidden .dashboard-side-nav__icon--visible{
  display:none;
}
.portal-body[data-dashboard-shell].is-side-nav-hidden .dashboard-side-nav__icon--hidden{
  display:inline-flex;
}

.dashboard-side-nav__edit-btn{
  min-height:36px;
  margin-left:auto;
  border-radius:10px;
  border:1px solid var(--btn-bd);
  background:var(--btn-bg);
  color:var(--fg);
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:0 10px;
  font-size:12px;
  font-weight:600;
  cursor:pointer;
  transition:transform .16s ease, box-shadow .18s ease, border-color .18s ease;
}
.dashboard-side-nav__edit-btn:hover{
  transform:translateY(-1px);
  border-color:var(--btn-bd-hover);
  box-shadow:0 8px 18px rgba(15,23,42,.14);
}
.dashboard-side-nav__edit-btn svg{
  width:15px;
  height:15px;
}
.portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__edit-btn{
  width:36px;
  padding:0;
  justify-content:center;
}
.portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__edit-btn span{
  display:none;
}

/* Eintragsliste — eigene Scroll-Achse innerhalb der Sidebar */
.dashboard-side-nav__items{
  display:flex;
  flex-direction:column;
  gap:8px;
  padding:10px;
  overflow-y:auto;
  flex:1 1 auto;
  min-height:0;
}

.dashboard-side-nav__entry,
.dashboard-side-nav__group-toggle{
  width:100%;
  border:1px solid transparent;
  border-radius:12px;
  background:transparent;
  color:var(--fg);
  text-decoration:none;
  display:grid;
  grid-template-columns:26px minmax(0, 1fr);
  align-items:center;
  gap:10px;
  padding:9px 10px;
  font-size:13px;
  line-height:1.25;
  text-align:left;
  transition:background-color .16s ease, border-color .18s ease, box-shadow .18s ease;
}
.dashboard-side-nav__group-toggle{
  cursor:pointer;
  font-weight:700;
}
.dashboard-side-nav__entry:hover,
.dashboard-side-nav__group-toggle:hover{
  background:var(--btn-bg-hover);
  border-color:var(--btn-bd-hover);
  box-shadow:0 8px 16px rgba(15,23,42,.12);
}
.dashboard-side-nav__entry.is-active,
.dashboard-side-nav__group-toggle.is-active{
  background:color-mix(in srgb, var(--btnp-bg-hover), var(--btn-bg) 40%);
  border-color:var(--btnp-bd-hover);
}
.dashboard-side-nav__entry .app-menu-icon,
.dashboard-side-nav__group-toggle .app-menu-icon{
  width:22px;
  height:22px;
}
.dashboard-side-nav__glyph{
  width:22px;
  height:22px;
  border-radius:7px;
  border:1px solid var(--btn-bd-hover);
  display:inline-flex;
  align-items:center;
  justify-content:center;
  font-size:10px;
  font-weight:700;
  letter-spacing:.05em;
  background:var(--btn-bg);
}
.dashboard-side-nav__label{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.dashboard-side-nav__group{
  display:flex;
  flex-direction:column;
  gap:6px;
}
.dashboard-side-nav__group-toggle{
  grid-template-columns:26px minmax(0, 1fr) 16px;
}
.dashboard-side-nav__chevron{
  width:0;
  height:0;
  justify-self:end;
  border-left:6px solid var(--muted);
  border-top:4px solid transparent;
  border-bottom:4px solid transparent;
  transform:rotate(90deg);
  transform-origin:center;
  transition:transform .16s ease;
}
.dashboard-side-nav__group.is-group-collapsed .dashboard-side-nav__chevron{
  transform:rotate(0deg);
}
.dashboard-side-nav__group-items{
  display:flex;
  flex-direction:column;
  gap:6px;
  padding-left:8px;
}
.dashboard-side-nav__group.is-group-collapsed .dashboard-side-nav__group-items{
  display:none;
}
.dashboard-side-nav__entry.is-child{
  grid-template-columns:22px minmax(0, 1fr);
  margin-left:6px;
  position:relative;
}
.dashboard-side-nav__entry.is-child::before{
  content:"";
  position:absolute;
  left:-8px;
  top:50%;
  width:5px;
  height:5px;
  border-radius:999px;
  transform:translateY(-50%);
  background:var(--btn-bd-hover);
}
.dashboard-side-nav__entry.is-child .app-menu-icon,
.dashboard-side-nav__entry.is-child .dashboard-side-nav__glyph{
  width:18px;
  height:18px;
}

.portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__entry,
.portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__group-toggle{
  grid-template-columns:1fr;
  justify-items:center;
  padding-left:8px;
  padding-right:8px;
}
.portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__label,
.portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__chevron{
  display:none;
}
.portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__group-items{
  padding-left:0;
}
.portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__entry.is-child{
  margin-left:0;
}
.portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__entry.is-child::before{
  display:none;
}

/* Reveal-Button (zeigt sich, wenn die Sidebar komplett ausgeblendet ist) */
.dashboard-side-nav__reveal{
  position:fixed;
  top:50%;
  left:10px;
  transform:translateY(-50%);
  z-index:35;
  display:inline-flex;
  align-items:center;
  gap:8px;
  border-radius:999px;
  border:1px solid var(--btn-bd-hover);
  background:var(--btn-bg);
  color:var(--btn-text);
  box-shadow:0 12px 28px rgba(15,23,42,.18);
  padding:8px 12px;
  font-size:12px;
  font-weight:700;
  cursor:pointer;
}
.dashboard-side-nav__reveal svg{
  width:16px;
  height:16px;
}

/* === Hamburger-Button in der Topbar (nur Mobile sichtbar) === */
.portal-nav-toggle{
  display:none;
  width:38px;
  height:38px;
  border-radius:10px;
  border:1px solid var(--btn-bd);
  background:var(--btn-bg);
  color:var(--fg);
  align-items:center;
  justify-content:center;
  cursor:pointer;
  margin-right:8px;
  transition:transform .16s ease, box-shadow .18s ease, border-color .18s ease;
}
.portal-nav-toggle:hover{
  border-color:var(--btn-bd-hover);
  box-shadow:0 6px 14px rgba(15,23,42,.12);
}
.portal-nav-toggle svg{
  width:20px;
  height:20px;
}

.portal-nav-backdrop{
  display:none;
  position:fixed;
  inset:0;
  background:rgba(15,23,42,.45);
  opacity:0;
  pointer-events:none;
  transition:opacity .2s ease;
  z-index:79;
}

/* === Mobile-Overlay-Drawer (< 900 px) ===
   Auf schmalen Bildschirmen ist die Sidebar standardmäßig zu und schwebt
   beim Öffnen als Overlay über dem Inhalt. */
@media (max-width: 899px){
  .portal-nav-toggle{
    display:inline-flex;
  }
  .portal-body{
    flex-direction:column;
  }
  .portal-body .dashboard-side-nav,
  .portal-body[data-dashboard-shell].is-side-nav-collapsed > .dashboard-side-nav,
  .portal-body[data-dashboard-shell].is-side-nav-hidden > .dashboard-side-nav{
    position:fixed;
    top:0;
    left:0;
    bottom:0;
    width:min(320px, 88vw);
    max-width:88vw;
    max-height:none;
    flex:none;
    border-radius:0;
    border:none;
    border-right:1px solid var(--border);
    box-shadow:8px 0 32px rgba(15,23,42,.22);
    transform:translateX(-100%);
    transition:transform .28s cubic-bezier(.2,.8,.2,1);
    z-index:80;
    display:flex;
  }
  .portal-body[data-dashboard-shell].is-mobile-nav-open > .dashboard-side-nav{
    transform:translateX(0);
  }
  .portal-body[data-dashboard-shell].is-mobile-nav-open .portal-nav-backdrop{
    display:block;
    opacity:1;
    pointer-events:auto;
  }
  /* Auf Mobile die Collapse-Optik aufheben — Drawer ist offen oder zu. */
  .portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__label,
  .portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__chevron{
    display:inline;
  }
  .portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__entry,
  .portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__group-toggle{
    grid-template-columns:26px minmax(0, 1fr);
    justify-items:stretch;
    padding-left:10px;
    padding-right:10px;
  }
  .portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__group-toggle{
    grid-template-columns:26px minmax(0, 1fr) 16px;
  }
  .portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__entry.is-child{
    margin-left:6px;
  }
  .portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__entry.is-child::before{
    display:block;
  }
  .portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__edit-btn{
    width:auto;
    padding:0 10px;
  }
  .portal-body[data-dashboard-shell].is-side-nav-collapsed .dashboard-side-nav__edit-btn span{
    display:inline;
  }
  .dashboard-side-nav__reveal{
    display:none !important;
  }
  /* Wenn der User die Sidebar "ausgeblendet" hat (Desktop-Zustand) und auf
     Mobile wechselt, soll trotzdem getoggelt werden können. */
  .portal-body[data-dashboard-shell].is-side-nav-hidden > .dashboard-side-nav{
    display:flex;
    transform:translateX(-100%);
  }
}

/* Wenn Mobile-Drawer offen, Body-Scroll sperren. */
body.portal-nav-overlay-open{
  overflow:hidden;
}

/* Topbar-Menü-Trigger (alter Menü-Button + Edit + Info) ausblenden —
   das Hauptmenü lebt jetzt im linken Drawer. #appMenuQuick (gepinte
   Schnell-Icons) bleibt sichtbar. */
.app-menu-trigger{
  display:none !important;
}

/* Card-Look an die linke Kante anpassen, wenn Sidebar daneben sitzt:
   - max-width entfällt, damit der Inhalt den großen Monitor ausnutzt
   - linke Kante stößt direkt an die Sidebar (keine Lücke, kein Radius)
   - rechts ein bisschen Atemraum */
.portal-body > main.card{
  max-width:none;
  margin:10px 16px 16px 0;
}
.portal-body > main.card .card-body{
  border-top-left-radius:0;
  border-bottom-left-radius:0;
}

@media (max-width: 899px){
  .portal-body > main.card{
    margin:10px auto 16px;
    max-width:1100px;
  }
  .portal-body > main.card .card-body{
    border-radius:var(--radiusLG, 12px);
  }
}
