Privacy Policy

Who we are

Suggested text: Our website address is: http://thundorferarchiv.de.

Comments

Suggested text: When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.

An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.

Media

Suggested text: If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.

Cookies

Suggested text: If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year.

If you visit our login page, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser.

When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select „Remember Me“, your login will persist for two weeks. If you log out of your account, the login cookies will be removed.

If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.

Embedded content from other websites

Suggested text: Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.

These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.

Who we share your data with

Suggested text: If you request a password reset, your IP address will be included in the reset email.

How long we retain your data

Suggested text: If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue.

For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.

What rights you have over your data

Suggested text: If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.

Where your data is sent

Suggested text: Visitor comments may be checked through an automated spam detection service.

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gemeinde-Archiv &amp; Registratur</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600;9..144,700;9..144,900&family=Spectral:ital,wght@0,400;0,500;0,600;1,400&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<style>
  :root{
    --paper: #E7DFC6;
    --paper-soft: #F1EBD8;
    --paper-card: #EFE8D2;
    --ink: #21261F;
    --ink-soft: #4B5245;
    --ink-faint: #7B816F;
    --green: #2E4A3B;
    --green-dark: #1E3129;
    --seal: #8C2F2A;
    --seal-dark: #6E2320;
    --brass: #A9824C;
    --brass-light: #C9A467;
    --line: rgba(33,38,31,0.18);
    --line-strong: rgba(33,38,31,0.32);
    --tab-pdf: #B5651D;
    --tab-image: #2F6B63;
    --tab-video: #5B4B8A;
    --tab-text: #7A6A3F;
    --radius: 3px;
    --shadow-card: 0 1px 0 rgba(33,38,31,0.06), 0 6px 16px -8px rgba(33,38,31,0.25);
    --font-display: 'Fraunces', serif;
    --font-body: 'Spectral', serif;
    --font-mono: 'IBM Plex Mono', monospace;
  }

  *{ box-sizing: border-box; }
  html{ scroll-behavior: smooth; }
  body{
    margin:0;
    background: var(--paper);
    color: var(--ink);
    font-family: var(--font-body);
    font-size: 16px;
    line-height: 1.55;
    background-image:
      radial-gradient(circle at 20% 10%, rgba(169,130,76,0.06), transparent 40%),
      radial-gradient(circle at 90% 80%, rgba(46,74,59,0.05), transparent 45%);
  }
  body.modal-open{ overflow:hidden; }
  ::selection{ background: var(--brass-light); color: var(--green-dark); }

  a{ color: inherit; }
  h1,h2,h3,h4{ font-family: var(--font-display); font-weight:700; margin:0; color: var(--green-dark); }
  p{ margin:0; }
  button{ font-family: var(--font-body); cursor:pointer; }
  input, select, textarea{ font-family: var(--font-body); }

  :focus-visible{ outline: 2.5px solid var(--seal); outline-offset: 2px; }

  .wrap{ max-width: 1180px; margin:0 auto; padding: 0 28px; }

  /* ---------- HEADER ---------- */
  header.site{
    position: sticky; top:0; z-index: 50;
    background: var(--green);
    border-bottom: 3px solid var(--brass);
    color: var(--paper-soft);
  }
  .site-header-inner{
    display:flex; align-items:center; justify-content:space-between;
    padding: 16px 28px;
    max-width: 1180px; margin:0 auto;
    position:relative;
  }
  .brand{ display:flex; align-items:center; gap:12px; text-decoration:none; color: var(--paper-soft); }
  .brand-mark{ width:40px; height:44px; flex-shrink:0; object-fit:contain; display:block; }
  .brand-text{ display:flex; flex-direction:column; line-height:1.1; }
  .brand-text .eyebrow{ font-family: var(--font-mono); font-size:10px; letter-spacing:.18em; text-transform:uppercase; color: var(--brass-light); }
  .brand-text .name{ font-family: var(--font-display); font-weight:700; font-size:20px; letter-spacing:.01em; }

  nav.main{ display:flex; gap:26px; }
  nav.main a{
    text-decoration:none; font-size:14.5px; letter-spacing:.02em;
    color: var(--paper-soft); opacity:.8; position:relative; padding:4px 0;
  }
  nav.main a:hover{ opacity:1; }
  nav.main a::after{
    content:""; position:absolute; left:0; right:0; bottom:-2px; height:2px;
    background: var(--brass-light); transform: scaleX(0); transform-origin:left;
    transition: transform .25s ease;
  }
  nav.main a:hover::after{ transform: scaleX(1); }
  nav.main a.active{ opacity:1; font-weight:600; }
  nav.main a.active::after{ transform: scaleX(1); }

  .nav-toggle{ display:none; background:none; border:1px solid var(--brass-light); color:var(--paper-soft); border-radius: var(--radius); padding:6px 10px; }
  nav.mobile-open{
    display:flex !important; flex-direction:column; position:absolute; top:100%; right:28px;
    background: var(--green); padding:16px 20px; border-radius:3px; border:1px solid var(--brass);
    gap:14px; z-index:60;
  }

  /* ---------- HEADER SEARCH ---------- */
  .header-search{
    display:flex; align-items:center; gap:8px; position:relative; overflow:hidden;
    background: var(--paper-soft); border:1px solid var(--green-dark); border-radius: 999px;
    padding: 8px 14px; width:200px; flex-shrink:0; transition: width .2s ease, box-shadow .2s ease;
    cursor:text;
  }
  .header-search:focus-within{ width:260px; box-shadow: 0 0 0 3px rgba(201,164,103,0.35); }
  .header-search svg{ width:15px; height:15px; color: var(--ink-faint); flex-shrink:0; }
  .header-search input{
    border:none; background:none; outline:none; font-size:13.5px; color: var(--ink);
    width:100%; min-width:0;
  }
  .header-search input::placeholder{ color: var(--ink-faint); }
  @media (max-width: 880px){ .header-search{ width:150px; } .header-search:focus-within{ width:190px; } }
  @media (max-width: 620px){ .header-search{ width:38px; padding:8px; border-radius:50%; } .header-search:focus-within{ width:190px; border-radius:999px; padding:8px 14px; } }

  /* ---------- AUTH ---------- */
  .auth-area{ display:flex; align-items:center; gap:10px; margin-left:4px; }
  .auth-login-link{
    font-family: var(--font-mono); font-size:12.5px; letter-spacing:.04em;
    padding:6px 12px; border:1px solid var(--brass-light); border-radius:999px;
    text-decoration:none; color: var(--paper-soft) !important; opacity:1 !important;
  }
  .auth-login-link:hover{ background: rgba(201,164,103,0.18); }
  .auth-login-link::after{ display:none !important; }
  .auth-session{ display:flex; align-items:center; gap:8px; }
  .role-badge{
    font-family: var(--font-mono); font-size:11px; letter-spacing:.06em; text-transform:uppercase;
    padding:5px 10px; border-radius:999px; color:#fff; white-space:nowrap;
  }
  .role-badge.admin{ background: var(--seal); }
  .role-badge.archivar{ background: var(--brass); }
  .auth-logout-btn{
    background:none; border:1px solid var(--brass-light); color: var(--paper-soft);
    font-size:12.5px; padding:5px 11px; border-radius:999px;
  }
  .auth-logout-btn:hover{ background: rgba(201,164,103,0.18); }

  .login-card{
    background: var(--paper-card); border:1px solid var(--line); border-radius: var(--radius);
    box-shadow: var(--shadow-card); padding: 34px; max-width: 420px; margin: 0 auto;
  }
  .login-card .form-field{ margin-bottom:16px; }
  .login-note{
    margin-top:22px; padding:14px 16px; background: var(--paper-soft); border:1px dashed var(--line-strong);
    border-radius: var(--radius); font-size:13px; color: var(--ink-soft); font-family: var(--font-mono);
  }
  .login-note code{ background: var(--paper); padding:1px 5px; border-radius:2px; }
  .access-note{
    display:flex; gap:12px; align-items:flex-start; background: var(--paper-card); border:1px solid var(--line);
    border-left:4px solid var(--brass); color: var(--ink-soft); padding:16px; border-radius: var(--radius);
    font-size:14.5px; margin-bottom:24px;
  }
  .access-note svg{ flex-shrink:0; width:22px; height:22px; margin-top:1px; color: var(--brass); }
  .early-access-banner{
    display:flex; gap:12px; align-items:flex-start; background:#FBF0DA; border:1px solid var(--brass);
    color: var(--seal-dark); padding:14px 16px; border-radius: var(--radius); font-size:13.5px; margin-bottom:18px;
  }
  .early-access-banner svg{ flex-shrink:0; width:20px; height:20px; margin-top:1px; }
  .danger-btn{
    background: transparent; border:1.5px solid var(--seal); color: var(--seal);
    padding:8px 15px; border-radius: var(--radius); font-size:13px; font-weight:600;
  }
  .danger-btn:hover{ background: var(--seal); color:#fff; }

  /* ---------- PAGE / ROUTING ---------- */
  .page[hidden]{ display:none !important; }
  .page{ padding: 56px 0 70px; }
  .page[data-page="home"]{ padding-top:0; }
  section.block{ border-top: 1px solid var(--line); padding-top:56px; margin-top:56px; }

  /* ---------- HERO ---------- */
  .hero{ padding: 76px 0 60px; position:relative; overflow:hidden; }
  .hero-grid{ display:grid; grid-template-columns: 1.15fr 0.85fr; gap:56px; align-items:center; }
  .hero-eyebrow{
    font-family: var(--font-mono); font-size:12px; letter-spacing:.2em; text-transform:uppercase;
    color: var(--seal); display:flex; align-items:center; gap:10px; margin-bottom:18px;
  }
  .hero-eyebrow::before{ content:""; width:26px; height:1.5px; background: var(--seal); display:inline-block; }
  .hero h1{
    font-size: clamp(38px, 5vw, 62px); line-height: 1.03; letter-spacing:-0.01em;
    animation: rise .7s ease both;
  }
  .hero h1 em{ font-style: italic; color: var(--seal); }
  .hero p.lede{
    font-size:18px; color: var(--ink-soft); max-width:46ch; margin-top:20px;
    animation: rise .7s .08s ease both;
  }
  .hero-actions{ display:flex; gap:14px; margin-top:32px; animation: rise .7s .16s ease both; flex-wrap:wrap; }

  @keyframes rise{ from{ opacity:0; transform: translateY(14px);} to{opacity:1; transform:translateY(0);} }
  @media (prefers-reduced-motion: reduce){ .hero h1, .hero p.lede, .hero-actions{ animation:none; } }

  .btn{
    display:inline-flex; align-items:center; gap:8px;
    padding: 13px 22px; border-radius: var(--radius);
    font-size:14.5px; font-weight:600; letter-spacing:.01em; text-decoration:none; border:1.5px solid transparent;
    transition: transform .15s ease, box-shadow .15s ease;
  }
  .btn:hover{ transform: translateY(-1px); }
  .btn-primary{ background: var(--seal); color:#F6EEDD; }
  .btn-primary:hover{ box-shadow: 0 6px 18px -6px rgba(140,47,42,0.55); }
  .btn-ghost{ background: transparent; border-color: var(--line-strong); color: var(--green-dark); }
  .btn-ghost:hover{ border-color: var(--green-dark); }
  .btn:disabled{ opacity:.6; cursor:not-allowed; transform:none; }

  /* Signature: wax-stamp illustration in hero */
  .stamp-display{ display:flex; align-items:center; justify-content:center; }
  .stamp-card{
    background: var(--paper-card); border:1px solid var(--line);
    border-radius: var(--radius); box-shadow: var(--shadow-card);
    padding: 30px; width:100%; max-width:340px; position:relative;
  }
  .stamp-card .card-label{ font-family: var(--font-mono); font-size:11px; letter-spacing:.14em; color: var(--ink-faint); text-transform:uppercase; }
  .stamp-card .card-title{ font-family: var(--font-display); font-size:22px; margin-top:6px; color: var(--green-dark); }
  .stamp-svg{ width:150px; height:150px; margin: 22px auto 6px; display:block; animation: wobble-in .9s .3s ease both; }
  @keyframes wobble-in{ from{ opacity:0; transform: rotate(-18deg) scale(.7);} to{ opacity:1; transform: rotate(-9deg) scale(1);} }
  .stamp-card .card-note{ font-size:13px; color: var(--ink-soft); text-align:center; margin-top:10px; }

  /* ---------- STATS ---------- */
  .stats{ padding: 46px 0 10px; }
  .stats-row{ display:grid; grid-template-columns: repeat(3,1fr); gap:18px; }
  .stat-card{
    background: var(--paper-card); border:1px solid var(--line); border-radius: var(--radius);
    padding: 22px 22px 20px; box-shadow: var(--shadow-card);
    border-left: 4px solid var(--brass);
  }
  .stat-card .num{ font-family: var(--font-display); font-size:38px; color: var(--green-dark); line-height:1; }
  .stat-card .label{ margin-top:8px; font-size:13.5px; color: var(--ink-soft); }

  /* ---------- TEASER (latest entries on home) ---------- */
  .teaser-head{ display:flex; align-items:baseline; justify-content:space-between; margin-bottom:20px; flex-wrap:wrap; gap:10px; }
  .teaser-head h2{ font-size:24px; }
  .teaser-list{ display:flex; flex-direction:column; border-top:1px solid var(--line); }
  .teaser-item{
    display:flex; align-items:center; justify-content:space-between; gap:16px;
    padding: 16px 4px; border-bottom:1px solid var(--line); text-decoration:none; color: var(--ink);
    transition: background .15s ease; background:none; border-left:none; border-right:none; border-top:none;
    width:100%; text-align:left; font-family:inherit; font-size:inherit;
  }
  .teaser-item:hover{ background: rgba(169,130,76,0.08); }
  .teaser-left{ display:flex; align-items:center; gap:14px; min-width:0; }
  .teaser-tag{ font-family: var(--font-mono); font-size:10px; letter-spacing:.08em; color:#fff; padding:3px 8px; border-radius:2px; text-transform:uppercase; flex-shrink:0; }
  .teaser-tag.pdf{ background: var(--tab-pdf);} .teaser-tag.image{background:var(--tab-image);} .teaser-tag.video{background:var(--tab-video);} .teaser-tag.text{background:var(--tab-text);}
  .teaser-title{ font-family: var(--font-display); font-weight:600; font-size:16px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .teaser-meta{ font-family: var(--font-mono); font-size:11.5px; color: var(--ink-faint); flex-shrink:0; }
  .teaser-empty{ padding: 30px 4px; color: var(--ink-soft); font-size:14.5px; }

  /* ---------- SECTION HEADS ---------- */
  .sec-head{ display:flex; align-items:flex-end; justify-content:space-between; gap:24px; flex-wrap:wrap; margin-bottom: 34px; }
  .sec-head .eyebrow{ font-family: var(--font-mono); font-size:11.5px; letter-spacing:.18em; text-transform:uppercase; color: var(--brass); }
  .sec-head h2{ font-size: clamp(26px, 3vw, 34px); margin-top:6px; }
  .sec-head p{ color: var(--ink-soft); max-width:52ch; margin-top:6px; }

  /* ---------- POLICY BANNER ---------- */
  .policy{
    background: var(--green); color: var(--paper-soft);
    border-radius: var(--radius); padding: 26px 28px; display:flex; gap:20px; align-items:flex-start;
    border-left: 5px solid var(--seal); margin-bottom:34px;
  }
  .policy svg{ flex-shrink:0; width:30px; height:30px; margin-top:2px; }
  .policy h3{ color:#F6EEDD; font-size:18px; }
  .policy p{ color: rgba(246,238,221,0.86); font-size:14.5px; margin-top:8px; max-width:70ch; }

  /* ---------- ARCHIVE CONTROLS ---------- */
  .controls{ display:flex; flex-wrap:wrap; gap:14px; align-items:center; justify-content:space-between; margin-bottom:28px; }
  .chips{ display:flex; flex-wrap:wrap; gap:8px; }
  .chip{
    font-family: var(--font-mono); font-size:12.5px; letter-spacing:.03em;
    padding: 8px 14px; border-radius: 999px; border:1px solid var(--line-strong);
    background: var(--paper-soft); color: var(--ink-soft);
  }
  .chip[aria-pressed="true"]{ background: var(--green); color: var(--paper-soft); border-color: var(--green); }
  .search-box{ position:relative; }
  .search-box input{
    width:260px; padding: 10px 14px 10px 36px; border-radius: var(--radius);
    border:1px solid var(--line-strong); background: var(--paper-soft); color: var(--ink);
    font-size:14px;
  }
  .search-box svg{ position:absolute; left:11px; top:50%; transform:translateY(-50%); width:15px; height:15px; color: var(--ink-faint); }

  /* ---------- GRID / CARDS ---------- */
  .grid{ display:grid; grid-template-columns: repeat(auto-fill, minmax(260px,1fr)); gap:20px; }
  .empty-state{
    grid-column: 1/-1; text-align:center; padding: 56px 20px; color: var(--ink-soft);
    border:1.5px dashed var(--line-strong); border-radius: var(--radius); background: var(--paper-soft);
  }
  .empty-state h4{ margin-bottom:6px; }

  .card{
    position:relative; background: var(--paper-card); border:1px solid var(--line);
    border-radius: var(--radius); box-shadow: var(--shadow-card); overflow:hidden;
    display:flex; flex-direction:column; transition: transform .18s ease, box-shadow .18s ease;
  }
  .card:hover{ transform: translateY(-3px); box-shadow: 0 2px 0 rgba(33,38,31,0.06), 0 14px 28px -12px rgba(33,38,31,0.32); }
  .tab{
    position:absolute; top:14px; left:0; font-family: var(--font-mono); font-size:10.5px; letter-spacing:.1em;
    color:#fff; padding: 4px 10px 4px 12px; border-radius: 0 3px 3px 0; text-transform:uppercase;
  }
  .tab.pdf{ background: var(--tab-pdf); } .tab.image{ background: var(--tab-image); }
  .tab.video{ background: var(--tab-video); } .tab.text{ background: var(--tab-text); }
  .tab.static{ position:static; display:inline-block; margin-bottom:14px; }

  .permalink-btn{
    position:absolute; top:10px; right:10px; width:28px; height:28px; border-radius:50%;
    background: rgba(241,235,216,0.9); border:1px solid var(--line-strong); color: var(--ink-soft);
    display:flex; align-items:center; justify-content:center; z-index:2; transition: background .15s ease, color .15s ease;
  }
  .permalink-btn:hover{ background: var(--brass-light); color: var(--green-dark); }
  .permalink-btn svg{ width:14px; height:14px; }

  .card-body{ padding: 46px 18px 18px; flex:1; display:flex; flex-direction:column; gap:10px; }
  .card-aktz{ font-family: var(--font-mono); font-size:11px; color: var(--ink-faint); letter-spacing:.05em; }
  .card-title{ font-family: var(--font-display); font-weight:600; font-size:19px; line-height:1.25; color: var(--green-dark); }
  .card-meta{ font-size:12.5px; color: var(--ink-soft); }
  .card-desc-lock{ font-size:13px; color: var(--ink-faint); font-style: italic; }

  .card-footer{ padding: 14px 18px; border-top:1px solid var(--line); display:flex; align-items:center; justify-content:space-between; gap:10px; }
  .card-footer .status{ font-size:12px; font-family: var(--font-mono); }
  .status.open{ color: var(--tab-image); }
  .status.sealed{ color: var(--seal); }
  .card-footer .open-btn{
    font-size:13px; font-weight:600; background: var(--green); color: var(--paper-soft);
    border:none; padding: 8px 14px; border-radius: var(--radius); text-decoration:none; display:inline-block;
  }
  .card-footer .open-btn:hover{ background: var(--green-dark); }

  .card.sealed .stamp-overlay{
    position:absolute; top:52%; left:50%; width:118px; height:118px;
    transform: translate(-50%,-50%) rotate(-9deg);
    pointer-events:none; opacity:.94;
  }
  .card.sealed:hover .stamp-overlay{ transform: translate(-50%,-50%) rotate(-6deg) scale(1.03); transition: transform .3s ease; }

  /* ---------- SHARED ENTRY CONTENT (used in modal + full page) ---------- */
  .entry-meta-row{ display:flex; gap:18px; flex-wrap:wrap; margin: 16px 0 20px; font-size:13px; color: var(--ink-soft); }
  .entry-desc{ font-size:15px; color: var(--ink-soft); margin-bottom:22px; }
  .content-box{ border-top:1px solid var(--line); padding-top:20px; }
  .content-box img{ max-width:100%; border-radius: var(--radius); display:block; }
  .content-box video{ max-width:100%; border-radius: var(--radius); }
  .content-box iframe{ width:100%; height:420px; border:1px solid var(--line); border-radius: var(--radius); }
  .text-content{ white-space:pre-wrap; font-size:14.5px; background:var(--paper); padding:18px; border-radius: var(--radius); border:1px solid var(--line); max-height:320px; overflow-y:auto; }
  .locked-note{ display:flex; gap:12px; align-items:flex-start; background:#F5DEDC; border:1px solid var(--seal); color: var(--seal-dark); padding:16px; border-radius: var(--radius); font-size:14.5px; margin-top:6px; }
  .locked-note svg{ flex-shrink:0; width:22px; height:22px; margin-top:1px; }
  .success-banner{ background:#E1EDE4; border:1px solid var(--green); color: var(--green-dark); padding:14px 16px; border-radius: var(--radius); font-size:14px; margin-bottom:22px; }
  .permalink-field{ display:flex; align-items:center; gap:8px; margin-top:14px; }
  .permalink-field input{ flex:1; padding:9px 10px; font-family: var(--font-mono); font-size:12.5px; border:1px solid var(--line-strong); border-radius: var(--radius); background: var(--paper-soft); color: var(--ink-soft); }
  .copy-btn{ background: var(--brass); color:#fff; border:none; padding:9px 14px; border-radius: var(--radius); font-size:12.5px; font-weight:600; white-space:nowrap; }
  .copy-btn:hover{ background: var(--brass-light); }

  /* ---------- AKTE DETAIL PAGE ---------- */
  .crumb{ font-family: var(--font-mono); font-size:12px; color: var(--ink-faint); margin-bottom:18px; }
  .crumb a{ text-decoration:none; color: var(--brass); }
  .crumb a:hover{ text-decoration:underline; }
  .detail-card{
    background: var(--paper-card); border:1px solid var(--line); border-radius: var(--radius);
    box-shadow: var(--shadow-card); padding: 36px; max-width: 740px; margin: 0 auto;
  }
  .detail-card h1.det-title{ font-size: clamp(24px,3vw,32px); margin-top:8px; }
  .detail-actions{ display:flex; gap:12px; margin-top:26px; flex-wrap:wrap; align-items:center; }

  /* ---------- NOT FOUND ---------- */
  .notfound-box{ text-align:center; max-width:480px; margin: 30px auto; }
  .notfound-box svg{ width:64px; height:64px; margin-bottom:18px; color: var(--seal); }
  .notfound-box h2{ font-size:26px; margin-bottom:10px; }
  .notfound-box p{ color: var(--ink-soft); margin-bottom:22px; }

  /* ---------- QUICK-PREVIEW MODAL ---------- */
  .modal-backdrop{
    position:fixed; inset:0; background: rgba(20,24,18,0.62); display:none; align-items:center; justify-content:center;
    padding: 24px; z-index: 200;
  }
  .modal-backdrop.show{ display:flex; }
  .modal{
    background: var(--paper-soft); border-radius: var(--radius); max-width: 620px; width:100%;
    max-height: 88vh; overflow-y:auto; padding: 30px; position:relative; box-shadow: 0 30px 60px -20px rgba(0,0,0,0.5);
    animation: modal-in .18s ease both;
  }
  @keyframes modal-in{ from{ opacity:0; transform: translateY(8px) scale(.985);} to{opacity:1; transform:translateY(0) scale(1);} }
  @media (prefers-reduced-motion: reduce){ .modal{ animation:none; } }
  .modal-close{ position:absolute; top:14px; right:14px; background:none; border:none; font-size:19px; color: var(--ink-soft); width:32px; height:32px; border-radius:50%; }
  .modal-close:hover{ background: rgba(33,38,31,0.08); }
  .modal-eyebrow{ font-family: var(--font-mono); font-size:11px; letter-spacing:.14em; text-transform:uppercase; color: var(--brass); margin-bottom:10px; }
  .modal h3{ font-size:23px; padding-right:30px; }
  .modal-footer{ border-top:1px solid var(--line); margin-top:24px; padding-top:20px; display:flex; gap:12px; align-items:center; flex-wrap:wrap; justify-content:space-between; }
  .modal-footer .btn{ padding:9px 16px; }

  /* ---------- REGISTRATUR FORM ---------- */
  .registratur-panel{
    background: var(--paper-card); border:1px solid var(--line); border-radius: var(--radius);
    box-shadow: var(--shadow-card); padding: 32px; display:grid; grid-template-columns: 1fr 1.3fr; gap:36px;
  }
  .registratur-aside h3{ font-size:20px; }
  .registratur-aside p{ font-size:14px; color: var(--ink-soft); margin-top:12px; }
  .registratur-aside .rule{ margin-top:22px; padding-top:18px; border-top:1px dashed var(--line-strong); }
  .registratur-aside .rule dt{ font-family: var(--font-mono); font-size:11px; letter-spacing:.08em; color: var(--brass); text-transform:uppercase; }
  .registratur-aside .rule dd{ margin:4px 0 14px; font-size:14px; }

  form#registratur-form{ display:grid; grid-template-columns: 1fr 1fr; gap:18px; }
  .form-field{ display:flex; flex-direction:column; gap:6px; }
  .form-field.full{ grid-column: 1/-1; }
  .form-field label{ font-size:13px; font-weight:600; color: var(--green-dark); }
  .form-field .hint{ font-size:12px; color: var(--ink-faint); }
  .form-field input[type=text], .form-field input[type=date], .form-field input[type=url],
  .form-field select, .form-field textarea, .form-field input[type=file]{
    padding: 11px 12px; border-radius: var(--radius); border:1px solid var(--line-strong);
    background: var(--paper-soft); color: var(--ink); font-size:14.5px;
  }
  .form-field textarea{ min-height:110px; resize:vertical; font-family: var(--font-body); }
  .form-field input:focus, .form-field select:focus, .form-field textarea:focus{ border-color: var(--green); }
  .form-field.hidden{ display:none; }
  .release-preview{
    grid-column: 1/-1; background: var(--paper-soft); border:1px dashed var(--line-strong);
    border-radius: var(--radius); padding: 14px 16px; font-size:13.5px; color: var(--ink-soft);
    display:flex; align-items:center; gap:10px; font-family: var(--font-mono);
  }
  .release-preview strong{ color: var(--seal); }
  .radio-row{ display:flex; gap:16px; font-size:13.5px; }
  .radio-row label{ display:flex; align-items:center; gap:6px; font-weight:400; }

  .submit-row{ grid-column: 1/-1; display:flex; align-items:center; gap:14px; margin-top:6px; flex-wrap:wrap; }
  .banner{ grid-column:1/-1; padding: 12px 14px; border-radius: var(--radius); font-size:13.5px; display:none; }
  .banner.show{ display:block; }
  .banner.error{ background:#F5DEDC; color: var(--seal-dark); border:1px solid var(--seal); }
  .banner.success{ background:#E1EDE4; color: var(--green-dark); border:1px solid var(--green); }

  /* ---------- ABOUT / IMPRESSUM ---------- */
  .about-grid{ display:grid; grid-template-columns: 1fr 1fr; gap:40px; }
  .about-grid p{ color: var(--ink-soft); font-size:15px; margin-top:14px; }
  .about-grid h3{ font-size:20px; }
  .impressum-block{ max-width:720px; }
  .impressum-block dl{ margin-top:24px; }
  .impressum-block dt{ font-family: var(--font-mono); font-size:11px; letter-spacing:.1em; text-transform:uppercase; color: var(--brass); margin-top:20px; }
  .impressum-block dd{ margin:4px 0 0; font-size:15px; color: var(--ink-soft); }
  .impressum-note{ margin-top:34px; padding:18px 20px; background: var(--paper-card); border:1px solid var(--line); border-left:4px solid var(--seal); border-radius: var(--radius); font-size:14px; color: var(--ink-soft); }

  /* ---------- FOOTER ---------- */
  footer.site{ border-top: 3px solid var(--brass); background: var(--green-dark); color: rgba(246,238,221,0.75); padding: 30px 0; }
  .footer-inner{ display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:12px; font-size:13px; }
  footer.site a{ text-decoration:none; color: rgba(246,238,221,0.9); }
  footer.site a:hover{ text-decoration:underline; }

  .skeleton{ opacity:.55; }
  .spinner{ width:20px; height:20px; border:2.5px solid var(--line-strong); border-top-color: var(--seal); border-radius:50%; animation: spin .7s linear infinite; display:inline-block; }
  @keyframes spin{ to{ transform: rotate(360deg); } }

  @media (max-width: 880px){
    nav.main{ display:none; }
    .nav-toggle{ display:inline-flex; }
    .hero-grid{ grid-template-columns: 1fr; }
    .stats-row{ grid-template-columns: 1fr; }
    .registratur-panel{ grid-template-columns: 1fr; }
    form#registratur-form{ grid-template-columns: 1fr; }
    .about-grid{ grid-template-columns: 1fr; }
    .detail-card{ padding:24px; }
    .modal{ padding:22px; }
  }
</style>
</head>
<body>

<header class="site">
  <div class="site-header-inner">
    <a class="brand" href="#/">
      <img class="brand-mark" src="data:image/png;base64,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" alt="Wappen der Gemeinde Thundorf">
      <span class="brand-text">
        <span class="eyebrow">Kommunales</span>
        <span class="name">Gemeinde&#8209;Archiv</span>
      </span>
    </a>
    <nav class="main" id="mainNav">
      <a href="#/" data-route="/">Startseite</a>
      <a href="#/archiv" data-route="/archiv">Archiv</a>
      <a href="#/registratur" data-route="/registratur">Registratur</a>
      <a href="#/ueber-uns" data-route="/ueber-uns">Über uns</a>
      <a href="#/impressum" data-route="/impressum">Impressum</a>
      <span id="authArea" class="auth-area"></span>
    </nav>
    <form class="header-search" id="headerSearchForm" role="search">
      <svg viewBox="0 0 24 24" fill="none"><circle cx="11" cy="11" r="7" stroke="currentColor" stroke-width="1.8"/><path d="m20 20-3.5-3.5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>
      <input type="text" id="headerSearchInput" placeholder="Archiv durchsuchen…" aria-label="Archiv durchsuchen">
    </form>
    <button class="nav-toggle" id="navToggle" aria-label="Menü öffnen" aria-expanded="false">☰</button>
  </div>
</header>

<main>

  <!-- ============ STARTSEITE ============ -->
  <section class="page" data-page="home" hidden>
    <div class="hero">
      <div class="wrap hero-grid">
        <div>
          <div class="hero-eyebrow">Findbuch &amp; Bestandsverzeichnis</div>
          <h1>Das Gedächtnis der Gemeinde,<br><em>sorgfältig verwahrt.</em></h1>
          <p class="lede">Dokumente, Fotografien, Filmaufnahmen und Berichte aus der Gemeindeverwaltung werden hier verzeichnet und archiviert. Sensible Bestände unterliegen einer Sperrfrist und werden erst nach Ablauf automatisch öffentlich einsehbar.</p>
          <div class="hero-actions">
            <a class="btn btn-primary" href="#/archiv">Archiv durchsuchen</a>
            <a class="btn btn-ghost" href="#/registratur">Bestand einreichen</a>
          </div>
        </div>
        <div class="stamp-display">
          <div class="stamp-card">
            <div class="card-label">Aktenzeichen · GA&#8209;2026&#8209;0001</div>
            <div class="card-title">Beispielakte</div>
            <svg class="stamp-svg" viewBox="0 0 200 200">
              <circle cx="100" cy="100" r="88" fill="none" stroke="#8C2F2A" stroke-width="4" stroke-dasharray="2 6"/>
              <circle cx="100" cy="100" r="74" fill="none" stroke="#8C2F2A" stroke-width="2.5"/>
              <text x="100" y="80" text-anchor="middle" font-family="IBM Plex Mono, monospace" font-size="13" fill="#8C2F2A" letter-spacing="2">GESPERRT</text>
              <text x="100" y="112" text-anchor="middle" font-family="IBM Plex Mono, monospace" font-size="11" fill="#8C2F2A" letter-spacing="1">SPERRFRIST</text>
              <text x="100" y="130" text-anchor="middle" font-family="IBM Plex Mono, monospace" font-size="15" fill="#8C2F2A" font-weight="600">50 JAHRE</text>
            </svg>
            <p class="card-note">So kennzeichnet die Registratur jeden Bestand, der noch nicht öffentlich einsehbar ist.</p>
          </div>
        </div>
      </div>
    </div>

    <div class="wrap stats">
      <div class="stats-row">
        <div class="stat-card"><div class="num" id="stat-total">–</div><div class="label">Verzeichnete Bestände insgesamt</div></div>
        <div class="stat-card"><div class="num" id="stat-open">–</div><div class="label">Öffentlich einsehbar</div></div>
        <div class="stat-card"><div class="num" id="stat-sealed">–</div><div class="label">Unter Sperrfrist</div></div>
      </div>
    </div>

    <div class="wrap block">
      <div class="teaser-head">
        <h2>Zuletzt registriert</h2>
        <a href="#/archiv" class="btn btn-ghost" style="padding:9px 16px;">Gesamtes Archiv ansehen →</a>
      </div>
      <p style="font-size:13px; color:var(--ink-faint); margin-bottom:6px;">Klick öffnet die Schnellvorschau · Rechtsklick / Strg+Klick öffnet die permanente Akte-Seite direkt.</p>
      <div class="teaser-list" id="teaserList"></div>
    </div>
  </section>

  <!-- ============ ARCHIV ============ -->
  <section class="page" data-page="archiv" hidden>
    <div class="wrap">
      <div class="sec-head">
        <div>
          <div class="eyebrow">Bestandsverzeichnis</div>
          <h2>Archiv durchsuchen</h2>
          <p>Klick auf „Ansehen" öffnet eine Schnellvorschau. Jede Akte hat zusätzlich eine eigene, dauerhafte Permalink-Seite zum Teilen und Zitieren.</p>
        </div>
      </div>

      <div class="policy">
        <svg viewBox="0 0 24 24" fill="none"><path d="M12 2 4 6v6c0 5 3.4 8.7 8 10 4.6-1.3 8-5 8-10V6l-8-4Z" stroke="#F6EEDD" stroke-width="1.6"/><path d="M9 12l2 2 4-4" stroke="#F6EEDD" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>
        <div>
          <h3>Warum eine Sperrfrist?</h3>
          <p>Im kommunalen Archivwesen gelten für personenbezogene und sensible Unterlagen üblicherweise mehrjährige Schutzfristen, die je nach Landesarchivrecht und Aktenart variieren. Diese Anwendung setzt für sämtliche Einträge einheitlich eine Frist von <strong style="color:#F6EEDD;">50 Jahren</strong> ab Dokumentdatum an, bevor Inhalte öffentlich einsehbar werden.</p>
        </div>
      </div>

      <div class="controls">
        <div class="chips" id="filterChips" role="group" aria-label="Nach Kategorie filtern">
          <button class="chip" data-filter="all" aria-pressed="true">Alle</button>
          <button class="chip" data-filter="pdf" aria-pressed="false">PDF</button>
          <button class="chip" data-filter="image" aria-pressed="false">Bilder</button>
          <button class="chip" data-filter="video" aria-pressed="false">Videos</button>
          <button class="chip" data-filter="text" aria-pressed="false">Texte</button>
        </div>
        <div class="search-box">
          <svg viewBox="0 0 24 24" fill="none"><circle cx="11" cy="11" r="7" stroke="currentColor" stroke-width="1.8"/><path d="m20 20-3.5-3.5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>
          <input type="text" id="searchInput" placeholder="Titel oder Aktenzeichen suchen…">
        </div>
      </div>

      <div class="grid" id="archiveGrid">
        <div class="empty-state"><div class="spinner"></div></div>
      </div>
    </div>
  </section>

  <!-- ============ AKTE-DETAIL (Permalink-Zielseite) ============ -->
  <section class="page" data-page="akte" hidden>
    <div class="wrap">
      <div class="crumb"><a href="#/archiv">Archiv</a> / <span id="crumbLabel">Akte</span></div>
      <div id="akteContent"><div class="detail-card" style="text-align:center;"><div class="spinner"></div></div></div>
    </div>
  </section>

  <!-- ============ ANMELDUNG ============ -->
  <section class="page" data-page="anmelden" hidden>
    <div class="wrap">
      <div class="sec-head">
        <div>
          <div class="eyebrow">Zugangsberechtigung</div>
          <h2>Anmeldung für Archivpersonal</h2>
          <p>Die Registratur sowie der vorzeitige Einblick in gesperrte Akten sind Archivar:innen und Administrator:innen vorbehalten.</p>
        </div>
      </div>
      <div class="login-card">
        <form id="login-form">
          <div class="banner" id="loginBanner"></div>
          <div class="form-field">
            <label for="login-username">Benutzername</label>
            <input type="text" id="login-username" autocomplete="username" required>
          </div>
          <div class="form-field">
            <label for="login-password">Passwort</label>
            <input type="password" id="login-password" autocomplete="current-password" required>
          </div>
          <button type="submit" class="btn btn-primary" style="width:100%; justify-content:center;">Anmelden</button>
        </form>
        <div class="login-note">
          <strong>Demo-Zugangsdaten</strong><br>
          Archivar: <code>archivar</code> / <code>archiv2026</code><br>
          Administrator: <code>admin</code> / <code>admin2026</code>
        </div>
        <div style="margin-top:16px; display:flex; gap:10px; flex-wrap:wrap;">
          <button type="button" class="btn btn-ghost" style="flex:1; justify-content:center;" data-quicklogin="archivar">Als Archivar anmelden</button>
          <button type="button" class="btn btn-ghost" style="flex:1; justify-content:center;" data-quicklogin="admin">Als Administrator anmelden</button>
        </div>
      </div>
    </div>
  </section>

  <!-- ============ REGISTRATUR ============ -->
  <section class="page" data-page="registratur" hidden>
    <div class="wrap">
      <div class="sec-head">
        <div>
          <div class="eyebrow">Neuaufnahme</div>
          <h2>Registratur</h2>
          <p>Neue Bestände werden hier erfasst. Die Sperrfrist wird automatisch aus dem Dokumentdatum berechnet und kann nicht manuell verkürzt werden. Nach dem Speichern erhalten Sie sofort den Permalink der neuen Akte.</p>
        </div>
      </div>

      <div id="registratur-locked" style="display:none;">
        <div class="access-note">
          <svg viewBox="0 0 24 24" fill="none"><rect x="5" y="10" width="14" height="10" rx="1.5" stroke="currentColor" stroke-width="1.6"/><path d="M8 10V7a4 4 0 0 1 8 0v3" stroke="currentColor" stroke-width="1.6"/></svg>
          <div>Die Registratur ist Archivpersonal vorbehalten. Bitte melden Sie sich als Archivar oder Administrator an, um neue Bestände einzureichen.</div>
        </div>
        <a class="btn btn-primary" href="#/anmelden">Zur Anmeldung</a>
      </div>

      <div id="registratur-unlocked" style="display:none;">
      <div class="registratur-panel">
        <aside class="registratur-aside">
          <h3>Ablage-Hinweise</h3>
          <p>Jeder Bestand erhält beim Einreichen ein fortlaufendes Aktenzeichen, einen eigenen Permalink und wird sofort im Verzeichnis geführt — mit gesperrtem Inhalt, sofern die Frist noch läuft.</p>
          <div class="rule">
            <dt>Regel</dt>
            <dd>Sperrfrist = Dokumentdatum + 50 Jahre</dd>
            <dt>Zulässige Formate</dt>
            <dd>PDF, Bild (JPG/PNG), Video (Datei oder externer Link), lesbarer Text</dd>
            <dt>Größenempfehlung</dt>
            <dd>Bis ca. 3,5 MB je Datei für diese Demo-Umgebung; größere Videos bitte als externen Link angeben.</dd>
          </div>
        </aside>

        <form id="registratur-form">
          <div class="banner" id="formBanner"></div>

          <div class="form-field">
            <label for="input-title">Titel *</label>
            <input type="text" id="input-title" required placeholder="z. B. Ratsprotokoll Bausitzung">
          </div>
          <div class="form-field">
            <label for="input-category">Kategorie *</label>
            <select id="input-category" required>
              <option value="">Bitte wählen…</option>
              <option value="pdf">PDF-Dokument</option>
              <option value="image">Bild</option>
              <option value="video">Video</option>
              <option value="text">Lesbarer Text</option>
            </select>
          </div>

          <div class="form-field full">
            <label for="input-desc">Beschreibung</label>
            <textarea id="input-desc" placeholder="Kurze Zusammenfassung des Inhalts (wird erst nach Ablauf der Sperrfrist angezeigt)"></textarea>
          </div>

          <div class="form-field">
            <label for="input-date">Dokumentdatum *</label>
            <input type="date" id="input-date" required>
            <span class="hint">Datum, dem das Schriftstück / Material zugeordnet wird</span>
          </div>
          <div class="form-field">
            <label>Aktenzeichen</label>
            <input type="text" value="wird automatisch vergeben" disabled>
          </div>

          <div class="form-field hidden" id="field-file">
            <label id="field-file-label" for="input-file">Datei</label>
            <input type="file" id="input-file">
          </div>

          <div class="form-field hidden" id="field-video-source">
            <label>Videoquelle</label>
            <div class="radio-row">
              <label><input type="radio" name="videoSource" value="file" checked> Datei hochladen</label>
              <label><input type="radio" name="videoSource" value="url"> Externer Link</label>
            </div>
          </div>
          <div class="form-field hidden" id="field-video-file">
            <label for="input-video-file">Videodatei</label>
            <input type="file" id="input-video-file" accept="video/*">
          </div>
          <div class="form-field hidden" id="field-video-url">
            <label for="input-video-url">Video-URL</label>
            <input type="url" id="input-video-url" placeholder="https://…">
          </div>

          <div class="form-field hidden full" id="field-text">
            <label for="input-text">Textinhalt *</label>
            <textarea id="input-text" style="min-height:160px" placeholder="Volltext einfügen…"></textarea>
          </div>

          <div class="release-preview" id="releasePreview">
            Sperrfrist wird berechnet, sobald ein Dokumentdatum gewählt wurde.
          </div>

          <div class="submit-row">
            <button type="submit" class="btn btn-primary" id="submitBtn">In Registratur aufnehmen</button>
            <span class="hint" style="color:var(--ink-faint); font-size:12.5px;">Angemeldet als <span id="registraturAngemeldetAls">–</span>. Einträge sind für alle Besucher öffentlich sichtbar, sobald die Sperrfrist abläuft.</span>
          </div>
        </form>
      </div>
      </div>
    </div>
  </section>

  <!-- ============ ÜBER UNS ============ -->
  <section class="page" data-page="ueber" hidden>
    <div class="wrap about-grid">
      <div>
        <div class="eyebrow">Über dieses Archiv</div>
        <h2 style="margin-top:6px;">Transparenz mit Augenmaß</h2>
        <p>Das Gemeinde-Archiv führt Verwaltungsunterlagen, Fotografien, Filmaufnahmen und Berichte, die für die Nachwelt von Bedeutung sind. Titel und Aktenzeichen jedes Bestands sind jederzeit öffentlich recherchierbar — der eigentliche Inhalt wird jedoch erst nach Ablauf der Sperrfrist freigegeben.</p>
        <p>Diese Vorgehensweise orientiert sich an der gängigen Praxis kommunaler Archive, wonach schützenswerte Unterlagen erst nach einer mehrjahrzehntelangen Frist der Öffentlichkeit zugänglich gemacht werden.</p>
      </div>
      <div>
        <h3>Vorschau &amp; Permalink</h3>
        <p>Beim Durchsuchen öffnet ein Klick auf eine Akte zunächst eine schnelle Vorschau, ohne die Trefferliste zu verlassen. Über den Button „Vollständige Seite öffnen" gelangen Sie zur dauerhaften, zitierfähigen Permalink-Seite dieser Akte — der Adresse, die Sie teilen oder in einem Dokument referenzieren können.</p>
        <p>Jeder eingereichte Bestand erhält automatisch ein Aktenzeichen und einen eigenen Permalink. Die Sperrfrist wird strikt aus dem Dokumentdatum berechnet (+50 Jahre) und kann bei der Einreichung nicht verkürzt werden.</p>
      </div>
    </div>
  </section>

  <!-- ============ IMPRESSUM ============ -->
  <section class="page" data-page="impressum" hidden>
    <div class="wrap">
      <div class="eyebrow">Rechtliche Angaben</div>
      <h2 style="margin-top:6px; margin-bottom:8px;">Impressum</h2>
      <div class="impressum-block">
        <dl>
          <dt>Angaben gemäß § 5 TMG</dt>
          <dd>Gemeindeverwaltung Musterheim<br>[Straße, Hausnummer einfügen]<br>[PLZ, Ort einfügen]</dd>
          <dt>Vertreten durch</dt>
          <dd>[Name der/des Bürgermeister(in) einfügen]</dd>
          <dt>Kontakt</dt>
          <dd>Telefon: [Telefonnummer einfügen]<br>E-Mail: [E-Mail-Adresse einfügen]</dd>
          <dt>Verantwortlich für das Archiv</dt>
          <dd>Gemeindearchiv Musterheim, Registratur &amp; Bestandsverzeichnis</dd>
        </dl>
        <div class="impressum-note">
          <strong>Technischer Hinweis:</strong> Die Sperrfrist wird in dieser Anwendung clientseitig anhand des Dokumentdatums geprüft und dient der Veranschaulichung des Konzepts. Für den produktiven Einsatz mit rechtlich verbindlicher Zugriffskontrolle wird eine serverseitige Prüfung mit Zugriffsprotokollierung empfohlen, da clientseitige Sperren technisch umgehbar sind.
        </div>
      </div>
    </div>
  </section>

  <!-- ============ 404 ============ -->
  <section class="page" data-page="notfound" hidden>
    <div class="wrap">
      <div class="notfound-box">
        <svg viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="1.6"/><path d="M9.5 9.5c.4-1.4 3.6-1.4 4 0 .3 1-1.9 1.7-1.9 3.2M12 17h.01" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></svg>
        <h2>Seite oder Akte nicht gefunden</h2>
        <p>Unter diesem Permalink ist kein Eintrag verzeichnet. Möglicherweise wurde die Adresse falsch abgetippt oder die Akte existiert in diesem Archiv nicht.</p>
        <a class="btn btn-primary" href="#/">Zur Startseite</a>
      </div>
    </div>
  </section>

</main>

<footer class="site">
  <div class="wrap footer-inner">
    <span>© <span id="year"></span> Gemeinde-Archiv · Registratur</span>
    <span><a href="#/">Startseite</a> · <a href="#/archiv">Archiv</a> · <a href="#/impressum">Impressum</a></span>
  </div>
</footer>

<!-- Quick-preview modal -->
<div class="modal-backdrop" id="modalBackdrop">
  <div class="modal" role="dialog" aria-modal="true" aria-labelledby="modalTitleHeading">
    <button class="modal-close" id="modalClose" aria-label="Schließen">✕</button>
    <div id="modalBody"></div>
  </div>
</div>

<script>
(function(){
  const CATEGORY_LABEL = { pdf:'PDF', image:'Bild', video:'Video', text:'Text' };
  const BASE_TITLE = 'Gemeinde-Archiv & Registratur';
  const grid = document.getElementById('archiveGrid');
  const chips = document.getElementById('filterChips');
  const searchInput = document.getElementById('searchInput');
  let indexData = [];
  let activeFilter = 'all';
  let dataLoaded = false;
  let justCreatedId = null;
  let justCreatedMsg = '';
  let lastFocusedEl = null;
  let session = null; // { role: 'archivar'|'admin', label: '...' }
  let redirectAfterLogin = '/';

  document.getElementById('year').textContent = new Date().getFullYear();

  /* ---------- AUTH / ZUGANGSBERECHTIGUNG ----------
     Hinweis: Diese Anmeldung prüft Zugangsdaten rein im Browser (clientseitig).
     Sie dient als Demo/UI-Zugriffsschutz, ist aber technisch umgehbar (z. B. über
     die Entwicklerkonsole). Für echten Schutz wird eine serverseitige
     Authentifizierung (z. B. über die Verwaltungs-IT) benötigt. */
  const DEMO_ACCOUNTS = {
    archivar: { password: 'archiv2026', role: 'archivar', label: 'Archivar:in' },
    admin:    { password: 'admin2026',  role: 'admin',    label: 'Administrator:in' }
  };

  async function loadSession(){
    try{
      const res = await window.storage.get('session', false);
      if(res && res.value){
        const parsed = JSON.parse(res.value);
        if(parsed && DEMO_ACCOUNTS[parsed.username] ) session = parsed;
      }
    }catch(e){ session = null; }
    renderAuthArea();
  }
  async function saveSession(){
    try{ await window.storage.set('session', JSON.stringify(session), false); }catch(e){ /* nicht kritisch */ }
  }
  async function clearSession(){
    session = null;
    try{ await window.storage.delete('session', false); }catch(e){ /* Schlüssel evtl. nicht vorhanden */ }
    renderAuthArea();
  }
  function isStaff(){ return !!session && (session.role === 'archivar' || session.role === 'admin'); }
  function isAdmin(){ return !!session && session.role === 'admin'; }

  function renderAuthArea(){
    const el = document.getElementById('authArea');
    if(session){
      el.innerHTML = '<span class="auth-session">'
        + '<span class="role-badge '+session.role+'">'+escapeHTML(session.label)+'</span>'
        + '<button class="auth-logout-btn" id="logoutBtn">Abmelden</button>'
      + '</span>';
      document.getElementById('logoutBtn').addEventListener('click', async ()=>{
        await clearSession();
        location.hash = '#/';
      });
    } else {
      el.innerHTML = '<a class="auth-login-link" href="#/anmelden">Anmelden</a>';
    }
  }

  async function attemptLogin(username, password){
    const loginBanner = document.getElementById('loginBanner');
    loginBanner.className = 'banner';
    const cleanUsername = String(username).trim().toLowerCase();
    const cleanPassword = String(password).trim();
    const account = DEMO_ACCOUNTS[cleanUsername];
    if(!account || account.password !== cleanPassword){
      loginBanner.textContent = 'Benutzername oder Passwort ist falsch.';
      loginBanner.className = 'banner show error';
      return false;
    }
    session = { username: cleanUsername, role: account.role, label: account.label };
    await saveSession();
    renderAuthArea();
    document.getElementById('login-form').reset();
    location.hash = redirectAfterLogin && redirectAfterLogin !== '/anmelden' ? '#'+redirectAfterLogin : '#/registratur';
    return true;
  }

  document.getElementById('login-form').addEventListener('submit', async (e)=>{
    e.preventDefault();
    await attemptLogin(
      document.getElementById('login-username').value,
      document.getElementById('login-password').value
    );
  });

  document.querySelectorAll('[data-quicklogin]').forEach(btn=>{
    btn.addEventListener('click', async ()=>{
      const key = btn.dataset.quicklogin;
      const account = DEMO_ACCOUNTS[key];
      if(!account) return;
      btn.disabled = true;
      await attemptLogin(key, account.password);
      btn.disabled = false;
    });
  });

  /* ---------- MOBILE NAV ---------- */
  const navToggle = document.getElementById('navToggle');
  const mainNav = document.getElementById('mainNav');
  navToggle.addEventListener('click', ()=>{
    const open = mainNav.classList.toggle('mobile-open');
    navToggle.setAttribute('aria-expanded', open ? 'true':'false');
  });
  function closeMobileNav(){ mainNav.classList.remove('mobile-open'); navToggle.setAttribute('aria-expanded','false'); }

  /* ---------- HEADER SEARCH ---------- */
  const headerSearchForm = document.getElementById('headerSearchForm');
  const headerSearchInput = document.getElementById('headerSearchInput');
  headerSearchForm.addEventListener('click', ()=>{ headerSearchInput.focus(); });
  headerSearchForm.addEventListener('submit', (e)=>{
    e.preventDefault();
    const term = headerSearchInput.value.trim();
    const target = '#/archiv' + (term ? '?q='+encodeURIComponent(term) : '');
    if(location.hash === target){ navigate(); } else { location.hash = target; }
    headerSearchInput.blur();
  });

  /* ---------- HELPERS ---------- */
  function pad(n){ return String(n).padStart(2,'0'); }
  function toISODate(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }
  function formatDate(iso){ const [y,m,d] = iso.split('-'); return d+'.'+m+'.'+y; }
  function addYears(iso, years){
    const [y,m,d] = iso.split('-').map(Number);
    const dt = new Date(y, m-1, d);
    dt.setFullYear(dt.getFullYear()+years);
    return toISODate(dt);
  }
  function isUnlocked(releaseIso){ return new Date(releaseIso+'T00:00:00') <= new Date(); }
  function remaining(releaseIso){
    const target = new Date(releaseIso+'T00:00:00');
    const now = new Date();
    let years = target.getFullYear()-now.getFullYear();
    let months = target.getMonth()-now.getMonth();
    let days = target.getDate()-now.getDate();
    if(days<0){ months--; days += new Date(target.getFullYear(), target.getMonth(), 0).getDate(); }
    if(months<0){ years--; months += 12; }
    if(years<0) years=0; if(months<0) months=0; if(days<0) days=0;
    return {years, months, days};
  }
  function escapeHTML(s){
    return String(s).replace(/[&<>"']/g, c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
  }
  function permalinkFor(id){ return location.origin + location.pathname + '#/akte/' + encodeURIComponent(id); }
  function stampSVG(){
    return '<svg class="stamp-overlay" viewBox="0 0 200 200">'
      + '<circle cx="100" cy="100" r="88" fill="none" stroke="#8C2F2A" stroke-width="4" stroke-dasharray="2 6"/>'
      + '<circle cx="100" cy="100" r="74" fill="none" stroke="#8C2F2A" stroke-width="2.5"/>'
      + '<text x="100" y="94" text-anchor="middle" font-family="IBM Plex Mono, monospace" font-size="15" fill="#8C2F2A" letter-spacing="2" font-weight="600">GESPERRT</text>'
      + '<text x="100" y="118" text-anchor="middle" font-family="IBM Plex Mono, monospace" font-size="10.5" fill="#8C2F2A" letter-spacing="1">SPERRFRIST</text>'
      + '</svg>';
  }
  function linkIconSVG(){
    return '<svg viewBox="0 0 24 24" fill="none"><path d="M9 15l6-6M10 7l1.3-1.3a3.5 3.5 0 1 1 5 5L15 12M14 17l-1.3 1.3a3.5 3.5 0 1 1-5-5L9 12" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>';
  }
  function checkIconSVG(){
    return '<svg viewBox="0 0 24 24" fill="none"><path d="M5 13l4 4L19 7" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>';
  }
  function isModifiedClick(e){ return e.ctrlKey || e.metaKey || e.shiftKey || e.button===1; }

  async function copyPermalink(id, btnEl){
    const url = permalinkFor(id);
    try{
      await navigator.clipboard.writeText(url);
      if(btnEl){
        const original = btnEl.innerHTML;
        btnEl.innerHTML = btnEl.classList.contains('copy-btn') ? 'Kopiert ✓' : checkIconSVG();
        setTimeout(()=>{ btnEl.innerHTML = original; }, 1400);
      }
    }catch(e){
      window.prompt('Permalink kopieren (Strg/Cmd+C):', url);
    }
  }

  /* ---------- DATA LOADING ---------- */
  async function loadIndex(){
    try{
      const res = await window.storage.get('archiv-index', true);
      indexData = res && res.value ? JSON.parse(res.value) : [];
    }catch(e){
      indexData = [];
    }
    dataLoaded = true;
    renderStats();
  }

  function renderStats(){
    const total = indexData.length;
    const open = indexData.filter(e=>isUnlocked(e.releaseDate)).length;
    document.getElementById('stat-total').textContent = total;
    document.getElementById('stat-open').textContent = open;
    document.getElementById('stat-sealed').textContent = total-open;
  }

  function renderTeaser(){
    const list = document.getElementById('teaserList');
    const items = indexData.slice().sort((a,b)=>b.createdAt-a.createdAt).slice(0,5);
    if(items.length===0){
      list.innerHTML = '<div class="teaser-empty">Noch keine Bestände registriert. <a href="#/registratur" style="color:var(--brass);">Jetzt ersten Bestand einreichen →</a></div>';
      return;
    }
    list.innerHTML = items.map(e=>{
      const unlocked = isUnlocked(e.releaseDate);
      return '<a class="teaser-item open-entry" href="#/akte/'+encodeURIComponent(e.id)+'" data-id="'+e.id+'">'
        + '<span class="teaser-left"><span class="teaser-tag '+e.category+'">'+CATEGORY_LABEL[e.category]+'</span><span class="teaser-title">'+escapeHTML(e.title)+'</span></span>'
        + '<span class="teaser-meta">'+(unlocked ? '● öffentlich' : '● gesperrt bis '+formatDate(e.releaseDate))+'</span>'
      + '</a>';
    }).join('');
  }

  /* ---------- ARCHIV GRID ---------- */
  function syncChipsUI(){
    chips.querySelectorAll('.chip').forEach(c=>{
      c.setAttribute('aria-pressed', c.dataset.filter===activeFilter ? 'true':'false');
    });
  }

  function renderGrid(){
    if(!dataLoaded){ grid.innerHTML = '<div class="empty-state"><div class="spinner"></div></div>'; return; }
    let items = indexData.slice().sort((a,b)=> b.createdAt - a.createdAt);
    if(activeFilter !== 'all') items = items.filter(e=>e.category===activeFilter);
    const q = searchInput.value.trim().toLowerCase();
    if(q) items = items.filter(e => e.title.toLowerCase().includes(q) || e.aktenzeichen.toLowerCase().includes(q));

    if(items.length===0){
      grid.innerHTML = '<div class="empty-state"><h4>Keine Einträge gefunden</h4><p>Fügen Sie über die Registratur einen neuen Bestand hinzu, oder passen Sie die Filter an.</p></div>';
      return;
    }

    grid.innerHTML = items.map(e=>{
      const href = '#/akte/'+encodeURIComponent(e.id);
      const unlocked = isUnlocked(e.releaseDate);
      if(unlocked){
        return '<article class="card">'
          + '<button class="permalink-btn" data-copy="'+e.id+'" aria-label="Permalink kopieren" title="Permalink kopieren">'+linkIconSVG()+'</button>'
          + '<span class="tab '+e.category+'">'+CATEGORY_LABEL[e.category]+'</span>'
          + '<div class="card-body">'
            + '<span class="card-aktz">'+e.aktenzeichen+'</span>'
            + '<h3 class="card-title">'+escapeHTML(e.title)+'</h3>'
            + '<span class="card-meta">Dokumentdatum '+formatDate(e.recordDate)+' · frei seit '+formatDate(e.releaseDate)+'</span>'
          + '</div>'
          + '<div class="card-footer"><span class="status open">● öffentlich</span><a class="open-btn open-entry" href="'+href+'" data-id="'+e.id+'">Ansehen</a></div>'
        + '</article>';
      }
      const r = remaining(e.releaseDate);
      return '<article class="card sealed">'
        + stampSVG()
        + '<button class="permalink-btn" data-copy="'+e.id+'" aria-label="Permalink kopieren" title="Permalink kopieren">'+linkIconSVG()+'</button>'
        + '<span class="tab '+e.category+'">'+CATEGORY_LABEL[e.category]+'</span>'
        + '<div class="card-body">'
          + '<span class="card-aktz">'+e.aktenzeichen+'</span>'
          + '<h3 class="card-title">'+escapeHTML(e.title)+'</h3>'
          + '<span class="card-meta">Dokumentdatum '+formatDate(e.recordDate)+'</span>'
          + '<span class="card-desc-lock">Inhalt gesperrt · noch '+r.years+' J., '+r.months+' M.</span>'
        + '</div>'
        + '<div class="card-footer"><span class="status sealed">● gesperrt bis '+formatDate(e.releaseDate)+'</span><a class="open-btn open-entry" href="'+href+'" data-id="'+e.id+'">Details</a></div>'
      + '</article>';
    }).join('');
  }

  /* Event delegation: works across re-renders without rewiring */
  grid.addEventListener('click', (e)=>{
    const copyBtn = e.target.closest('[data-copy]');
    if(copyBtn){ e.preventDefault(); copyPermalink(copyBtn.dataset.copy, copyBtn); return; }
    const openLink = e.target.closest('.open-entry');
    if(openLink && !isModifiedClick(e)){ e.preventDefault(); lastFocusedEl = openLink; openPreviewModal(openLink.dataset.id); }
  });
  document.getElementById('teaserList').addEventListener('click', (e)=>{
    const openLink = e.target.closest('.open-entry');
    if(openLink && !isModifiedClick(e)){ e.preventDefault(); lastFocusedEl = openLink; openPreviewModal(openLink.dataset.id); }
  });

  chips.addEventListener('click', (e)=>{
    const btn = e.target.closest('.chip');
    if(!btn) return;
    activeFilter = btn.dataset.filter;
    syncChipsUI();
    renderGrid();
    syncArchivQuery();
  });
  searchInput.addEventListener('input', ()=>{ renderGrid(); syncArchivQuery(); });

  function syncArchivQuery(){
    const params = new URLSearchParams();
    if(activeFilter !== 'all') params.set('kategorie', activeFilter);
    if(searchInput.value.trim()) params.set('q', searchInput.value.trim());
    const qs = params.toString();
    const newHash = '#/archiv' + (qs ? '?'+qs : '');
    history.replaceState(null, '', newHash);
    headerSearchInput.value = searchInput.value;
  }

  /* ---------- SHARED ENTRY DATA + CONTENT ---------- */
  async function getEntryRenderData(id){
    const meta = indexData.find(e=>e.id===id);
    if(!meta) return null;
    const publiclyUnlocked = isUnlocked(meta.releaseDate);
    const staffOverride = !publiclyUnlocked && isStaff();
    if(!publiclyUnlocked && !staffOverride) return { meta, unlocked:false };
    try{
      const res = await window.storage.get('archiv:'+id, true);
      const full = JSON.parse(res.value);
      return { meta, unlocked:true, full, earlyAccess: staffOverride };
    }catch(e){
      return { meta, unlocked:true, error:true, earlyAccess: staffOverride };
    }
  }

  function contentBoxHTML(full){
    if(full.category==='pdf'){
      return full.fileData ? '<iframe src="'+full.fileData+'" title="PDF Vorschau"></iframe>' : '<p>Keine Datei hinterlegt.</p>';
    }
    if(full.category==='image'){
      return full.fileData ? '<img src="'+full.fileData+'" alt="'+escapeHTML(full.title)+'">' : '<p>Kein Bild hinterlegt.</p>';
    }
    if(full.category==='video'){
      if(full.videoUrl) return '<video controls src="'+full.videoUrl+'"></video>';
      if(full.fileData) return '<video controls src="'+full.fileData+'"></video>';
      return '<p>Kein Video hinterlegt.</p>';
    }
    if(full.category==='text'){
      return '<div class="text-content">'+escapeHTML(full.textContent||'')+'</div>';
    }
    return '';
  }

  function lockedNoteHTML(meta){
    const r = remaining(meta.releaseDate);
    return '<div class="locked-note"><svg viewBox="0 0 24 24" fill="none"><rect x="5" y="10" width="14" height="10" rx="1.5" stroke="currentColor" stroke-width="1.6"/><path d="M8 10V7a4 4 0 0 1 8 0v3" stroke="currentColor" stroke-width="1.6"/></svg>'
      + '<span>Diese Akte unterliegt der Sperrfrist und wird erst am '+formatDate(meta.releaseDate)+' automatisch öffentlich einsehbar (noch '+r.years+' Jahre, '+r.months+' Monate). Beschreibung und Inhalt sind bis dahin nicht zugänglich — Titel und Aktenzeichen sind bereits jetzt recherchierbar.</span></div>';
  }

  function earlyAccessBannerHTML(){
    return '<div class="early-access-banner"><svg viewBox="0 0 24 24" fill="none"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z" stroke="currentColor" stroke-width="1.6"/><circle cx="12" cy="12" r="3" stroke="currentColor" stroke-width="1.6"/></svg>'
      + '<span>Vorzeitiger Zugriff: Diese Akte ist öffentlich noch gesperrt. Sie sehen den Inhalt ausschließlich aufgrund Ihrer Anmeldung als Archivpersonal.</span></div>';
  }
  function deleteButtonHTML(id){
    return isAdmin() ? '<button class="danger-btn" id="deleteBtn-'+id+'" style="margin-left:auto;">Akte löschen</button>' : '';
  }
  function wireDeleteButton(id, afterDelete){
    const btn = document.getElementById('deleteBtn-'+id);
    if(!btn) return;
    btn.addEventListener('click', async ()=>{
      const ok = window.confirm('Diese Akte unwiderruflich aus dem Archiv löschen? Dies kann nicht rückgängig gemacht werden.');
      if(!ok) return;
      btn.disabled = true; btn.textContent = 'Wird gelöscht…';
      try{
        await window.storage.delete('archiv:'+id, true);
        indexData = indexData.filter(e=>e.id!==id);
        await window.storage.set('archiv-index', JSON.stringify(indexData), true);
        renderStats();
        afterDelete();
      }catch(e){
        btn.disabled = false; btn.textContent = 'Akte löschen';
        window.alert('Löschen fehlgeschlagen. Bitte erneut versuchen.');
      }
    });
  }

  /* ---------- FULL PERMALINK PAGE ---------- */
  async function renderAktePage(id){
    const content = document.getElementById('akteContent');
    const crumbLabel = document.getElementById('crumbLabel');
    content.innerHTML = '<div class="detail-card" style="text-align:center;"><div class="spinner"></div></div>';

    const data = await getEntryRenderData(id);
    if(!data){ showRoute('notfound'); document.title = 'Akte nicht gefunden · ' + BASE_TITLE; return; }
    const { meta, unlocked, full, error, earlyAccess } = data;

    crumbLabel.textContent = meta.aktenzeichen;
    document.title = meta.title + ' (' + meta.aktenzeichen + ') · ' + BASE_TITLE;

    const successHTML = (justCreatedId === id) ? '<div class="success-banner">'+escapeHTML(justCreatedMsg)+'</div>' : '';
    if(justCreatedId === id){ justCreatedId = null; justCreatedMsg=''; }

    if(!unlocked){
      content.innerHTML = successHTML + '<div class="detail-card">'
        + '<span class="tab static '+meta.category+'">'+CATEGORY_LABEL[meta.category]+'</span>'
        + '<div class="card-aktz">'+meta.aktenzeichen+'</div>'
        + '<h1 class="det-title">'+escapeHTML(meta.title)+'</h1>'
        + '<div class="entry-meta-row"><span>Dokumentdatum: '+formatDate(meta.recordDate)+'</span><span>Öffentlich ab: '+formatDate(meta.releaseDate)+'</span></div>'
        + lockedNoteHTML(meta)
        + '<div class="detail-actions"><a class="btn btn-ghost" href="#/archiv">← Zurück zum Archiv</a>'+deleteButtonHTML(id)+'</div>'
        + '<div class="permalink-field"><input type="text" readonly value="'+permalinkFor(id)+'"><button class="copy-btn" id="pageCopyBtn">Permalink kopieren</button></div>'
        + '</div>';
      document.getElementById('pageCopyBtn').addEventListener('click', (e)=>copyPermalink(id, e.currentTarget));
      wireDeleteButton(id, ()=>{ location.hash = '#/archiv'; });
      return;
    }
    if(error){ content.innerHTML = '<div class="detail-card"><p>Der Inhalt konnte nicht geladen werden. Bitte Seite neu laden.</p></div>'; return; }

    content.innerHTML = successHTML + '<div class="detail-card">'
      + (earlyAccess ? earlyAccessBannerHTML() : '')
      + '<span class="tab static '+full.category+'">'+CATEGORY_LABEL[full.category]+'</span>'
      + '<div class="card-aktz">'+full.aktenzeichen+'</div>'
      + '<h1 class="det-title">'+escapeHTML(full.title)+'</h1>'
      + '<div class="entry-meta-row"><span>'+(earlyAccess ? '● gesperrt für Öffentlichkeit' : '● öffentlich')+'</span><span>Dokumentdatum: '+formatDate(full.recordDate)+'</span><span>Öffentlich '+(earlyAccess ? 'ab' : 'seit')+': '+formatDate(full.releaseDate)+'</span>'+(full.eingereichtVon && isStaff() ? '<span>Eingereicht von: '+escapeHTML(full.eingereichtVon)+'</span>' : '')+'</div>'
      + (full.description ? '<p class="entry-desc">'+escapeHTML(full.description)+'</p>' : '')
      + '<div class="content-box">'+contentBoxHTML(full)+'</div>'
      + '<div class="detail-actions"><a class="btn btn-ghost" href="#/archiv">← Zurück zum Archiv</a>'+deleteButtonHTML(id)+'</div>'
      + '<div class="permalink-field"><input type="text" readonly value="'+permalinkFor(id)+'"><button class="copy-btn" id="pageCopyBtn">Permalink kopieren</button></div>'
      + '</div>';
    document.getElementById('pageCopyBtn').addEventListener('click', (e)=>copyPermalink(id, e.currentTarget));
    wireDeleteButton(id, ()=>{ location.hash = '#/archiv'; });
  }

  /* ---------- QUICK-PREVIEW MODAL ---------- */
  const modalBackdrop = document.getElementById('modalBackdrop');
  const modalBody = document.getElementById('modalBody');
  const modalCloseBtn = document.getElementById('modalClose');

  async function openPreviewModal(id){
    modalBackdrop.classList.add('show');
    document.body.classList.add('modal-open');
    document.addEventListener('keydown', onModalKeydown);
    modalBody.innerHTML = '<div style="padding:40px 0; text-align:center;"><div class="spinner"></div></div>';
    modalCloseBtn.focus();

    const data = await getEntryRenderData(id);
    if(!data){
      modalBody.innerHTML = '<h3 id="modalTitleHeading">Nicht gefunden</h3><p style="color:var(--ink-soft); font-size:14.5px;">Diese Akte existiert nicht (mehr) im Verzeichnis.</p>';
      return;
    }
    const { meta, unlocked, full, error, earlyAccess } = data;
    const permalink = '#/akte/'+encodeURIComponent(id);

    if(!unlocked){
      modalBody.innerHTML = ''
        + '<div class="modal-eyebrow">Schnellvorschau</div>'
        + '<span class="tab static '+meta.category+'">'+CATEGORY_LABEL[meta.category]+'</span>'
        + '<div class="card-aktz">'+meta.aktenzeichen+'</div>'
        + '<h3 id="modalTitleHeading">'+escapeHTML(meta.title)+'</h3>'
        + '<div class="entry-meta-row"><span>Dokumentdatum: '+formatDate(meta.recordDate)+'</span><span>Öffentlich ab: '+formatDate(meta.releaseDate)+'</span></div>'
        + lockedNoteHTML(meta)
        + '<div class="modal-footer">'
          + '<button class="copy-btn" id="modalCopyBtn">Permalink kopieren</button>'
          + '<a class="btn btn-primary" href="'+permalink+'">Vollständige Seite öffnen →</a>'
        + '</div>';
    } else if(error){
      modalBody.innerHTML = '<h3 id="modalTitleHeading">'+escapeHTML(meta.title)+'</h3><p style="color:var(--ink-soft); font-size:14.5px;">Der Inhalt konnte nicht geladen werden.</p>';
    } else {
      modalBody.innerHTML = ''
        + '<div class="modal-eyebrow">Schnellvorschau</div>'
        + (earlyAccess ? earlyAccessBannerHTML() : '')
        + '<span class="tab static '+full.category+'">'+CATEGORY_LABEL[full.category]+'</span>'
        + '<div class="card-aktz">'+full.aktenzeichen+'</div>'
        + '<h3 id="modalTitleHeading">'+escapeHTML(full.title)+'</h3>'
        + '<div class="entry-meta-row"><span>'+(earlyAccess ? '● gesperrt für Öffentlichkeit' : '● öffentlich')+'</span><span>Dokumentdatum: '+formatDate(full.recordDate)+'</span></div>'
        + (full.description ? '<p class="entry-desc">'+escapeHTML(full.description)+'</p>' : '')
        + '<div class="content-box">'+contentBoxHTML(full)+'</div>'
        + '<div class="modal-footer">'
          + '<button class="copy-btn" id="modalCopyBtn">Permalink kopieren</button>'
          + '<a class="btn btn-primary" href="'+permalink+'">Vollständige Seite öffnen →</a>'
        + '</div>';
    }
    const copyBtn = document.getElementById('modalCopyBtn');
    if(copyBtn) copyBtn.addEventListener('click', ()=>copyPermalink(id, copyBtn));
  }

  function closeModal(){
    modalBackdrop.classList.remove('show');
    document.body.classList.remove('modal-open');
    modalBody.innerHTML = '';
    document.removeEventListener('keydown', onModalKeydown);
    if(lastFocusedEl && document.contains(lastFocusedEl)) lastFocusedEl.focus();
  }
  function onModalKeydown(e){ if(e.key === 'Escape') closeModal(); }
  modalCloseBtn.addEventListener('click', closeModal);
  modalBackdrop.addEventListener('click', (e)=>{ if(e.target===modalBackdrop) closeModal(); });

  /* ---------- ROUTER ---------- */
  function showRoute(name){
    document.querySelectorAll('.page').forEach(p=>p.hidden = (p.dataset.page !== name));
  }
  function updateActiveNav(path){
    const navTarget = path.startsWith('/akte') ? '/archiv' : path;
    document.querySelectorAll('nav.main a').forEach(a=>{
      a.classList.toggle('active', a.dataset.route === navTarget);
    });
  }
  function parseHash(){
    const raw = location.hash.slice(1) || '/';
    const [pathPart, queryPart] = raw.split('?');
    const path = pathPart.replace(/\/+$/,'') || '/';
    return { path, query: new URLSearchParams(queryPart||'') };
  }

  function navigate(){
    closeModal();
    const { path, query } = parseHash();
    window.scrollTo(0,0);
    closeMobileNav();
    updateActiveNav(path);

    if(path === '/'){ showRoute('home'); document.title = BASE_TITLE; renderTeaser(); return; }
    if(path === '/archiv'){
      showRoute('archiv'); document.title = 'Archiv durchsuchen · ' + BASE_TITLE;
      activeFilter = query.get('kategorie') || 'all';
      searchInput.value = query.get('q') || '';
      headerSearchInput.value = query.get('q') || '';
      syncChipsUI(); renderGrid(); return;
    }
    if(path.startsWith('/akte/')){
      const id = decodeURIComponent(path.slice('/akte/'.length));
      showRoute('akte'); renderAktePage(id); return;
    }
    if(path === '/registratur'){
      showRoute('registratur'); document.title = 'Registratur · ' + BASE_TITLE;
      const locked = document.getElementById('registratur-locked');
      const unlocked = document.getElementById('registratur-unlocked');
      if(isStaff()){
        locked.style.display = 'none';
        unlocked.style.display = 'block';
        const label = document.getElementById('registraturAngemeldetAls');
        if(label) label.textContent = session.label;
      } else {
        locked.style.display = 'block';
        unlocked.style.display = 'none';
        redirectAfterLogin = '/registratur';
      }
      return;
    }
    if(path === '/anmelden'){
      showRoute('anmelden'); document.title = 'Anmeldung · ' + BASE_TITLE;
      if(isStaff()){ location.hash = '#/registratur'; }
      return;
    }
    if(path === '/ueber-uns'){ showRoute('ueber'); document.title = 'Über uns · ' + BASE_TITLE; return; }
    if(path === '/impressum'){ showRoute('impressum'); document.title = 'Impressum · ' + BASE_TITLE; return; }
    showRoute('notfound'); document.title = 'Seite nicht gefunden · ' + BASE_TITLE;
  }
  window.addEventListener('hashchange', navigate);

  /* ---------- REGISTRATUR FORM ---------- */
  const categorySelect = document.getElementById('input-category');
  const dateInput = document.getElementById('input-date');
  const releasePreview = document.getElementById('releasePreview');
  const fieldFile = document.getElementById('field-file');
  const fieldFileLabel = document.getElementById('field-file-label');
  const inputFile = document.getElementById('input-file');
  const fieldVideoSource = document.getElementById('field-video-source');
  const fieldVideoFile = document.getElementById('field-video-file');
  const fieldVideoUrl = document.getElementById('field-video-url');
  const fieldText = document.getElementById('field-text');
  const banner = document.getElementById('formBanner');

  function updateReleasePreview(){
    if(!dateInput.value){ releasePreview.innerHTML = 'Sperrfrist wird berechnet, sobald ein Dokumentdatum gewählt wurde.'; return; }
    const release = addYears(dateInput.value, 50);
    const unlocked = isUnlocked(release);
    releasePreview.innerHTML = unlocked
      ? 'Sperrfrist: <strong style="color:var(--tab-image)">'+formatDate(release)+' (bereits abgelaufen — sofort öffentlich)</strong>'
      : 'Sperrfrist: <strong>'+formatDate(release)+'</strong> — bis dahin nur Titel und Aktenzeichen sichtbar';
  }
  dateInput.addEventListener('change', updateReleasePreview);
  dateInput.valueAsDate = new Date();
  updateReleasePreview();

  categorySelect.addEventListener('change', ()=>{
    const cat = categorySelect.value;
    fieldFile.classList.add('hidden');
    fieldVideoSource.classList.add('hidden');
    fieldVideoFile.classList.add('hidden');
    fieldVideoUrl.classList.add('hidden');
    fieldText.classList.add('hidden');

    if(cat==='pdf'){ fieldFile.classList.remove('hidden'); fieldFileLabel.textContent='PDF-Datei *'; inputFile.setAttribute('accept','.pdf,application/pdf'); }
    else if(cat==='image'){ fieldFile.classList.remove('hidden'); fieldFileLabel.textContent='Bilddatei *'; inputFile.setAttribute('accept','image/*'); }
    else if(cat==='video'){
      fieldVideoSource.classList.remove('hidden');
      const source = document.querySelector('input[name=videoSource]:checked').value;
      if(source==='file') fieldVideoFile.classList.remove('hidden'); else fieldVideoUrl.classList.remove('hidden');
    } else if(cat==='text'){ fieldText.classList.remove('hidden'); }
  });

  document.querySelectorAll('input[name=videoSource]').forEach(r=>{
    r.addEventListener('change', ()=>{
      if(r.value==='file' && r.checked){ fieldVideoFile.classList.remove('hidden'); fieldVideoUrl.classList.add('hidden'); }
      if(r.value==='url' && r.checked){ fieldVideoUrl.classList.remove('hidden'); fieldVideoFile.classList.add('hidden'); }
    });
  });

  function showBanner(msg, type){ banner.textContent = msg; banner.className = 'banner show '+type; }
  function hideBanner(){ banner.className = 'banner'; }

  function fileToDataURL(file){
    return new Promise((resolve,reject)=>{
      const reader = new FileReader();
      reader.onload = ()=>resolve(reader.result);
      reader.onerror = ()=>reject(new Error('Datei konnte nicht gelesen werden.'));
      reader.readAsDataURL(file);
    });
  }

  const MAX_BYTES = 3.5*1024*1024;

  document.getElementById('registratur-form').addEventListener('submit', async (e)=>{
    e.preventDefault();
    hideBanner();
    if(!isStaff()){ showBanner('Bitte melden Sie sich als Archivar oder Administrator an.', 'error'); return; }
    const submitBtn = document.getElementById('submitBtn');

    const title = document.getElementById('input-title').value.trim();
    const category = categorySelect.value;
    const description = document.getElementById('input-desc').value.trim();
    const recordDate = dateInput.value;

    if(!title || !category || !recordDate){
      showBanner('Bitte Titel, Kategorie und Dokumentdatum ausfüllen.', 'error'); return;
    }

    let fileData=null, fileName=null, mimeType=null, videoUrl=null, textContent=null;

    try{
      if(category==='pdf' || category==='image'){
        const file = inputFile.files[0];
        if(!file){ showBanner('Bitte eine Datei auswählen.', 'error'); return; }
        if(file.size > MAX_BYTES){ showBanner('Datei zu groß für diese Demo (max. ca. 3,5 MB). Bitte kleinere Datei wählen.', 'error'); return; }
        fileData = await fileToDataURL(file);
        fileName = file.name; mimeType = file.type;
      } else if(category==='video'){
        const source = document.querySelector('input[name=videoSource]:checked').value;
        if(source==='url'){
          videoUrl = document.getElementById('input-video-url').value.trim();
          if(!videoUrl){ showBanner('Bitte einen Video-Link angeben.', 'error'); return; }
        } else {
          const file = document.getElementById('input-video-file').files[0];
          if(!file){ showBanner('Bitte eine Videodatei auswählen oder auf externen Link wechseln.', 'error'); return; }
          if(file.size > MAX_BYTES){ showBanner('Videodatei zu groß für diese Demo. Bitte externen Link verwenden.', 'error'); return; }
          fileData = await fileToDataURL(file);
          fileName = file.name; mimeType = file.type;
        }
      } else if(category==='text'){
        textContent = document.getElementById('input-text').value.trim();
        if(!textContent){ showBanner('Bitte einen Textinhalt eingeben.', 'error'); return; }
      }
    }catch(err){
      showBanner('Datei konnte nicht verarbeitet werden. Bitte erneut versuchen.', 'error'); return;
    }

    submitBtn.disabled = true; submitBtn.textContent = 'Wird gespeichert…';

    const releaseDate = addYears(recordDate, 50);
    const id = 'e'+Date.now()+Math.random().toString(36).slice(2,7);
    const year = recordDate.slice(0,4);
    const aktenzeichen = 'GA-'+year+'-'+String(indexData.length+1).padStart(4,'0');
    const createdAt = Date.now();

    const fullEntry = { id, aktenzeichen, title, category, description, recordDate, releaseDate, createdAt, fileData, fileName, mimeType, videoUrl, textContent, eingereichtVon: session ? session.label : null };
    const indexEntry = { id, aktenzeichen, title, category, recordDate, releaseDate, createdAt };

    try{
      const setFull = await window.storage.set('archiv:'+id, JSON.stringify(fullEntry), true);
      if(!setFull) throw new Error('save failed');
      indexData.push(indexEntry);
      const setIndex = await window.storage.set('archiv-index', JSON.stringify(indexData), true);
      if(!setIndex) throw new Error('index save failed');

      justCreatedId = id;
      justCreatedMsg = 'In Registratur aufgenommen. Aktenzeichen: '+aktenzeichen+'. '+(isUnlocked(releaseDate) ? 'Der Bestand ist sofort öffentlich einsehbar.' : 'Sperrfrist bis '+formatDate(releaseDate)+'.');

      e.target.reset();
      dateInput.valueAsDate = new Date();
      updateReleasePreview();
      categorySelect.dispatchEvent(new Event('change'));
      renderStats();

      location.hash = '#/akte/'+encodeURIComponent(id);
    }catch(err){
      indexData.pop();
      showBanner('Speichern fehlgeschlagen. Bitte erneut versuchen.', 'error');
    }finally{
      submitBtn.disabled=false; submitBtn.textContent='In Registratur aufnehmen';
    }
  });

  /* ---------- INIT ---------- */
  (async function init(){
    await loadSession();
    await loadIndex();
    navigate();
  })();
})();
</script>

</body>
</html>