/* =========================================================
   Gartenverein – Design Tokens (Bootstrap 5.3 compatible)
   ========================================================= */

:root {
  /* Color schemes — overridden by data-scheme attribute */
  --c-bg:        #f5f1e8;   /* warm cream */
  --c-surface:   #fbf8f1;   /* lighter cream for cards */
  --c-surface-2: #efe9da;   /* alt surface */
  --c-ink:       #1c2a1a;   /* near-black, warm */
  --c-ink-soft:  #4a5746;
  --c-ink-muted: #7a8472;
  --c-line:      #e2dccc;
  --c-line-soft: #ece6d6;

  --c-accent:        #3d6b3a;   /* Moss green */
  --c-accent-deep:   #1f3a1d;   /* Forest green */
  --c-accent-soft:   #e6ede0;
  --c-accent-tint:   #c9d7c1;

  --c-warn:    #b8860b;
  --c-warn-bg: #fbf1d7;
  --c-danger:  #a8443a;
  --c-danger-bg: #f8e3df;
  --c-info:    #4a6f7a;
  --c-info-bg: #e3eef0;
  --c-ok:      #3d6b3a;
  --c-ok-bg:   #e1ebda;

  /* Typography */
  --font-display: "Fraunces", "Georgia", serif;
  --font-body:    "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
  --fs-base: 18px;

  /* Shape & motion */
  --radius-sm: 6px;
  --radius:    10px;
  --radius-lg: 14px;
  --radius-xl: 20px;

  --card-shadow: 0 1px 0 rgba(28, 42, 26, 0.04);
  --card-shadow-soft: 0 6px 22px -14px rgba(28, 42, 26, 0.18);
  --card-border: 1px solid var(--c-line);
}

/* === Color schemes === */
[data-scheme="moss"] {
  --c-bg:#f5f1e8; --c-surface:#fbf8f1; --c-surface-2:#efe9da;
  --c-accent:#3d6b3a; --c-accent-deep:#1f3a1d;
  --c-accent-soft:#e6ede0; --c-accent-tint:#c9d7c1;
  --c-line:#e2dccc; --c-line-soft:#ece6d6;
  --c-ink:#1c2a1a; --c-ink-soft:#4a5746; --c-ink-muted:#7a8472;
}
[data-scheme="sage"] {
  --c-bg:#f4f3ec; --c-surface:#fafaf3; --c-surface-2:#ecebde;
  --c-accent:#5b7553; --c-accent-deep:#2f4429;
  --c-accent-soft:#e8ebe0; --c-accent-tint:#cdd5c1;
  --c-line:#e0ddcd; --c-line-soft:#ebe9d9;
  --c-ink:#23291e; --c-ink-soft:#4f5648; --c-ink-muted:#7c8275;
}
[data-scheme="terracotta"] {
  --c-bg:#faf6ee; --c-surface:#fffcf3; --c-surface-2:#f1ebdb;
  --c-accent:#7a8b3d; --c-accent-deep:#3e4a1c;
  --c-accent-soft:#ecefdb; --c-accent-tint:#d3dab0;
  --c-line:#e6dfc8; --c-line-soft:#efe9d3;
  --c-ink:#231f15; --c-ink-soft:#544e3d; --c-ink-muted:#857d68;
  --c-warn:#b85c38; --c-warn-bg:#f8e1d4;
}

/* Card style variants */
[data-cards="flat"]   { --card-shadow: none; --card-border: 1px solid var(--c-line-soft); }
[data-cards="shadow"] { --card-shadow: 0 8px 24px -16px rgba(28, 42, 26, 0.20); --card-border: 1px solid transparent; }
[data-cards="bordered"] { --card-shadow: none; --card-border: 1px solid var(--c-line); }

/* =========================================================
   Base
   ========================================================= */
html { font-size: var(--fs-base); }
body {
  font-family: var(--font-body);
  background: var(--c-bg);
  color: var(--c-ink);
  font-feature-settings: "ss01", "cv11";
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  font-size: 1rem;
  line-height: 1.55;
}

