/* ---------- Kundenakten ---------- */
.search-wrap{position:relative;margin-bottom:14px;}
.search-wrap input{width:100%;padding-left:42px;padding-right:42px;}
.search-wrap .sw-icon{
  position:absolute;left:14px;top:50%;transform:translateY(-50%);
  display:flex;color:var(--ink-soft);pointer-events:none;
}
.search-wrap .sw-icon svg{width:17px;height:17px;}
.search-wrap .sw-clear{
  position:absolute;right:9px;top:50%;transform:translateY(-50%);
  background:none;border:none;color:var(--ink-soft);cursor:pointer;
  padding:7px;border-radius:9px;display:flex;
}
.search-wrap .sw-clear svg{width:14px;height:14px;}
/* Eine Leiste aus Filter-Knoepfen - ueberall dieselbe. */
.cust-filter,.filter-leiste{
  display:flex;gap:5px;overflow-x:auto;padding:1px 2px 3px;margin-bottom:12px;
  scrollbar-width:none;-webkit-overflow-scrolling:touch;
}
.cust-filter::-webkit-scrollbar,.filter-leiste::-webkit-scrollbar{display:none;}
.cf-chip{
  flex:none;display:inline-flex;align-items:center;gap:5px;
  background:var(--surface);border:1px solid var(--line);
  border-radius:999px;padding:7px 9px;cursor:pointer;
  font-family:var(--font-body);font-size:11px;font-weight:600;color:var(--ink-soft);
  box-shadow:var(--shadow);transition:background .15s,color .15s,border-color .15s;
}
.cf-chip .cnt{
  font-size:10.5px;font-weight:700;color:var(--ink-soft);
  background:var(--surface-2);border-radius:999px;padding:1px 6px;
}
.cf-chip.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-deep);}
.cf-chip.on .cnt{background:var(--surface);color:var(--accent-deep);}
.cf-chip.warn .cnt{background:var(--warn-soft);color:var(--danger);}

.cust-liste{display:flex;flex-direction:column;}
.cust-liste.mit-leiste,
.cust-filter.mit-leiste{padding-right:26px;}
.cust-gruppe{scroll-margin-top:12px;}
.cust-buchstabe{
  font-size:10px;font-weight:700;letter-spacing:.1em;color:var(--accent-deep);
  padding:5px 4px 3px;position:sticky;top:0;z-index:2;
  background:linear-gradient(to bottom, var(--ground) 68%, rgba(var(--ground-rgb),0));
}
/* Eine Zeile pro Kundin: Bild, Name, Kontakt - und rechts die eine Angabe,
   die zaehlt. Flach und durch feine Linien getrennt statt Karte an Karte. */
