/* Keine externen Ressourcen (keine Google Fonts, kein CDN, kein Tracking): keine Datenübertragung an Dritte.
   Farbe: Dunkelgrün. Für Rot nur --accent/--accent-soft/--accent-fg tauschen (z. B. #8f1d2c / #f3dfe1 / #ffffff). */
:root{--bg:#e9e6d6;--fg:#15211a;--muted:#4f5e55;--line:#cfd3c2;--accent:#1f4d33;--accent-fg:#f4f2e8;--accent-soft:#dbe5d6;--card:#f7f5ecd9;--field:#fffdf6;--overlay:rgba(233,230,214,.35);--danger:#9b2c2c;--field-line:#858f83;--on-img:#222d27}
@media (prefers-color-scheme:dark){:root{--bg:#0f1712;--fg:#e7ece6;--muted:#9fb0a4;--line:#2b3a31;--accent:#86c79f;--accent-fg:#0f1712;--accent-soft:#1b3326;--card:#16211bd9;--field:#121c16;--overlay:rgba(12,19,15,.86);--danger:#f19a9a;--field-line:#5f7366;--on-img:#9fb0a4}}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.6 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;overflow-x:hidden;padding:0 max(20px,env(safe-area-inset-right)) 0 max(20px,env(safe-area-inset-left))}
.bg{position:fixed;inset:0;z-index:-2;background:url("hintergrund.jpg") center 70%/cover no-repeat}
.bg::after{content:"";position:absolute;inset:0;background:var(--overlay)}
.stripe{position:fixed;top:0;left:0;right:0;height:4px;background:repeating-linear-gradient(-45deg,var(--accent) 0 10px,transparent 10px 20px);background-size:28px 28px;opacity:.7;z-index:5}
.wrap{max-width:900px;margin:0 auto}
.hero{min-height:calc(100vh - 140px);display:grid;grid-template-columns:auto 1fr;gap:clamp(28px,5vw,56px);align-items:center;padding:72px 0 40px}
.photo{position:relative;width:clamp(150px,22vw,210px);aspect-ratio:1;max-width:100%}
.photo img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block;position:relative;box-shadow:0 18px 40px -18px rgba(21,33,26,.45);transition:transform .4s ease}
.photo:hover img{transform:scale(1.03)}
.ring{position:absolute;inset:-12px;border-radius:50%;border:2px dashed var(--accent);opacity:.65}
.badge{position:absolute;right:4px;bottom:10px;display:flex;align-items:center;gap:6px;background:var(--card);backdrop-filter:blur(6px);border:1px solid var(--line);border-radius:999px;padding:4px 10px 4px 8px;font-size:12px;font-weight:600;color:var(--accent)}
.dot{width:8px;height:8px;border-radius:50%;background:var(--accent)}
.text{display:flex;flex-direction:column;gap:18px;min-width:0}
.mark{color:var(--fg);font-family:ui-monospace,"Cascadia Code","SF Mono",Menlo,Consolas,monospace;font-weight:700;font-size:clamp(56px,10.5vw,108px);letter-spacing:-.06em;line-height:.9;margin:0;display:flex;align-items:center}
.mark span{display:inline-block}
.mark .pr{color:var(--accent);margin-right:.18em;font-weight:600}
.mark .cur{width:.5em;height:.78em;background:var(--accent);margin-left:.1em;border-radius:3px}
.name{margin:0;font-size:15px;font-weight:600;letter-spacing:.04em;color:var(--on-img)}
/* Text direkt auf dem Hintergrundbild: dunkler als --muted, damit der Kontrast auch über den Schattenstellen des Bildes reicht (WCAG AA) */
.hero .text>p:not(.mark){color:var(--on-img)}
h1{font-size:clamp(22px,3.6vw,32px);font-weight:650;margin:0;line-height:1.3;text-wrap:balance}
.rot{display:inline-grid;vertical-align:bottom;color:var(--accent)}
.rot span{grid-area:1/1;white-space:nowrap}
.rot span[aria-hidden="true"]{opacity:0;transform:translateY(.4em)}
p{margin:0;color:var(--muted);max-width:50ch}
.actions{display:flex;gap:10px;flex-wrap:wrap;padding-top:4px}
.btn{display:inline-flex;align-items:center;gap:8px;padding:10px 18px;border-radius:999px;font:inherit;font-weight:600;font-size:15px;text-decoration:none;border:1.5px solid var(--accent);cursor:pointer;transition:transform .2s ease,background .2s ease,color .2s ease}
.btn.primary{background:var(--accent);color:var(--accent-fg)}
.btn.ghost{color:var(--fg);background:var(--card)}
.btn:hover,.btn:focus-visible{transform:translateY(-2px)}
.btn.ghost:hover,.btn.ghost:focus-visible{background:var(--accent-soft)}
.btn:focus-visible,input:focus-visible,textarea:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.btn svg{width:16px;height:16px;flex:none}
.btn[disabled]{opacity:.6;cursor:wait;transform:none}
.kontakt{background:var(--card);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:18px;padding:clamp(20px,4vw,36px);margin:0 0 56px;display:grid;grid-template-columns:1fr 1.4fr;gap:clamp(20px,4vw,40px);scroll-margin-top:24px}
.kontakt h2{margin:0 0 8px;font-size:clamp(22px,3vw,28px);letter-spacing:-.01em}
.kontakt .intro{display:flex;flex-direction:column;gap:10px}
.kontakt .mail{font-size:15px;color:var(--muted)}
.kontakt .mail a{color:var(--fg);font-weight:600}
form{display:flex;flex-direction:column;gap:14px;min-width:0}
.row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
label{display:flex;flex-direction:column;gap:6px;font-size:14px;font-weight:600;min-width:0}
input,textarea{font:inherit;font-weight:400;color:var(--fg);background:var(--field);border:1.5px solid var(--field-line);border-radius:10px;padding:10px 12px;width:100%;transition:border-color .2s ease}
input:hover,textarea:hover{border-color:var(--fg)}
textarea{min-height:140px;resize:vertical}
.hp{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
.hint{font-size:13px;color:var(--muted);max-width:none}
.hint a{color:var(--muted)}
.status{font-size:14px;font-weight:600;min-height:1.4em;max-width:none}
.status.ok{color:var(--accent)} .status.err{color:var(--danger)}
footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;font-size:13px;color:var(--on-img);border-top:1px solid var(--line);padding:18px 0 max(22px,env(safe-area-inset-bottom))}
footer nav{display:flex;gap:16px}
footer a{color:var(--on-img)}
footer a:hover,footer a:focus-visible{color:var(--fg)}
@media (max-width:720px){.kontakt{grid-template-columns:1fr}}
@media (max-width:640px){.hero{grid-template-columns:1fr;justify-items:start;gap:28px;padding-top:48px;min-height:0}.row{grid-template-columns:1fr}}
@media (prefers-reduced-motion:no-preference){
  .bg{animation:breathe 30s ease-in-out infinite alternate}
  @keyframes breathe{from{transform:scale(1)}to{transform:scale(1.08) translateY(-1.5%)}}
  .stripe{animation:move 1.2s linear infinite}
  @keyframes move{to{background-position:28px 0}}
  .ring{animation:spin 24s linear infinite}
  @keyframes spin{to{transform:rotate(360deg)}}
  .dot{animation:pulse 2s ease-in-out infinite}
  @keyframes pulse{50%{opacity:.3}}
  /* Schriftzug wird wie im Terminal getippt, danach blinkt der Cursor */
  .mark span:not(.cur){animation:type .01s steps(1) both}
  .mark span:nth-child(2){animation-delay:.25s}.mark span:nth-child(3){animation-delay:.4s}.mark span:nth-child(4){animation-delay:.55s}.mark span:nth-child(5){animation-delay:.7s}
  @keyframes type{from{opacity:0}}
  .cur{animation:blink 1.6s steps(1) 1s 3}   /* blinkt dreimal langsam, dann bleibt der Cursor stehen */
  @keyframes blink{50%{opacity:0}}
  .fade{animation:fade .8s ease both}
  .d1{animation-delay:.3s}.d2{animation-delay:.45s}.d3{animation-delay:.6s}.d4{animation-delay:.75s}
  @keyframes fade{from{opacity:0;transform:translateY(10px)}}
  .rot span{transition:opacity .5s ease,transform .5s ease}
}
.top{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;padding:22px 0 0;position:relative;z-index:4}
.logo{display:inline-flex;align-items:center;font-family:ui-monospace,"Cascadia Code","SF Mono",Menlo,Consolas,monospace;font-weight:700;font-size:21px;letter-spacing:-.05em;color:var(--fg);text-decoration:none}
.logo .pr{color:var(--accent);margin-right:.3em}
.logo .cur{display:inline-block;width:.5em;height:.85em;background:var(--accent);margin-left:.12em;border-radius:2px}
.btn.small{padding:7px 14px;font-size:14px}
.page{padding:40px 0 56px;display:flex;flex-direction:column;gap:24px}
.page .kontakt{margin:0}
.about{display:flex;flex-direction:column;gap:20px}
.about .intro-card{display:grid;grid-template-columns:auto 1fr;gap:24px;align-items:center}
.about .intro-card img{width:120px;height:120px;border-radius:50%;object-fit:cover}
.about h1{margin:0;font-size:clamp(28px,4.4vw,40px);letter-spacing:-.02em}
.about .role{margin:4px 0 0;color:var(--accent);font-weight:650}
.panel{background:var(--card);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:18px;padding:clamp(20px,4vw,32px)}
.panel h2{margin:0 0 18px;font-size:20px;letter-spacing:-.01em}
.tl{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.tl li{display:grid;grid-template-columns:150px 1fr;gap:16px;padding:14px 0;border-top:1px solid var(--line)}
.tl li:first-child{border-top:0;padding-top:0}
.tl time{font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums;padding-top:2px}
.tl h3{margin:0;font-size:16px}
.tl .org{margin:2px 0 0;color:var(--muted);font-size:15px;max-width:none}
.tl li.now h3::after{content:"aktuell";margin-left:10px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-fg);background:var(--accent);padding:2px 8px;border-radius:999px;vertical-align:2px}
.cols{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.chips{display:flex;flex-wrap:wrap;gap:8px;list-style:none;margin:0;padding:0}
.chips li{background:var(--accent-soft);color:var(--fg);border-radius:999px;padding:5px 12px;font-size:14px;font-weight:550}
@media (max-width:720px){.cols{grid-template-columns:1fr}}
@media (max-width:640px){.tl li{grid-template-columns:1fr;gap:2px}.about .intro-card{grid-template-columns:1fr}}
.seg{display:inline-flex;gap:2px;padding:4px;background:var(--card);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:999px;box-shadow:0 10px 30px -20px rgba(21,33,26,.55)}
.seg a{padding:7px 16px;border-radius:999px;font-size:14px;font-weight:600;color:var(--fg);text-decoration:none;transition:background .2s ease,color .2s ease}
.seg a:hover,.seg a:focus-visible{background:var(--accent-soft)}
.seg a:focus-visible{outline:3px solid var(--accent);outline-offset:1px}
.seg a[aria-current="page"]{background:var(--accent);color:var(--accent-fg)}
@media (max-width:420px){.seg a{padding:7px 11px;font-size:13px}}
footer a[aria-current="page"]{color:var(--fg)}
.row.captcha{grid-template-columns:1fr auto;align-items:end}
.row.captcha .neu{height:44px}
#f-frage{color:var(--accent)}
@media (max-width:640px){.row.captcha{grid-template-columns:1fr}}
.certs{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}
.certs li{display:grid;grid-template-columns:28px 1fr;gap:10px;align-items:start;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--field)}
.certs h3{margin:0;font-size:15px;line-height:1.35}
.certs .org{margin:4px 0 0;font-size:13px;color:var(--muted)}
.cert-icon{width:28px;height:28px;border-radius:50%;background:var(--accent);color:var(--accent-fg);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700}
.cert-link{margin:14px 0 0;font-size:14px}
.cert-link a{color:var(--accent);font-weight:600}
.certs li.top{border-color:var(--accent);background:var(--accent-soft)}
.certs li{padding:0}
.cert-open{display:grid;grid-template-columns:28px 1fr;gap:10px;align-items:start;padding:14px;color:inherit;text-decoration:none;border-radius:12px;height:100%;transition:transform .2s ease}
.cert-open:hover,.cert-open:focus-visible{transform:translateY(-2px)}
.cert-open:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.cert-show{display:inline-block;margin-top:8px;font-size:13px;font-weight:600;color:var(--accent)}
.cert-dialog{border:0;border-radius:16px;padding:12px;max-width:min(960px,94vw);background:var(--field);box-shadow:0 30px 60px -20px rgba(0,0,0,.6)}
.cert-dialog::backdrop{background:rgba(15,23,18,.6);backdrop-filter:blur(3px)}
.cert-dialog form{display:flex;flex-direction:row;justify-content:flex-end;margin-bottom:8px}
.cert-dialog img{display:block;max-width:100%;max-height:78vh;height:auto;border-radius:8px;margin:0 auto}
/* Zertifikate: Odoo groß über die volle Breite, LinkedIn-Kurse kompakt in drei Spalten */
.certs{grid-template-columns:repeat(3,minmax(0,1fr))}
.certs li{display:block}
.certs li.top{grid-column:1/-1}
.certs li.top .cert-open{grid-template-columns:96px 1fr;align-items:center;gap:16px}
.certs li.top .cert-thumb{width:96px;aspect-ratio:1286/909;object-fit:cover;border-radius:6px;box-shadow:0 4px 12px -6px rgba(0,0,0,.4)}
.certs li.top h3{font-size:17px}
.certs li:not(.top) .cert-open{grid-template-columns:24px 1fr;gap:10px}
.certs li:not(.top) .cert-icon{width:24px;height:24px;font-size:12px}
@media (max-width:760px){.certs{grid-template-columns:1fr}}
.nav-r{display:flex;align-items:center;gap:8px}
.lang{position:relative}
.lang summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:6px;padding:9px 14px;border-radius:999px;background:var(--card);backdrop-filter:blur(10px);border:1px solid var(--line);font-size:14px;font-weight:600;box-shadow:0 10px 30px -20px rgba(21,33,26,.55)}
.lang summary::-webkit-details-marker{display:none}
.lang summary::after{content:"";width:7px;height:7px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg) translateY(-2px);transition:transform .2s ease}
.lang[open] summary::after{transform:rotate(-135deg) translateY(-1px)}
.lang summary:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.lang ul{position:absolute;right:0;top:calc(100% + 6px);z-index:20;margin:0;padding:6px;list-style:none;min-width:150px;background:var(--field);border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 40px -20px rgba(21,33,26,.6)}
.lang a{display:block;padding:8px 12px;border-radius:8px;color:var(--fg);text-decoration:none;font-size:14px;font-weight:550}
.lang a:hover,.lang a:focus-visible{background:var(--accent-soft)}
.lang a[aria-current]{color:var(--accent);font-weight:700}
:lang(en) .tl li.now h3::after{content:"current"}
.skip{position:absolute;left:12px;top:-60px;z-index:100;padding:10px 16px;border-radius:999px;background:var(--accent);color:var(--accent-fg,#fff);font-weight:600;text-decoration:none;transition:top .15s ease}
.skip:focus{top:12px;outline:3px solid var(--accent);outline-offset:2px}
main:focus{outline:none}
/* Blog (Seiten erzeugt von blog/bauen.py). Navigation mit vier Punkten passt auch bei 360 px */
.nav-r{flex-wrap:wrap}
@media (max-width:420px){.seg a{padding:7px 9px}.lang summary{padding:9px 11px}}
.blog-kopf h1{margin:0;font-size:clamp(28px,4.4vw,40px);letter-spacing:-.02em}
.blog-kopf .lead{margin-top:8px}
.blog-leer{display:flex;flex-direction:column;gap:12px}
.blog-leer h2{margin:0}
.post-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:16px}
.post-card{background:var(--card);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:18px;padding:clamp(16px,3vw,24px);display:grid;grid-template-columns:200px 1fr;gap:20px;align-items:start}
.post-card:not(:has(img)){grid-template-columns:1fr}
.post-card img{width:100%;height:auto;aspect-ratio:16/10;object-fit:cover;border-radius:12px;display:block}
.post-card h2{margin:4px 0 6px;font-size:20px;letter-spacing:-.01em}
.post-card h2 a{color:var(--fg);text-decoration:none}
.post-card h2 a:hover,.post-card h2 a:focus-visible{color:var(--accent);text-decoration:underline}
.post-card .chips{margin-top:10px}
.post-meta{font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums;max-width:none}
.post{display:flex;flex-direction:column;gap:14px}
.post h1{margin:0;font-size:clamp(28px,4.4vw,40px);letter-spacing:-.02em}
.post-back{margin:0;font-size:14px}
.post-back a,.post-nav a{color:var(--accent);font-weight:600;text-decoration:none}
.post-back a:hover,.post-nav a:hover{text-decoration:underline}
.post figure{margin:6px 0}
.post figure img,.post video{width:100%;height:auto;border-radius:12px;display:block;background:var(--field)}
.post figcaption{font-size:14px;color:var(--muted);margin-top:6px}
.prose{display:flex;flex-direction:column;gap:14px;font-size:17px;line-height:1.7}
.prose p,.prose li{color:var(--fg);max-width:68ch}
.prose h2{margin:18px 0 0;font-size:24px;letter-spacing:-.01em}
.prose h3{margin:10px 0 0;font-size:19px}
.prose ul,.prose ol{margin:0;padding-left:24px;display:flex;flex-direction:column;gap:6px}
.prose ol li::marker{color:var(--accent);font-weight:700}
.prose a{color:var(--accent)}
.prose code{font-family:ui-monospace,"Cascadia Code","SF Mono",Menlo,Consolas,monospace;font-size:.9em;background:var(--accent-soft);padding:1px 6px;border-radius:6px}
.prose pre{margin:0;padding:14px 16px;background:var(--field);border:1px solid var(--line);border-radius:12px;overflow-x:auto}
.prose pre code{background:none;padding:0;font-size:14px;line-height:1.6}
.hinweis{border-left:4px solid var(--accent);background:var(--accent-soft);padding:12px 16px;border-radius:0 12px 12px 0;color:var(--fg)}
.yt a{position:relative;display:block;color:var(--fg);text-decoration:none}
.yt .play{position:absolute;left:14px;bottom:14px;background:var(--accent);color:var(--accent-fg);font-weight:600;font-size:15px;padding:8px 14px;border-radius:999px}
.yt a:hover .play,.yt a:focus-visible .play{transform:translateY(-2px)}
.post-nav{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.post-nav a{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px;display:flex;flex-direction:column;gap:2px}
.post-nav a.neu{text-align:right;grid-column:2}
.post-nav small{color:var(--muted);font-weight:500}
.post-cta{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.post-cta p{flex:1 1 260px;color:var(--fg)}
.entwurf{margin:0;max-width:none;align-self:flex-start;background:var(--danger);color:var(--accent-fg);font-weight:700;font-size:13px;letter-spacing:.06em;text-transform:uppercase;padding:6px 12px;border-radius:999px}
@media (max-width:640px){.post-card{grid-template-columns:1fr}.post-nav{grid-template-columns:1fr}.post-nav a.neu{grid-column:1;text-align:left}}
/* Schmale Handys: wechselnde Überschrift darf umbrechen, sonst wird die Startseite rechts abgeschnitten */
@media (max-width:640px){.hero{grid-template-columns:minmax(0,1fr)}.rot span{white-space:normal}}