h1, h2, h3, h4, h5, .display, .serif {
  font-family: var(--font-display);
  font-weight: 500;
  letter-spacing: -0.01em;
  color: var(--c-accent-deep);
  text-wrap: balance;
}
h1 { font-size: 2.1rem; line-height: 1.15; font-weight: 450; }
h2 { font-size: 1.55rem; line-height: 1.2; font-weight: 450; }
h3 { font-size: 1.2rem; line-height: 1.25; font-weight: 500; }
h4 { font-size: 1.0rem; line-height: 1.3; font-weight: 600; color: var(--c-ink); font-family: var(--font-body); letter-spacing: 0; }

a { color: var(--c-accent-deep); text-decoration-color: var(--c-accent-tint); text-underline-offset: 3px; }
a:hover { color: var(--c-accent); }

hr { border-color: var(--c-line); opacity: 1; }

/* Bootstrap-ish overrides */
.text-muted { color: var(--c-ink-muted) !important; }
.text-soft  { color: var(--c-ink-soft); }

/* =========================================================
   App shell
   ========================================================= */
.gv-app { min-height: 100vh; display: flex; flex-direction: column; background: var(--c-bg); }
.gv-app__main { flex: 1 1 auto; padding: 28px 0 56px; }

/* Top brand bar (always visible) */
.gv-brandbar {
  background: var(--c-surface);
  border-bottom: 1px solid var(--c-line);
}
.gv-brand {
  display: flex; align-items: center; gap: 12px;
  font-family: var(--font-display); font-size: 1.35rem; color: var(--c-accent-deep);
  text-decoration: none; padding: 16px 0;
  font-weight: 500;
}
.gv-brand:hover { color: var(--c-accent); }
.gv-brand__mark {
  width: 36px; height: 36px; border-radius: 50%;
  background: var(--c-accent-deep);
  display: inline-flex; align-items: center; justify-content: center;
  color: #f5f1e8;
}
.gv-brand small { color: var(--c-ink-muted); font-family: var(--font-body); font-size: 0.78rem; letter-spacing: 0.06em; text-transform: uppercase; display: block; line-height: 1; margin-top: 3px; font-weight: 500;}

/* TopNav */
.gv-topnav {
  background: var(--c-surface);
  border-bottom: 1px solid var(--c-line);
  position: sticky; top: 0; z-index: 30;
  backdrop-filter: saturate(140%) blur(6px);
  background: color-mix(in oklab, var(--c-surface) 92%, transparent);
}
.gv-topnav__inner { display: flex; align-items: stretch; gap: 8px; min-height: 60px; }
.gv-topnav__links { display: flex; gap: 2px; flex: 1 1 auto; flex-wrap: wrap; }
.gv-topnav a.gv-navlink {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 10px 14px; border-radius: 8px;
  color: var(--c-ink-soft); text-decoration: none;
  font-weight: 500; font-size: 0.95rem;
  transition: background .15s ease, color .15s ease;
  white-space: nowrap;
}
.gv-topnav a.gv-navlink:hover { background: var(--c-accent-soft); color: var(--c-accent-deep); }
.gv-topnav a.gv-navlink.is-active {
  background: var(--c-accent-soft);
  color: var(--c-accent-deep);
  box-shadow: inset 0 -2px 0 var(--c-accent);
}
.gv-topnav a.gv-navlink i { font-size: 1rem; opacity: .85; }
.gv-topnav__user {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 12px; border-radius: 999px;
  border: 1px solid var(--c-line);
  background: var(--c-bg);
  color: var(--c-ink);
  font-size: 0.92rem;
  text-decoration: none;
  cursor: pointer;
  transition: background .15s;
}
.gv-topnav__user:hover { background: var(--c-accent-soft); color: var(--c-accent-deep); }
.gv-topnav__avatar {
  width: 28px; height: 28px; border-radius: 50%;
  background: var(--c-accent-deep); color: #f5f1e8;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 0.78rem; font-weight: 600;
}

/* Sidebar nav variant */
.gv-sidenav {
  background: var(--c-surface);
  border-right: 1px solid var(--c-line);
  width: 240px;
  flex: 0 0 240px;
  position: sticky; top: 0; align-self: flex-start;
  height: 100vh; overflow: auto;
  padding: 18px 14px;
}
.gv-sidenav .gv-brand { padding: 6px 10px 18px; border-bottom: 1px solid var(--c-line-soft); margin-bottom: 14px; }
.gv-sidenav__links { display: flex; flex-direction: column; gap: 2px; }
.gv-sidenav a.gv-navlink { padding: 10px 12px; border-radius: 8px; }
.gv-sidenav a.gv-navlink.is-active { box-shadow: inset 3px 0 0 var(--c-accent); }
.gv-sidenav__user { margin-top: auto; padding-top: 16px; }