.ku-zeile{
  display:flex;align-items:center;gap:4px;min-width:0;
  border-bottom:1px solid var(--line);
}
.ku-zeile.warn{box-shadow:inset 3px 0 0 var(--danger);}
.ku-tipp{
  flex:1;min-width:0;display:flex;align-items:center;gap:11px;
  background:none;border:none;cursor:pointer;text-align:left;
  padding:10px 2px 10px 6px;font-family:var(--font-body);color:var(--ink);
}
.ku-zeile.warn .ku-tipp{padding-left:11px;}
.ku-tipp:active{opacity:.7;}
.ku-tipp .avatar{width:38px;height:38px;flex:none;}
.ku-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.ku-name{
  font-size:14.5px;font-weight:700;line-height:1.2;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.ku-sub{
  font-size:11.5px;line-height:1.2;color:var(--ink-soft);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.ku-wann{
  flex:0 1 auto;min-width:0;max-width:38%;
  font-size:11.5px;font-weight:600;color:var(--ink-soft);
  text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
/* Steht die Allergie-Pille daneben, gibt die rechte Angabe zuerst nach -
   ausser dem naechsten Termin, der bleibt ganz. */
.ku-zeile:has(.ku-mark.al) .ku-wann:not(.kommt){max-width:26%;}
/* Steht ein Termin an, traegt er den Akzent - das ist die Angabe, nach der
   man die Liste durchsieht. */
.ku-wann.kommt{
  /* Der naechste Termin wird nicht gekuerzt - er ist kurz und die Angabe,
     wegen der man die Liste durchsieht. Nachgeben soll der Name. */
  flex:none;
  color:var(--accent-deep);font-weight:700;
  background:var(--accent-soft);border-radius:999px;padding:3px 9px;
}
.ku-wann.leer{opacity:.75;}
.ku-mark{
  flex:none;display:flex;align-items:center;justify-content:center;
  width:26px;height:26px;border-radius:50%;
  font-family:var(--font-body);font-size:12px;font-weight:700;line-height:1;
}
/* Die Allergie traegt ihr Wort mit: ein Zeichen allein muss man sich erst
   merken. Darum ist sie keine Scheibe mehr, sondern eine schmale Pille. */
.ku-mark.al{
  width:auto;gap:4px;border-radius:999px;padding:0 9px 0 6px;
  background:var(--warn-soft);color:var(--warn);border:none;cursor:pointer;
}
.ku-mark.al svg{width:14px;height:14px;flex:none;}
.ku-mark.al span{font-size:10.5px;font-weight:700;letter-spacing:-.01em;}
.ku-mark.al:active{transform:scale(.95);}
@media (max-width:420px){
  /* Auf dem Handy zaehlt jeder Millimeter - die Pille rueckt enger zusammen,
     das Wort bleibt. */
  .ku-mark.al{padding:0 7px 0 5px;gap:3px;}
  .ku-mark.al span{font-size:10px;}
  .ku-mark.al svg{width:13px;height:13px;}
}
.ku-mark.warn{background:var(--danger);color:var(--on-danger, #FFF);}
.ku-neu{
  display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 14px 0 11px;
  border-radius:999px;cursor:pointer;
  background:var(--accent);border:1px solid var(--accent);color:var(--on-accent);
  font-family:var(--font-body);font-size:12.5px;font-weight:700;
}
.ku-neu svg{width:16px;height:16px;}
.ku-neu:active{transform:scale(.96);}

/* Die Buchstabenleiste am rechten Rand: ein Tipp springt zur Gruppe. */
.az-leiste{
  position:fixed;right:3px;top:50%;transform:translateY(-50%);
  z-index:35;display:flex;flex-direction:column;align-items:center;gap:1px;
  background:rgba(var(--ground-rgb),.82);border-radius:999px;padding:6px 3px;
  backdrop-filter:blur(3px);
}
.az-leiste button{
  background:none;border:none;cursor:pointer;color:var(--ink-soft);
  font-family:var(--font-body);font-size:9.5px;font-weight:700;
  line-height:1;padding:2px 4px;border-radius:6px;
}
.az-leiste button:active{background:var(--accent-soft);color:var(--accent-deep);}
@media (min-width:760px){
  .az-leiste{right:10px;}
  /* Auf dem Tablet ist Platz fuer zwei Spalten - die Gruppen bleiben dabei
     zusammen, es wird nur umbrochen. */
  .cust-liste{columns:2;column-gap:14px;}
  .cust-gruppe{break-inside:avoid;}
  .cust-buchstabe{position:static;background:none;}
}
.cust-count{font-size:12px;color:var(--ink-soft);margin:0 0 12px 2px;}

.avatar{
  width:46px;height:46px;border-radius:50%;overflow:hidden;
  background:linear-gradient(140deg,var(--rose-soft),var(--accent-soft));
  color:var(--accent-deep);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-display);font-weight:600;
  flex:none;font-size:17px;
}
.avatar svg{width:100%;height:100%;display:block;}
/* Gesicht und Hemd der gezeichneten Figur sind hell - im hellen Design im
   Kartenton, im dunklen in der Schriftfarbe. Sonst stuende dort ein
   schwarzes Gesicht. */
.avatar .fg-hell{fill:var(--surface);}
.avatar .fg-hell-s{stroke:var(--surface);}
:root[data-theme="zentivo"] .avatar .fg-hell, :root[data-theme="nacht"] .avatar .fg-hell,
:root[data-theme="anthrazit"] .avatar .fg-hell, :root[data-theme="terra"] .avatar .fg-hell,
:root[data-theme="glas"] .avatar .fg-hell{fill:var(--ink);}
:root[data-theme="zentivo"] .avatar .fg-hell-s, :root[data-theme="nacht"] .avatar .fg-hell-s,
:root[data-theme="anthrazit"] .avatar .fg-hell-s, :root[data-theme="terra"] .avatar .fg-hell-s,
:root[data-theme="glas"] .avatar .fg-hell-s{stroke:var(--ink);}
.avatar img{width:100%;height:100%;object-fit:cover;display:block;}
.ava-preview{display:flex;align-items:center;gap:13px;margin-bottom:18px;}
.ava-preview .avatar{width:64px;height:64px;}
.ava-preview .t{font-size:12.5px;color:var(--ink-soft);}




/* The picture in the file doubles as the way to change it. The badge hangs
   on this wrapper, not inside the circle, which clips whatever it holds. */
.avatar-set{
  position:relative;border:none;padding:0;background:none;
  cursor:pointer;flex:none;line-height:0;
}
.avatar-set .cam{
  position:absolute;right:-2px;bottom:-2px;
  width:23px;height:23px;border-radius:50%;
  background:var(--accent);color:var(--on-accent);
  border:2px solid var(--ground);
  display:flex;align-items:center;justify-content:center;
}
.avatar-set .cam svg{width:11px;height:11px;}


.section-label{
  font-size:11px;font-weight:700;letter-spacing:.12em;color:var(--ink-soft);
  margin:26px 0 11px;text-transform:uppercase;
}
/* Its own field, like the note card below it: on the dimmed ground a box in
   the second surface tone would sink into the page. */
.allergy-box{
  background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);
  border-radius:var(--radius-sm);padding:14px 16px;
  font-size:13.5px;line-height:1.55;color:var(--ink);
  display:flex;align-items:flex-start;gap:11px;
}
/* Ist eine Allergie hinterlegt, traegt das Feld ein Ausrufezeichen und einen
   roten Rand - man soll es sehen, bevor man zu feilen anfaengt. */
.allergy-box.alarm{
  background:var(--warn-soft);border-color:var(--warn);
  border-left:4px solid var(--warn);padding-left:13px;
}
.al-mark{
  flex:none;width:24px;height:24px;border-radius:50%;margin-top:1px;
  background:var(--danger);color:var(--on-danger, #FFF);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-body);font-size:15px;font-weight:700;line-height:1;
}
.al-text{flex:1;min-width:0;overflow-wrap:anywhere;}
.al-edit{
  flex:none;align-self:flex-start;display:inline-flex;align-items:center;gap:5px;
  background:var(--surface);border:1px solid var(--line);color:var(--accent-deep);
  border-radius:999px;padding:5px 11px;cursor:pointer;
  font-family:var(--font-body);font-size:11.5px;font-weight:600;
}
.allergy-box.alarm .al-edit{border-color:var(--warn);color:var(--warn);}
.al-edit svg{width:13px;height:13px;}
/* Ist nichts hinterlegt, bleibt daraus eine schmale Zeile - die Akte soll
   nicht mit einem leeren Kasten anfangen. */
.allergy-box.leer{
  align-items:center;padding:8px 10px 8px 14px;
  font-size:12.5px;color:var(--ink-soft);box-shadow:none;
}

/* In der Kundenakte liegen ihre Fotos und die zugeordneten Modellagen in
   einem Raster. Das Zeichen in der Ecke sagt, welche nur zu Gast sind. */
.photo-item .pi-mark{
  position:absolute;left:3px;bottom:3px;
  display:flex;align-items:center;justify-content:center;
  width:18px;height:18px;border-radius:50%;
  background:rgba(24,12,20,.5);color:#FFF;backdrop-filter:blur(4px);
}
.photo-item .pi-mark svg{width:11px;height:11px;}
.photo-item.ist-modellage{border-color:var(--accent);}
.bi-zaehler{
  font-family:var(--font-body);font-size:10.5px;font-weight:600;color:var(--ink-soft);
  white-space:nowrap;
}
@media (max-width:380px){ .bi-zaehler{display:none;} }
.al-schnell{display:flex;flex-wrap:wrap;gap:6px;margin:-4px 0 14px;}
.al-schnell .chip{font-size:11.5px;padding:6px 11px;}
.modal-sub{margin:-8px 0 14px;font-size:12.5px;color:var(--ink-soft);}
.section-label.warnung{
  display:flex;align-items:center;gap:6px;color:var(--warn);
}
.section-label.warnung svg{width:15px;height:15px;flex:none;}



/* ---------- Picking a customer by typing instead of scrolling ---------- */
.cpick{position:relative;}
/* "Kontakt suchen oder anlegen" soll ganz dastehen. Im engsten Fall (320 px,
   grosse Schrift - dort ist ohnehin alles vergroessert) wird die Schrift im
   Feld eine Spur kleiner statt den Satz zu kuerzen. */
.cpick-field{container-type:inline-size;}
@container (max-width:245px){
  .cpick-field .cpick-search{font-size:12.5px;padding-left:11px;padding-right:11px;}
}
.cpick-list.unfold{animation:listIn .26s cubic-bezier(.22,.9,.3,1) both;}
/* Opens to its own height: the end values are the ones the list has when
   open, so it grows into place rather than snapping there. */
@keyframes listIn{
  from{opacity:0;max-height:0;margin-top:0;padding-top:0;padding-bottom:0;}
  to{opacity:1;max-height:288px;margin-top:8px;padding-top:5px;padding-bottom:5px;}
}
.cpick-list{
  /* Room for five of the taller rows before it starts scrolling. */
  margin-top:8px;max-height:288px;overflow-y:auto;
  display:flex;flex-direction:column;
  border:1px solid var(--line);border-radius:var(--radius-sm);
  background:var(--surface);padding:5px 7px;
}
.cpick-row{
  display:flex;align-items:center;justify-content:space-between;gap:9px;
  width:100%;text-align:left;background:none;
  border:none;border-top:1px solid transparent;cursor:pointer;
  padding:12px 8px;border-radius:10px;
  font-size:13.5px;font-weight:500;color:var(--ink);
}
.cpick-row + .cpick-row{border-top-color:var(--line);}
.cpick-row .avatar{width:30px;height:30px;}
.cpick-row .cn{flex:1;min-width:0;overflow-wrap:anywhere;}
.cpick-row .cs{font-size:11px;color:var(--ink-soft);flex:none;}
.cpick-none{font-size:12.5px;line-height:1.45;color:var(--ink-soft);padding:9px 10px;}
.cpick-chosen{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  background:var(--accent-soft);border:1.5px solid var(--accent);
  border-radius:var(--radius-sm);padding:11px 13px;
}
.cpick-chosen .nm{font-size:14px;font-weight:600;color:var(--accent-deep);overflow-wrap:anywhere;}
.cpick-clear{
  background:none;border:none;color:var(--accent-deep);cursor:pointer;
  font-size:12px;font-weight:600;padding:4px 7px;border-radius:8px;flex:none;white-space:nowrap;
}

/* ---------- Picking the service without a native dropdown ---------- */
.spick{position:relative;}
.spick-toggle{
  width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;
  font-family:var(--font-body);font-size:15px;color:var(--ink);text-align:left;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);
  padding:12px 14px;min-height:46px;cursor:pointer;
}
.spick-toggle .lbl{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.spick-toggle .chev{display:flex;flex:none;color:var(--accent-deep);transition:transform .18s;}
.spick-toggle .chev svg{width:16px;height:16px;}
.spick-toggle.open .chev{transform:rotate(180deg);}
.spick-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;}
/* Same height as the list animation ends on, so the fill of that animation
   cannot leave a different one behind. */
.spick-list{
  container-type:inline-size;
  margin-top:8px;max-height:288px;overflow-y:auto;
  display:flex;flex-direction:column;
  border:1px solid var(--line);border-radius:var(--radius-sm);
  background:var(--surface);padding:5px 7px;
}
.spick-list.unfold{animation:listIn .26s cubic-bezier(.22,.9,.3,1) both;}
.field-row .spick-list{width:calc(200% + 12px);margin-left:calc(-100% - 12px);}
.spick-row{
  width:100%;display:flex;align-items:center;gap:10px;
  text-align:left;background:none;border:none;cursor:pointer;
  border-top:1px solid transparent;
  padding:9px 8px;border-radius:10px;
  font-family:var(--font-body);font-size:14px;color:var(--ink);
}
.spick-row.on{background:var(--accent-soft);color:var(--accent-deep);font-weight:700;}
/* Jede eigene Leistung hat ihr Kreuz daneben, nicht darin - ein Knopf im
   Knopf geht nicht. Der Strich trennt die Zeilen. */
/* Nur die Leistungen rollen - das Feld fuer eine neue bleibt immer zu sehen. */
.spick-list:has(.spick-neu){max-height:none;overflow:visible;}
/* Die Liste ist jetzt hoeher als die 288 px, auf denen listIn endet -
   darum ein eigenes Aufklappen ohne Hoehe. */
.spick-list.unfold{animation:spickIn .26s cubic-bezier(.22,.9,.3,1) both;}
@keyframes spickIn{from{opacity:0;transform:translateY(-6px);}to{opacity:1;transform:none;}}
.spick-zeilen{max-height:232px;overflow-y:auto;overscroll-behavior:contain;}
.spick-zeile{display:flex;align-items:center;gap:4px;border-radius:10px;}
/* Die Wahl faerbt die ganze Zeile - Symbol und Name sind zwei Knoepfe. */
.spick-zeile.on{background:var(--accent-soft);}
.spick-zeile.on .spick-row{background:none;}
.spick-zeile.on .spick-z{background:var(--surface);}
.spick-zeile > .spick-z{margin-left:8px;}
/* Das Symbol ist ein eigener Knopf: ein Tipp laedt ein eigenes Bild hoch.
   Die kleine Kamera sagt, dass das geht. */
.spick-bild{
  position:relative;flex:none;display:grid;place-items:center;
  width:40px;height:40px;margin-left:2px;padding:0;border:none;border-radius:50%;
  background:none;cursor:pointer;color:inherit;
}
.spick-kamera{
  position:absolute;right:0;bottom:1px;display:grid;place-items:center;
  width:17px;height:17px;border-radius:50%;
  background:var(--ink);color:var(--ground);border:1.5px solid var(--surface);
}
.spick-kamera svg{width:9px;height:9px;}
.spick-z{overflow:hidden;}
/* Ein hochgeladenes Symbol fuellt seinen Kreis, wo immer es steht. */
.lz-bild{display:block;width:100%;height:100%;object-fit:cover;border-radius:50%;}
.ka-liebling .kl-z .lz-bild{width:18px;height:18px;}
.spick-zeile + .spick-zeile{border-top:1px solid var(--line);}
.spick-zeile .spick-row{flex:1 1 auto;min-width:0;}
.spick-zeile .spick-row span:last-child{min-width:0;overflow-wrap:anywhere;}
.spick-toggle.leer .lbl{color:var(--ink-soft);}
.spick-leer{margin:6px 4px 8px;font-size:12.5px;line-height:1.5;color:var(--ink-soft);}
/* Unten in der Liste legt man eine neue Leistung an. */
.spick-neu{
  display:flex;gap:8px;align-items:center;
  margin:4px -2px 2px;padding-top:8px;border-top:1px solid var(--line);
}
.spick-neu input{
  flex:1 1 auto;min-width:0;font-family:var(--font-body);font-size:16px;color:var(--ink);
  background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:9px 11px;
}
.spick-neu input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);}
.spick-neu .btn{flex:none;}
.spick-neu .btn{width:40px;height:40px;padding:0;}
/* "Neuen Auftrag hinzufuegen" soll ganz dastehen - im engsten Fall wird die
   Schrift im Feld eine Spur kleiner statt den Satz zu kuerzen. */
@container (max-width:250px){ .spick-neu input{font-size:13.5px;padding-left:9px;padding-right:9px;} }
/* Noch enger (320 px, grosse Schrift): das Feld bekommt die ganze Zeile,
   der Plus-Knopf rutscht darunter. */
@container (max-width:215px){
  .spick-neu{flex-wrap:wrap;}
  .spick-neu input{flex-basis:100%;font-size:12.5px;}
  .spick-neu .btn{width:100%;height:36px;}
}
/* Jedes Zeichen mit fester Groesse, sonst zieht das SVG die Zeile lang. */
.spick-z{
  flex:none;display:flex;align-items:center;justify-content:center;
  width:28px;height:28px;border-radius:50%;
  background:var(--accent-soft);color:var(--accent-deep);
}
.spick-z svg{width:16px;height:16px;}
/* Auf der gewaehlten Zeile liegt schon der weiche Ton - das Zeichen kehrt
   sich um, damit es nicht darin verschwindet. */
.spick-row.on .spick-z{background:var(--surface);}

/* Die Modellagen sind eine Bildwand: drei Kacheln nebeneinander, der Name
   liegt als schmaler Streifen im Bild. Bearbeiten und Loeschen stehen in der
   Vollbildansicht, die ein Tipp auf das Bild oeffnet - so bleibt das Raster
   ruhig und man sieht dreimal so viele Bilder auf einmal. */
.style-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;}
@media (min-width:600px){ .style-grid{grid-template-columns:repeat(4,1fr);gap:9px;} }
@media (min-width:900px){ .style-grid{grid-template-columns:repeat(5,1fr);gap:10px;} }
.style-open{
  position:relative;display:block;width:100%;padding:0;border:1px solid var(--planer-line);
  background:var(--planer);cursor:zoom-in;line-height:0;
  border-radius:var(--radius-sm);overflow:hidden;box-shadow:var(--shadow);
}