[data-nav="sidebar"] .gv-app { flex-direction: row; }
[data-nav="sidebar"] .gv-app__inner { flex: 1 1 auto; display: flex; flex-direction: column; min-width: 0; }
[data-nav="sidebar"] .gv-brandbar,
[data-nav="sidebar"] .gv-topnav { display: none; }
[data-nav="sidebar"] .gv-app__main { padding: 24px 0 56px; }

@media (max-width: 991px) {
  .gv-sidenav { display: none; }
  [data-nav="sidebar"] .gv-brandbar,
  [data-nav="sidebar"] .gv-topnav { display: block; }
  [data-nav="sidebar"] .gv-app { flex-direction: column; }
}

/* =========================================================
   Page header
   ========================================================= */
.gv-pagehead {
  display: flex; align-items: flex-end; justify-content: space-between; gap: 16px;
  margin-bottom: 22px; flex-wrap: wrap;
}
.gv-pagehead__title {
  display: flex; align-items: center; gap: 14px;
}
.gv-pagehead__title h1 {
  margin: 0; font-size: 2.0rem; font-weight: 450;
}
.gv-pagehead__title .gv-icon {
  width: 44px; height: 44px; border-radius: 12px;
  background: var(--c-accent-soft); color: var(--c-accent-deep);
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 1.3rem;
  flex-shrink: 0;
}
.gv-pagehead__sub { color: var(--c-ink-muted); margin: 4px 0 0; font-size: 0.95rem; }
.gv-pagehead__meta { color: var(--c-ink-muted); font-size: 0.92rem; font-variant-numeric: tabular-nums; }

/* Hero variants */
.gv-hero {
  background: var(--c-surface);
  border: var(--card-border);
  border-radius: var(--radius-xl);
  padding: 32px;
  margin-bottom: 24px;
  position: relative; overflow: hidden;
}
.gv-hero--compact { padding: 20px 24px; }
.gv-hero--stat { background: var(--c-accent-deep); color: #f5f1e8; border: none; }
.gv-hero--stat h1 { color: #f5f1e8; }
.gv-hero--stat .gv-stat__big { color: #f5f1e8; }
.gv-hero--stat .text-muted { color: rgba(245,241,232,0.7) !important; }
.gv-hero__pattern {
  position: absolute; inset: 0; pointer-events: none; opacity: .35;
  background-image: radial-gradient(circle at 1px 1px, var(--c-accent-tint) 1px, transparent 1px);
  background-size: 22px 22px;
  mask-image: linear-gradient(180deg, transparent 0%, black 60%);
}

/* =========================================================
   Cards
   ========================================================= */
.gv-card {
  background: var(--c-surface);
  border: var(--card-border);
  border-radius: var(--radius-lg);
  box-shadow: var(--card-shadow);
  padding: 22px;
}
.gv-card--soft {
  background: var(--c-surface-2);
}
.gv-card__header {
  display: flex; align-items: center; gap: 10px;
  margin: -22px -22px 18px;
  padding: 16px 22px;
  border-bottom: 1px solid var(--c-line-soft);
  font-size: 0.78rem; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--c-ink-muted);
}
.gv-card__header i { color: var(--c-accent); font-size: 1.05rem; }
.gv-card__title {
  font-family: var(--font-display);
  font-size: 1.15rem; font-weight: 500; color: var(--c-accent-deep);
  margin: 0 0 4px;
}
.gv-card__meta { color: var(--c-ink-muted); font-size: 0.88rem; }

[data-cards="shadow"] .gv-card { border: 1px solid transparent; }
[data-cards="bordered"] .gv-card { border: 1.5px solid var(--c-line); }

/* Stat */
.gv-stat__big {
  font-family: var(--font-display);
  font-size: 3rem; line-height: 1; color: var(--c-accent-deep);
  font-weight: 400;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.02em;
}
.gv-stat__sub { color: var(--c-ink-muted); font-size: 0.9rem; margin-top: 4px; }
.gv-progress {
  height: 8px; background: var(--c-line-soft); border-radius: 99px; overflow: hidden;
  margin-top: 14px;
}
.gv-progress__fill { height: 100%; background: var(--c-accent); border-radius: inherit; transition: width .4s ease; }

/* =========================================================
   Buttons
   ========================================================= */
.btn {
  border-radius: 8px;
  font-weight: 500;
  padding: 0.55rem 1rem;
  display: inline-flex; align-items: center; gap: 8px;
  transition: background .15s, color .15s, border-color .15s, transform .05s;
  font-size: 0.95rem;
}
.btn:active { transform: translateY(1px); }
.btn-primary {
  background: var(--c-accent-deep); border-color: var(--c-accent-deep); color: #f5f1e8;
}
.btn-primary:hover, .btn-primary:focus {
  background: var(--c-accent); border-color: var(--c-accent); color: #fff;
}
.btn-success { background: var(--c-accent); border-color: var(--c-accent); color: #fff; }
.btn-success:hover { background: var(--c-accent-deep); border-color: var(--c-accent-deep); color: #fff; }
.btn-outline-secondary {
  background: var(--c-surface); border: 1px solid var(--c-line); color: var(--c-ink-soft);
}
.btn-outline-secondary:hover { background: var(--c-accent-soft); border-color: var(--c-accent-tint); color: var(--c-accent-deep); }
.btn-outline-danger { color: var(--c-danger); border-color: var(--c-danger); background: transparent; }
.btn-outline-danger:hover { background: var(--c-danger); color: #fff; border-color: var(--c-danger); }
.btn-ghost {
  background: transparent; border: none; color: var(--c-ink-soft); padding: 0.4rem 0.7rem;
}
.btn-ghost:hover { background: var(--c-accent-soft); color: var(--c-accent-deep); }
.btn-icon {
  width: 36px; height: 36px; padding: 0; justify-content: center;
}
.btn-lg { padding: 0.8rem 1.4rem; font-size: 1.05rem; border-radius: 10px; }

/* =========================================================
   Forms
   ========================================================= */
.form-label { font-weight: 500; color: var(--c-ink-soft); margin-bottom: 6px; font-size: 0.92rem; }
.form-control, .form-select {
  background: var(--c-surface);
  border: 1px solid var(--c-line);
  color: var(--c-ink);
  border-radius: 8px;
  padding: 0.6rem 0.85rem;
  font-size: 1rem;
  transition: border-color .15s, box-shadow .15s, background .15s;
}
.form-control:focus, .form-select:focus {
  background: var(--c-surface);
  border-color: var(--c-accent);
  box-shadow: 0 0 0 3px var(--c-accent-soft);
  color: var(--c-ink);
}
.form-control::placeholder { color: var(--c-ink-muted); }
textarea.form-control { min-height: 96px; }
.form-text { color: var(--c-ink-muted); }

/* =========================================================
   Badges & status pills
   ========================================================= */
.gv-badge {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 3px 10px; border-radius: 999px;
  font-size: 0.78rem; font-weight: 500;
  font-family: var(--font-body);
  letter-spacing: 0.01em;
  white-space: nowrap;
}
.gv-badge i { font-size: 0.78rem; }
.gv-badge--ok    { background: var(--c-ok-bg);    color: var(--c-accent-deep); }
.gv-badge--warn  { background: var(--c-warn-bg);  color: #6e5210; }
.gv-badge--info  { background: var(--c-info-bg);  color: var(--c-info); }
.gv-badge--danger{ background: var(--c-danger-bg);color: #732a23; }
.gv-badge--neutral{background: var(--c-surface-2);color: var(--c-ink-soft); border: 1px solid var(--c-line); }
.gv-badge--soft  { background: var(--c-accent-soft); color: var(--c-accent-deep); }

.gv-dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; background: currentColor; }

/* =========================================================
   Tables
   ========================================================= */
.gv-table {
  width: 100%;
  border-collapse: separate; border-spacing: 0;
  background: var(--c-surface);
  border: var(--card-border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--card-shadow);
}
.gv-table thead th {
  text-align: left; font-weight: 600; font-size: 0.78rem;
  color: var(--c-ink-muted);
  letter-spacing: 0.06em; text-transform: uppercase;
  padding: 14px 18px;
  background: var(--c-surface-2);
  border-bottom: 1px solid var(--c-line);
}
.gv-table tbody td {
  padding: 14px 18px;
  border-bottom: 1px solid var(--c-line-soft);
  vertical-align: middle;
  font-size: 0.95rem;
}
.gv-table tbody tr:last-child td { border-bottom: none; }
.gv-table tbody tr { transition: background .12s; }
.gv-table tbody tr:hover { background: color-mix(in oklab, var(--c-accent-soft) 50%, transparent); }
.gv-table .gv-cell-title { font-weight: 600; color: var(--c-ink); }
.gv-table .gv-cell-sub { color: var(--c-ink-muted); font-size: 0.88rem; margin-top: 2px; }
.gv-table .gv-cell-num { font-variant-numeric: tabular-nums; }

/* =========================================================
   Calendar
   ========================================================= */
.gv-cal {
  background: var(--c-surface);
  border: var(--card-border);
  border-radius: var(--radius-lg);
  padding: 18px;
  box-shadow: var(--card-shadow);
}
.gv-cal__head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 16px; gap: 12px; flex-wrap: wrap;
}
.gv-cal__title {
  font-family: var(--font-display); font-size: 1.4rem; color: var(--c-accent-deep);
}
.gv-cal__nav { display: inline-flex; gap: 4px; align-items: center; }
.gv-cal__seg {
  display: inline-flex; background: var(--c-bg); border: 1px solid var(--c-line); border-radius: 8px; padding: 3px;
}
.gv-cal__seg button {
  border: none; background: transparent; padding: 5px 14px; border-radius: 6px;
  font-size: 0.9rem; color: var(--c-ink-soft); cursor: pointer; font-weight: 500;
}
.gv-cal__seg button.is-active { background: var(--c-accent-deep); color: #f5f1e8; }

.gv-cal__grid {
  display: grid; grid-template-columns: repeat(7, 1fr);
  border-top: 1px solid var(--c-line-soft);
  border-left: 1px solid var(--c-line-soft);
  border-radius: 8px;
  overflow: hidden;
}
.gv-cal__dow {
  padding: 8px 10px; font-size: 0.78rem; font-weight: 600; color: var(--c-ink-muted);
  letter-spacing: 0.06em; text-transform: uppercase;
  background: var(--c-surface-2);
  border-right: 1px solid var(--c-line-soft);
  border-bottom: 1px solid var(--c-line-soft);
}
.gv-cal__day {
  min-height: 100px; padding: 8px; position: relative;
  border-right: 1px solid var(--c-line-soft);
  border-bottom: 1px solid var(--c-line-soft);
  background: var(--c-surface);
  display: flex; flex-direction: column; gap: 4px;
  cursor: pointer; transition: background .12s;
}
.gv-cal__day:hover { background: var(--c-accent-soft); }
.gv-cal__day--out { color: var(--c-ink-muted); background: var(--c-surface-2); }
.gv-cal__day--today { background: color-mix(in oklab, var(--c-accent-soft) 60%, transparent); box-shadow: inset 0 0 0 2px var(--c-accent); }
.gv-cal__day--weekend { background: color-mix(in oklab, var(--c-surface-2) 60%, var(--c-surface)); }
.gv-cal__daynum { font-size: 0.92rem; font-weight: 600; color: var(--c-ink-soft); font-variant-numeric: tabular-nums; }
.gv-cal__day--today .gv-cal__daynum { color: var(--c-accent-deep); }
.gv-cal__event {
  font-size: 0.78rem; padding: 3px 7px; border-radius: 5px;
  background: var(--c-accent-soft); color: var(--c-accent-deep);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  border-left: 3px solid var(--c-accent);
  font-weight: 500;
}
.gv-cal__event--orange { background: #f4ddc4; color: #6b3a0e; border-left-color: #c97a2c; }
.gv-cal__event--blue   { background: var(--c-info-bg); color: var(--c-info); border-left-color: var(--c-info); }
.gv-cal__event--red    { background: var(--c-danger-bg); color: #732a23; border-left-color: var(--c-danger); }

@media (max-width: 767px) {
  .gv-cal__day { min-height: 64px; padding: 4px; }
  .gv-cal__event { font-size: 0.7rem; padding: 2px 4px; }
  .gv-cal__dow { padding: 6px 4px; font-size: 0.66rem; }
}

/* =========================================================
   Event / Termin cards
   ========================================================= */
.gv-event {
  background: var(--c-surface);
  border: var(--card-border);
  border-radius: var(--radius);
  padding: 16px 18px;
  display: flex; flex-direction: column; gap: 10px;
  transition: transform .15s ease, box-shadow .15s ease;
  box-shadow: var(--card-shadow);
}
.gv-event:hover { transform: translateY(-1px); box-shadow: 0 8px 24px -16px rgba(28, 42, 26, 0.20); }
.gv-event__title { font-weight: 600; color: var(--c-ink); margin: 0; font-size: 1.0rem; }
.gv-event__meta {
  display: flex; flex-wrap: wrap; gap: 10px 16px;
  font-size: 0.85rem; color: var(--c-ink-muted);
}
.gv-event__meta i { color: var(--c-accent); margin-right: 4px; }
.gv-event__desc { font-size: 0.92rem; color: var(--c-ink-soft); margin: 0; }
.gv-event__foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: auto; padding-top: 6px; }

/* Termin-row (Dashboard) */
.gv-termlist { display: flex; flex-direction: column; }
.gv-term {
  display: flex; gap: 14px; padding: 12px 0;
  border-bottom: 1px solid var(--c-line-soft);
}
.gv-term:last-child { border-bottom: none; }
.gv-term__date {
  flex: 0 0 56px; text-align: center;
  background: var(--c-accent-soft); border-radius: 8px;
  padding: 6px 4px;
  font-family: var(--font-display);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
}
.gv-term__day  { font-size: 1.3rem; line-height: 1; color: var(--c-accent-deep); font-weight: 500; }
.gv-term__mon  { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--c-ink-muted); margin-top: 2px; font-family: var(--font-body); font-weight: 600; }
.gv-term__body { flex: 1 1 auto; min-width: 0; }
.gv-term__title { font-weight: 600; color: var(--c-ink); margin: 0; font-size: 0.95rem; }
.gv-term__sub { color: var(--c-ink-muted); font-size: 0.85rem; margin-top: 2px; }

/* =========================================================
   Empty state
   ========================================================= */
.gv-empty {
  text-align: center; padding: 28px 18px;
  color: var(--c-ink-muted); font-size: 0.92rem;
}
.gv-empty i { font-size: 1.8rem; color: var(--c-accent-tint); display: block; margin-bottom: 10px; }

/* =========================================================
   Notice / alert
   ========================================================= */
.gv-notice {
  background: var(--c-info-bg);
  border-left: 3px solid var(--c-info);
  border-radius: 8px;
  padding: 12px 16px;
  font-size: 0.92rem;
  color: var(--c-info);
  display: flex; align-items: flex-start; gap: 10px;
}
.gv-notice i { font-size: 1.1rem; margin-top: 1px; }
.gv-notice--soft { background: var(--c-accent-soft); color: var(--c-accent-deep); border-left-color: var(--c-accent); }

/* =========================================================
   Footer
   ========================================================= */
.gv-foot {
  border-top: 1px solid var(--c-line);
  background: var(--c-surface);
  padding: 22px 0;
  font-size: 0.88rem;
  color: var(--c-ink-muted);
}
.gv-foot a { color: var(--c-ink-soft); text-decoration: none; }
.gv-foot a:hover { color: var(--c-accent-deep); }

/* =========================================================
   Public landing
   ========================================================= */
.gv-public {
  min-height: 100vh; display: flex; flex-direction: column;
  background:
    radial-gradient(1200px 600px at 110% -10%, color-mix(in oklab, var(--c-accent) 12%, transparent), transparent 60%),
    radial-gradient(900px 500px at -10% 90%, color-mix(in oklab, var(--c-accent) 10%, transparent), transparent 60%),
    var(--c-bg);
}
.gv-public__hero { padding: 64px 0 48px; }
.gv-public__hero h1 { font-size: clamp(2.5rem, 5vw, 4rem); font-weight: 400; line-height: 1.05; }
.gv-public__hero .lead { font-size: 1.15rem; color: var(--c-ink-soft); margin-top: 16px; max-width: 36em; line-height: 1.55; }
.gv-public__art {
  background: var(--c-accent-soft);
  border-radius: var(--radius-xl);
  aspect-ratio: 4 / 5;
  position: relative;
  overflow: hidden;
  border: 1px solid var(--c-line);
}
.gv-feat {
  background: var(--c-surface);
  border: 1px solid var(--c-line);
  border-radius: var(--radius-lg);
  padding: 22px;
}
.gv-feat__icon {
  width: 44px; height: 44px; border-radius: 10px;
  background: var(--c-accent-soft); color: var(--c-accent-deep);
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 1.3rem; margin-bottom: 14px;
}

/* =========================================================
   Login
   ========================================================= */
.gv-loginpage { min-height: 100vh; display: grid; grid-template-columns: 1fr 1fr; }
.gv-loginpage__art {
  background: var(--c-accent-deep); color: #f5f1e8;
  padding: 56px;
  position: relative; overflow: hidden;
  display: flex; flex-direction: column; justify-content: space-between;
}
.gv-loginpage__art h2 { color: #f5f1e8; font-size: 2.5rem; max-width: 12em; }
.gv-loginpage__art .soft { color: rgba(245, 241, 232, .75); }
.gv-loginpage__form {
  display: flex; align-items: center; justify-content: center;
  padding: 56px;
}
.gv-loginpage__inner { max-width: 380px; width: 100%; }
@media (max-width: 991px) {
  .gv-loginpage { grid-template-columns: 1fr; }
  .gv-loginpage__art { display: none; }
}

/* =========================================================
   Util
   ========================================================= */
.gv-divider {
  height: 1px; background: var(--c-line-soft); margin: 16px 0;
}
.gv-meta-row { display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: center; font-size: 0.88rem; color: var(--c-ink-muted); }
.gv-meta-row i { color: var(--c-accent); margin-right: 4px; }

.gv-action-row { display: inline-flex; gap: 4px; }

/* Avatar */
.gv-avatar {
  width: 32px; height: 32px; border-radius: 50%;
  background: var(--c-accent-soft); color: var(--c-accent-deep);
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 0.78rem; font-weight: 600;
  flex-shrink: 0;
}
.gv-avatar--lg { width: 44px; height: 44px; font-size: 0.95rem; }

/* Botanical leaf SVG accents */
.gv-leaf {
  position: absolute; pointer-events: none;
  color: var(--c-accent);
  opacity: .15;
}

/* Print-style reading row for parzelle with members */
.gv-memberlist { display: flex; flex-direction: column; gap: 4px; font-size: 0.88rem; }
.gv-memberlist__row { display: flex; align-items: center; gap: 8px; }
.gv-memberlist__more { color: var(--c-ink-muted); font-size: 0.82rem; }

/* Responsive helpers */
@media (max-width: 767px) {
  .gv-pagehead__title h1 { font-size: 1.5rem; }
  h1 { font-size: 1.6rem; }
  .gv-card { padding: 16px; }
  .gv-card__header { margin: -16px -16px 14px; padding: 12px 16px; }
  .gv-stat__big { font-size: 2.4rem; }
  .gv-app__main { padding: 16px 0 32px; }
}
/* =========================================================
   Editorial Hero (Variante C) — diesen Block in styles.css
   am Ende einfügen.
   ========================================================= */

.gv-editorial-hero { padding: 32px 0 48px; }

.gv-editorial-hero__date {
  color: var(--c-ink-muted);
  font-size: .82rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  font-weight: 600;
  margin-bottom: 16px;
}

.gv-editorial-hero__headline {
  font-family: var(--font-display);
  font-size: clamp(2rem, 4vw, 3.6rem);
  line-height: 1.05;
  font-weight: 350;
  color: var(--c-accent-deep);
  margin: 0;
  letter-spacing: -0.02em;
  max-width: 14ch;
  text-wrap: balance;
}

.gv-editorial-hero__lead {
  font-size: 1.1rem;
  color: var(--c-ink-soft);
  max-width: 34em;
  margin-top: 20px;
  line-height: 1.55;
}

.gv-editorial-hero__stats {
  border-left: 1px solid var(--c-line);
  padding-left: 32px;
}

.gv-editorial-hero__statlabel {
  font-size: .78rem;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--c-ink-muted);
  font-weight: 600;
  margin-bottom: 8px;
}

.gv-editorial-hero__statbig {
  font-family: var(--font-display);
  font-size: clamp(3rem, 5vw, 5rem);
  line-height: 1;
  font-weight: 350;
  color: var(--c-accent-deep);
  letter-spacing: -0.03em;
  font-variant-numeric: tabular-nums;
}
.gv-editorial-hero__statbig span { font-size: .5em; opacity: .55; }

.gv-editorial-hero__statmid {
  font-family: var(--font-display);
  font-size: 2rem;
  color: var(--c-accent-deep);
  font-weight: 400;
}

.gv-editorial-list { padding: 32px 0; }

.gv-editorial-list__heading {
  font-size: .78rem;
  text-transform: uppercase;
  letter-spacing: .12em;
  color: var(--c-ink-muted);
  font-weight: 600;
  font-family: var(--font-body);
}

.gv-editorial-row {
  display: grid;
  grid-template-columns: 100px 1fr 140px;
  gap: 24px;
  padding: 22px 0;
  border-top: 1px solid var(--c-line);
  align-items: baseline;
  text-decoration: none;
  color: inherit;
  transition: background .15s;
}
.gv-editorial-row:hover { background: color-mix(in oklab, var(--c-accent-soft) 40%, transparent); }

.gv-editorial-row__date {
  font-family: var(--font-display);
  font-size: 1.6rem;
  color: var(--c-accent-deep);
  font-weight: 400;
  font-variant-numeric: tabular-nums;
}

.gv-editorial-row__title {
  font-family: var(--font-display);
  font-size: 1.2rem;
  color: var(--c-ink);
  font-weight: 500;
}

.gv-editorial-row__meta {
  color: var(--c-ink-muted);
  font-size: .92rem;
  margin-top: 4px;
}

.gv-editorial-row__action { text-align: right; }

@media (max-width: 767px) {
  .gv-editorial-row { grid-template-columns: 1fr; gap: 4px; }
  .gv-editorial-row__action { text-align: left; margin-top: 8px; }
  .gv-editorial-hero__stats { border-left: none; padding-left: 0; border-top: 1px solid var(--c-line); padding-top: 24px; margin-top: 24px; }
}

/* ── GV Tabs ───────────────────────────────────────────────────── */
.nav-tabs {
  border-bottom: 2px solid var(--c-line);
  gap: 2px;
}
.nav-tabs .nav-link {
  border: none;
  border-radius: 6px 6px 0 0;
  color: var(--c-ink-muted);
  font-family: var(--font-body);
  font-size: .9rem;
  padding: 8px 18px;
  background: transparent;
  transition: background .15s, color .15s;
}
.nav-tabs .nav-link:hover {
  background: var(--c-accent-soft);
  color: var(--c-accent-deep);
  border-color: transparent;
}
.nav-tabs .nav-link.active {
  background: var(--c-surface);
  color: var(--c-accent-deep);
  font-weight: 600;
  border: none;
  box-shadow: inset 0 -2px 0 var(--c-accent);
}
.nav-tabs .nav-link .badge {
  background: var(--c-surface-2) !important;
  color: var(--c-ink-muted);
  font-weight: 500;
}
.nav-tabs .nav-link.active .badge {
  background: var(--c-accent-tint) !important;
  color: var(--c-accent-deep);
}
.tab-content { padding-top: 4px; }

/* ── Mobile-Kartenansicht für Tabellen ──────────────────────────── */
.gv-mobile-card-list { display: none; }

@media (max-width: 767px) {
  .gv-table-wrapper { display: none; }
  .gv-mobile-card-list { display: block; }

  .gv-mobile-card {
    background: #fff;
    border: 1px solid var(--gv-border, #e5e7eb);
    border-radius: 8px;
    padding: .75rem 1rem;
    margin-bottom: .5rem;
  }
  .gv-mobile-card__title {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: .5rem;
    font-weight: 600;
    margin-bottom: .2rem;
  }
  .gv-mobile-card__meta {
    font-size: .82rem;
    color: #6b7280;
    line-height: 1.6;
  }
  .gv-mobile-card__actions {
    display: flex;
    flex-wrap: wrap;
    gap: .375rem;
    margin-top: .6rem;
  }

  /* Anhänger-Aktionszeile in Desktop-Tabellen: vertikal stapeln */
  .gv-action-row {
    flex-direction: column;
    align-items: stretch;
    gap: 6px;
  }
  .gv-action-row form {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
  }
  .gv-action-row form input[type="text"] {
    width: 100% !important;
    min-width: 0;
  }
}