.photo-open{
  display:block;width:100%;padding:0;border:none;background:none;
  cursor:zoom-in;line-height:0;
}
/* Jede Modellage traegt in der Ecke, wem sie gilt - dieselbe Ecke macht die
   Zuordnung auf. Ohne Zuordnung bleibt sie blass und draengt sich nicht vor. */
.style-item{position:relative;}
.st-kunden{
  position:absolute;top:5px;right:5px;z-index:1;
  display:flex;align-items:center;gap:3px;cursor:pointer;
  background:rgba(24,14,11,.5);color:#FFF;border:1px solid rgba(255,255,255,.28);
  border-radius:999px;padding:3px 7px 3px 5px;line-height:1;
  backdrop-filter:blur(4px);
}
.st-kunden svg{width:13px;height:13px;}
.st-kunden .stk-zahl{
  font-family:var(--font-body);font-size:10.5px;font-weight:700;font-variant-numeric:tabular-nums;
}
.st-kunden.on{background:var(--accent);border-color:var(--accent);color:var(--on-accent);}
.st-kunden:active{transform:scale(.92);}

/* Kundinnen ankreuzen - ueberall dieselbe Liste. */
.kwahl-liste{
  max-height:46vh;overflow-y:auto;-webkit-overflow-scrolling:touch;
  border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);
}
.kwahl-row{
  display:flex;align-items:center;gap:10px;width:100%;cursor:pointer;
  padding:8px 10px;border:none;border-bottom:1px solid var(--line);
  background:none;color:var(--ink);text-align:left;
  font-family:var(--font-body);font-size:13.5px;
}
.kwahl-row:last-child{border-bottom:none;}
.kwahl-row .kw-bild{width:30px;height:30px;flex:none;}
.kwahl-row .kw-name{flex:1;min-width:0;overflow-wrap:anywhere;}
.kwahl-row .kw-haken{
  flex:none;display:flex;align-items:center;justify-content:center;
  width:21px;height:21px;border-radius:50%;
  border:1.5px solid var(--line);background:var(--surface-2);color:transparent;
}
.kwahl-row .kw-haken svg{width:13px;height:13px;}
.kwahl-row.on{background:var(--accent-soft);}
.kwahl-row.on .kw-name{font-weight:700;}
.kwahl-row.on .kw-haken{background:var(--accent);border-color:var(--accent);color:var(--on-accent);}
.kwahl-leer{padding:14px 2px 0;font-size:13px;color:var(--ink-soft);}
/* Das Bild, um das es geht - damit man im Dialog weiss, was man zuordnet. */
.kz-bild{
  display:flex;align-items:center;gap:11px;margin-bottom:14px;
  background:var(--surface-2);border-radius:var(--radius-sm);padding:8px 11px 8px 8px;
}
.kz-bild img{
  width:54px;height:54px;flex:none;border-radius:var(--radius-sm);object-fit:cover;display:block;
}
.kz-bild strong{display:block;font-size:13.5px;}
.kz-bild span{font-size:11.5px;color:var(--ink-soft);}

/* A planning window: the span, what it is for, and the two buttons. Kept
   plainer than an appointment - it is a note to yourself, not a booking. */
.slot-row{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:9px 10px 9px 12px;margin-bottom:8px;
  box-shadow:var(--shadow);min-width:0;
}
.slot-time{
  font-family:var(--font-display);font-weight:700;font-size:13.5px;
  color:var(--ink);background:var(--surface-2);
  padding:4px 9px;border-radius:9px;
  font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;
}
/* The name keeps a readable width; where the row runs out, the buttons move
   to the line below instead of squeezing it letter by letter. */
.slot-label{flex:1 1 120px;min-width:0;font-size:13.5px;font-weight:600;overflow-wrap:break-word;}
.slot-name{display:block;}
/* Time and name on the first line, the buttons on their own below it: the
   booking button under the time, the two small ones in the corner. */
.slot-foot{
  flex:1 1 100%;display:flex;align-items:center;justify-content:space-between;
  gap:10px;margin-top:1px;
}
.slot-acts{display:flex;align-items:center;gap:2px;flex:none;margin-left:auto;}
/* Im Wochenplan (ohne "+ Termin") bleibt alles in einer Zeile; ein langer
   Name bricht in seiner Spalte um. */
.slot-row.eine-zeile{display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  grid-template-areas:"z n a";align-items:center;}
.slot-row.eine-zeile .slot-time{grid-area:z;}
.slot-row.eine-zeile .slot-label{grid-area:n;}
.slot-row.eine-zeile .slot-acts{grid-area:a;margin-left:0;}
/* Wird das Tagblatt eng, steht der Name unter Zeit und Knoepfen - statt
   Buchstabe fuer Buchstabe zu brechen. */
@container tagblatt (max-width:360px){
  .slot-row.eine-zeile{grid-template-columns:auto 1fr;grid-template-areas:"z a" "n n";row-gap:6px;}
  .slot-row.eine-zeile .slot-acts{justify-self:end;}
}
.slot-book{padding:7px 13px;font-size:12px;gap:5px;flex:none;}
.slot-book svg{width:14px;height:14px;}
.slot-tips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.slot-tips .chip{font-size:11.5px;padding:5px 10px;}
.inspo-chip{
  margin-left:auto;flex:none;
  display:inline-flex;align-items:center;gap:5px;
  background:var(--surface-2);color:var(--accent-deep);
  border:1px solid var(--line);border-radius:999px;
  padding:7px 12px 7px 10px;cursor:pointer;
  font-family:var(--font-body);font-size:13px;font-weight:700;
  font-variant-numeric:tabular-nums;
  transition:background .15s,border-color .15s;
}
.inspo-chip svg{width:18px;height:18px;}
.inspo-chip:active{background:var(--accent-soft);border-color:var(--accent);}
.inspo-grid{grid-template-columns:repeat(4,1fr);margin-bottom:9px;}
.inspo-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.inspo-hint{font-size:11.5px;color:var(--ink-soft);flex:1;min-width:0;}
.inspo .btn.small{flex:none;}
.inspo .btn.small[disabled]{opacity:.6;cursor:default;}
.style-open img{width:100%;max-width:100%;aspect-ratio:1;object-fit:cover;display:block;}


/* Die zwei Knoepfe in der Vollbildansicht: bearbeiten und loeschen. */
.lb-tools{
  position:absolute;z-index:2;left:0;right:0;
  bottom:calc(16px + env(safe-area-inset-bottom, 0px));
  display:flex;justify-content:center;gap:9px;
}
.lb-tools button{
  display:inline-flex;align-items:center;gap:7px;cursor:pointer;
  background:rgba(24,14,11,.62);color:#FFF;
  border:1px solid rgba(255,255,255,.22);border-radius:999px;
  padding:9px 15px;font-family:var(--font-body);font-size:12.5px;font-weight:600;
  backdrop-filter:blur(3px);
}
.lb-tools button svg{width:15px;height:15px;}
.lb-tools .weg{color:#FFC4B7;}
