/* DORFER V14.49.0 – Menü je Rolle (Berechtigungen) und Kacheln „Alle Bereiche“ in der Übersicht (nur Admin) */
.v14490-tiles{margin:0 0 22px}
.v14490-tiles-head{flex-wrap:wrap;align-items:center}
.v14490-tiles-actions{display:flex;gap:8px;margin-left:auto;flex-wrap:wrap}
.v14490-tile-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(178px,1fr));gap:12px}
.v14490-tile{position:relative;min-width:0;min-height:112px;border:1px solid #e8e0dd;border-radius:15px;background:linear-gradient(158deg,#fff 56%,#fcf8f7 100%);padding:15px 16px;display:flex;flex-direction:column;align-items:flex-start;gap:7px;text-align:left;box-shadow:0 3px 12px #2d1b1b05;color:#2b2928;transition:transform .17s,border-color .17s,box-shadow .17s;font:inherit;cursor:pointer}
button.v14490-tile:hover,button.v14490-tile:focus-visible{border-color:var(--red,#a82b37);box-shadow:0 8px 20px #a82b3714;transform:translateY(-1px)}
.v14490-tile strong{font-size:15px;line-height:1.25;overflow-wrap:anywhere}
.v14490-tile small{font-size:12px;color:var(--muted,#66625f);line-height:1.3}
.v14490-tile-icon{display:grid;place-items:center;width:37px;height:37px;border-radius:11px;background:#f1dedf;color:#a1333f;font-size:18px}
.v14490-tile-icon svg{width:20px;height:20px}
.v14490-tile-arrow{position:absolute;top:14px;right:15px;color:#a1333f}
.v14490-tile-grid.is-editing .v14490-tile{cursor:grab;padding:0;gap:0}
.v14490-tile-grid.is-editing .v14490-tile.is-dragging{opacity:.5}
.v14490-tile-main{all:unset;box-sizing:border-box;display:flex;flex-direction:column;align-items:flex-start;gap:7px;width:100%;padding:15px 16px 8px;cursor:pointer;min-height:84px}
.v14490-tile-main em{font-style:normal;font-size:12px;font-weight:700;color:#1b7a3a}
.v14490-tile.is-off{background:#f4f3f2;border-style:dashed}
.v14490-tile.is-off .v14490-tile-main{opacity:.6}
.v14490-tile.is-off .v14490-tile-main em{color:#8a2630}
.v14490-tile-move{display:flex;gap:6px;padding:0 12px 12px;width:100%}
.v14490-tile-move button{flex:1;min-height:40px;border:1px solid #e1d6d3;border-radius:10px;background:#fff;font-size:18px;color:#6b2a31}
.v14490-tile-move button:disabled{opacity:.35}
.v14490-matrix-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line,#e4e2df);border-radius:12px;margin:10px 0 14px}
.v14490-matrix{border-collapse:collapse;width:100%;min-width:640px;font-size:14px}
.v14490-matrix th,.v14490-matrix td{padding:8px 10px;border-bottom:1px solid #efebe9;text-align:center}
.v14490-matrix thead th{position:sticky;top:0;background:#faf6f5;font-size:12px;text-transform:none;color:#5d5654}
.v14490-matrix tbody th{text-align:left;font-weight:650;white-space:nowrap;position:sticky;left:0;background:#fff}
.v14490-cell{display:inline-grid;place-items:center;min-width:44px;min-height:40px;cursor:pointer}
.v14490-cell input{width:22px;height:22px;accent-color:var(--red,#a82b37);cursor:pointer}
.v14490-cell input:disabled{cursor:not-allowed;opacity:.55}
@media(max-width:600px){.v14490-tile-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.v14490-tile{min-height:104px;padding:13px}.v14490-tile-arrow{display:none}}
/* V14.49.1: „Alle Bereiche“ per Knopf auf-/zuklappen (standardmäßig zu) */
.v14490-tiles.is-closed .v14490-tiles-head{margin-bottom:0}
.v14490-tiles.is-closed{padding:4px 0}
.v14490-tiles-actions .btn{min-height:40px}
/* V14.49.3: Kaufvertrag vor der digitalen Unterschrift ansehen */
.v14493-review{width:min(980px,100vw);max-width:100vw;height:100dvh;max-height:100dvh;margin:auto;padding:0;border:0;border-radius:0;display:flex;flex-direction:column;background:#f4f2f1}
.v14493-review:not([open]){display:none}
.v14493-review::backdrop{background:#1a1414cc}
.v14493-review-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:14px 16px;background:#fff;border-bottom:1px solid #e6dfdc}
.v14493-review-head small{color:#9d3440;font-weight:800;letter-spacing:.08em;text-transform:uppercase;font-size:11px}
.v14493-review-head h2{margin:2px 0 0;font-size:20px}.v14493-review-head p{margin:2px 0 0;color:#6b6462}
.v14493-review-pages{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:12px;display:flex;flex-direction:column;gap:14px}
.v14493-review-page{flex-shrink:0;margin:0;background:#fff;box-shadow:0 2px 10px #0002;border-radius:4px;overflow:hidden}
.v14493-review-page canvas{display:block}
.v14493-review-page figcaption{font-size:12px;color:#777;text-align:center;padding:6px}
.v14493-review-pages iframe{width:100%;min-height:70vh;border:1px solid #ddd;background:#fff}
.v14493-review-msg{margin:20px auto;text-align:center;color:#555}
.v14493-review-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:12px;padding:12px 16px calc(12px + env(safe-area-inset-bottom));background:#fff;border-top:1px solid #e6dfdc}
.v14493-review-foot [data-hint]{margin-right:auto;color:#6b6462;font-size:14px}
.v14493-review-foot .btn.primary{min-height:52px;font-size:17px;padding:0 22px}
.v14493-review-seen{margin-right:auto;display:flex;gap:8px;align-items:center;font-weight:600}
.v14493-review-seen input{width:22px;height:22px;accent-color:var(--red,#a82b37)}
.v14493-review-seen[hidden]{display:none!important}
/* V14.49.4: Name des Käufers im Unterschriftsfeld */
.v14494-signature .v14494-sig-name{color:var(--red,#a82b37)}
.v14494-signature .v14494-sig-line{margin:4px 0 0;padding-top:6px;border-top:1px solid #333;text-align:center;font-size:15px;color:#333}
/* V14.49.5: Admin blendet Reiter im linken Menü aus/ein („⇅ Menü anpassen“) */
.v14495-nav-hidden .nav-btn{opacity:.45}
.v14495-nav-hidden .dorfer29-nav-label::after{content:" · ausgeblendet";font-size:11px;font-weight:600}
.v14495-nav-eye{display:inline-grid;place-items:center;min-width:36px;min-height:36px;border-radius:9px;border:1px solid #ffffff33;background:transparent;color:inherit;cursor:pointer}
.v14495-nav-eye svg{width:18px;height:18px}
/* V14.49.11: Verkaufsunterlagen „Alle herunterladen“ – ein Knopf je PDF, Liste scrollt im Dialog */
.v144911-books-dialog{width:min(560px,94vw)}
.v144911-books-dialog [hidden]{display:none!important} /* .btn{display:flex} würde hidden sonst überstimmen */
.v144911-books-dialog .dorfer26-confirm-panel{max-height:min(86vh,760px)}
.v144911-book-list{list-style:none;margin:0;padding:0;display:grid;gap:8px;overflow-y:auto;-webkit-overflow-scrolling:touch;min-height:0;flex:1 1 auto}
.v144911-book-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid var(--line,#e4e2df);border-radius:12px;background:#fff}
.v144911-book-text{display:flex;flex-direction:column;gap:2px;min-width:0}
.v144911-book-text strong{overflow-wrap:anywhere}
.v144911-row-status:empty{display:none}
.v144911-book-row .btn{flex:0 0 auto;min-height:44px;white-space:nowrap}
[data-v144911-size]{white-space:nowrap}
@media(max-width:480px){.v144911-book-row{flex-direction:column;align-items:stretch}}
/* V14.49.12: Ladeanzeige oben (schmaler Balken), „Stand hh:mm“ neben „Aktualisieren“, Hinweis bei zurückgehaltener Anzeige */
.v144912-loadbar{position:fixed;top:0;left:0;right:0;height:3px;z-index:2000;overflow:hidden;background:#a82b3722;pointer-events:none}
.v144912-loadbar::before{content:"";position:absolute;top:0;bottom:0;left:-40%;width:40%;background:var(--red,#a82b37);animation:v144912-load 1.1s ease-in-out infinite}
.v144912-loadbar[hidden]{display:none}
@keyframes v144912-load{0%{left:-40%}100%{left:100%}}
@media (prefers-reduced-motion:reduce){.v144912-loadbar::before{animation:none;left:0;width:100%;opacity:.6}}
.v144912-stand{align-self:center;font-size:13px;color:#66625f;white-space:nowrap}
.v144912-stand:empty{display:none}
.v144912-stand.v144912-busy{opacity:.55}
.dorfer17-home-header .v144912-stand{color:#ffffffcc}
.v144912-pending{position:fixed;top:10px;left:50%;transform:translateX(-50%);z-index:1900;display:flex;align-items:center;gap:12px;max-width:calc(100vw - 24px);padding:8px 10px 8px 14px;border-radius:12px;background:#222;color:#fff;font-size:14px;box-shadow:0 8px 24px #0004}
.v144912-pending[hidden]{display:none}
.v144912-pending .btn{min-height:44px;flex:0 0 auto}
@media(max-width:650px){.v144912-stand{display:none}.v144912-pending{flex-direction:column;align-items:stretch;text-align:center}}
/* V14.49.13: Übertragungsstatus im Kopf (immer sichtbar) und Warteschlange mit Inhalt je Vorgang */
.v144913-sync-status{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:6px 12px;border-radius:11px;border:1px solid #e7e0dc;background:#faf9f8;color:#3d3a39;font-size:13px;font-weight:650;white-space:nowrap;cursor:pointer}
.v144913-sync-status .dorfer-icon{width:18px;height:18px}
.v144913-sync-status.is-done{color:#12623e;border-color:#cfe6da;background:#f2faf6}
.v144913-sync-status.is-pending{color:#7a4a12;border-color:#efd9bd;background:#fff7ee}
.v144913-sync-status.is-failed{color:#fff;border-color:#a82b37;background:#a82b37}
.dorfer17-home-header .v144913-sync-status.is-done,.dorfer17-home-header .v144913-sync-status.is-pending{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.25);color:#fff}
@media(max-width:650px){.v144913-sync-status span{display:none}.v144913-sync-status{padding:6px 10px}}
.v144913-group{margin:14px 0;padding:0}
.v144913-group h3{font-size:16px;margin:8px 0}
.v144913-group h3 small{display:block;font-weight:500;color:#66625f;font-size:13px;margin-top:2px}
.v144913-job{display:flex;flex-direction:column;gap:6px;padding:12px;border:1px solid #e4e0dd;border-radius:12px;margin:8px 0;background:#fff;overflow-wrap:anywhere}
.v144913-job.is-fehler,.v144913-job.is-konflikt{border-color:#e2aab0;background:#fff7f7}
.v144913-job-head{display:flex;justify-content:space-between;gap:10px;align-items:center;flex-wrap:wrap}
.v144913-pill{font-size:12px;font-weight:700;padding:4px 9px;border-radius:99px;background:#f0eeeb}
.is-fehler .v144913-pill,.is-konflikt .v144913-pill{background:#a82b37;color:#fff}
.v144913-error{color:#8f1f2a;font-weight:600;margin:0}
.v144913-job dl{display:grid;grid-template-columns:minmax(110px,auto) 1fr;gap:3px 12px;margin:2px 0;font-size:14px}
.v144913-job dt{color:#66625f}.v144913-job dd{margin:0}
.v144913-images{display:flex;flex-wrap:wrap;gap:10px}
.v144913-images figure{margin:0;max-width:240px}
.v144913-images img{max-width:240px;max-height:160px;border:1px solid #e4e0dd;border-radius:8px;background:#fff;object-fit:contain}
.v144913-images figcaption{font-size:12px;color:#66625f}
.v144913-job-actions{display:flex;flex-wrap:wrap;gap:8px}
.v144913-job-actions .btn{min-height:44px;display:inline-flex;align-items:center;gap:6px}
.v144913-job-actions .btn .dorfer-icon{width:18px;height:18px}
.v144913-empty{display:flex;align-items:center;gap:8px;color:#12623e;font-weight:650}
.v144913-upload-note{display:block;margin-top:6px}
/* V14.49.14: E-Mail – „Versand klären“, Abgleich-Hinweis für Admin */
.v144914-row-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-start}
.v144914-steps{margin:6px 0 12px;padding-left:22px;line-height:1.5}
.v144914-choice,.v1441-dialog label.v144914-choice{display:flex;align-items:flex-start;gap:10px;min-height:44px;padding:8px 0}
.v144914-choice input{width:22px;height:22px;flex:0 0 auto;margin-top:2px}
.v144914-sync-alert ul{margin:6px 0;padding-left:20px}
/* V14.49.15 (Paket 4): „Wer darf was“ – Rollen als Spalten, Arbeitsbereiche als Abschnitte */
.v144915-legend{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 14px}
.v144915-area{margin:18px 0;min-width:0;max-width:100%}
.dorfer28-rights>*{min-width:0}
.v144915-area h3{margin:0 0 8px}
.v144915-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line,#e6e1dc);border-radius:12px}
.v144915-matrix{width:100%;border-collapse:collapse;min-width:900px;font-size:14px}
.v144915-matrix td{white-space:nowrap}
.v144915-matrix td small{white-space:normal;max-width:180px}
.v144915-matrix th,.v144915-matrix td{padding:10px 8px;border-bottom:1px solid var(--line,#e6e1dc);text-align:left;vertical-align:top}
.v144915-matrix thead th{background:#f7f4f1;font-weight:700;white-space:nowrap}
.v144915-matrix tbody th{font-weight:600;min-width:180px}
.v144915-matrix tbody th .pill{margin-top:4px;font-size:11px}
.v144915-matrix td small{display:block;color:#66625f;font-size:12px;margin-top:2px}
.v144915-yes{color:#1f6b3a;font-weight:600}
.v144915-no{color:#66625f}
.v144915-amber,.v144915-person{color:#8a5a00;font-weight:600}
.v144915-muted{color:#8b8682}
.pill.muted{background:#efebe7;color:#66625f}
.v144915-hide-only{margin:6px 0 12px}
.v144915-locked{opacity:.75}
.v144915-matrix tbody th,.v144915-matrix thead th:first-child{position:sticky;left:0;background:#fff;z-index:1;box-shadow:1px 0 0 var(--line,#e6e1dc)}
.v144915-matrix thead th:first-child{background:#f7f4f1}
.v144915-legacy{margin:6px 0;padding-left:20px;line-height:1.6}
/* V14.49.16 (Paket 5 „Bedienung und iPad“): Touchgeräte – Safari zoomt nicht mehr beim Antippen eines Feldes (mind. 16 px),
   Tippflächen mindestens 44 px hoch, Leiste unten 12 px, Nebeninfos mindestens 13 px. Text-Grau auf #66625f abgedunkelt (Kontrast). */
:root{--muted:#66625f}
.small-note{font-size:13px}
@media (pointer:coarse){
 input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]),select,textarea{font-size:16px!important}
 .btn,.btn.small,select,.back,.dorfer22-back{min-height:44px}
 .btn.small{padding-top:10px;padding-bottom:10px}
 summary{min-height:44px;padding-top:10px;padding-bottom:10px;box-sizing:border-box}
 .back{display:inline-flex;align-items:center;padding:10px 4px}
 .dorfer30-mobile-nav small{font-size:12px!important}
 .dorfer28-global-search input{font-size:16px!important}
}
/* V14.49.16: Symbole im Menü und in der Leiste (Strich-Symbole statt Zeichen) */
.nav-btn .symbol .dorfer-icon,.dorfer30-mobile-icon .dorfer-icon,.dorfer30-menu-symbol .dorfer-icon{width:20px;height:20px}
.pill .dorfer-icon{width:14px;height:14px;vertical-align:-2px}
/* V14.49.16: Meldungen über Offline-Knopf (z-index 9000) und Leiste unten; Fehler mit „Schließen“ */
.toast{z-index:9500}
.toast.error{padding-right:14px}
.v144916-toast-close{display:inline-flex;align-items:center;justify-content:center;margin:10px 0 0 0;min-height:44px;padding:8px 16px;border-radius:10px;border:1px solid #ffffff80;background:transparent;color:#fff;font-weight:700;cursor:pointer;margin-left:auto}
.toast.error{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
@media (max-width:880px){.toast{left:12px;right:12px;max-width:none;bottom:calc(84px + env(safe-area-inset-bottom))}}
.v144916-errorlog ul{margin:8px 0;padding-left:20px;font-size:13px;line-height:1.5}
.toast[hidden]{display:none!important}
/* V14.49.23: Kopf der Startseite (dunkles Banner) – die Begrüßung wird nie mehr zusammengedrückt. Bisher standen Begrüßung und
   Werkzeuge über 1350 px Breite nebeneinander; seit „Stand …“ und „Alles übertragen“ reicht der Platz dafür nicht mehr (iPad Pro
   quer, 1366 px: Begrüßung 128 px breit, Kopf 314 px hoch). Jetzt rutschen die Werkzeuge in eine eigene Zeile, sobald beides nicht
   nebeneinander passt – unabhängig von der Bildschirmbreite. Gilt ebenso für den schmalen Kopf der anderen Seiten. */
.dorfer-topbar.dorfer17-home-header,.dorfer-topbar.dorfer17-compact-header{flex-wrap:wrap;row-gap:12px}
.dorfer17-home-header .dorfer17-home-welcome{flex:1 1 440px}
.dorfer17-compact-header .dorfer17-page-context{flex:1 1 280px}
.dorfer17-home-header>.dorfer-top-actions,.dorfer17-compact-header>.dorfer-top-actions{flex:1 1 auto;flex-wrap:wrap;justify-content:flex-end;min-width:0}
@media(max-width:1350px){.dorfer-topbar.dorfer17-home-header,.dorfer-topbar.dorfer17-compact-header{gap:12px}
 .dorfer17-home-header>.dorfer-top-actions,.dorfer17-compact-header>.dorfer-top-actions{justify-content:flex-start}
 /* Werkzeuge in einer Zeile halten: Name nur im Profilmenü (Bild bleibt), Suchfeld darf schmaler werden. */
 .dorfer17-home-header .dorfer-top-person,.dorfer17-compact-header .dorfer-top-person{display:none}
 .dorfer-top-actions>.dorfer28-global-search{flex:1 1 160px}}
@media(max-width:1100px){.dorfer17-home-header .dorfer-refresh>span,.dorfer17-compact-header .dorfer-refresh>span{display:none}}
/* V14.49.33: Cloudflare Turnstile (Bot-Schutz) an Anmeldung und Systemprotokoll – Entwurf „Anmeldung mit Turnstile“.
   Normalfall unsichtbar: das Feld nimmt keinen Platz ein (keine Lücke im Formular). Verlangt Cloudflare das
   Prüfkästchen, erscheint es zwischen Passwort und Knopf (Klasse is-visible). Das Kästchen zeichnet Cloudflare selbst. */
.auth-form,#v38-audit-form{position:relative}
.dorfer-turnstile:not(.is-visible){position:absolute;left:0;top:0;width:100%;height:0;overflow:hidden;pointer-events:none}
.dorfer-turnstile.is-visible{min-height:65px}
.dorfer-turnstile iframe{max-width:100%}
@keyframes dorfer-spin{to{transform:rotate(360deg)}}
.dorfer-spin{animation:dorfer-spin 1s linear infinite;transform-origin:center}
@media (prefers-reduced-motion:reduce){.dorfer-spin{animation-duration:2.5s}}
/* Knopf während „Einen Moment …“ / „Anmelden …“ / „Wird geladen …“: gesperrt, aber voll sichtbar mit Ladekreis */
.auth .login #loginButton,#v38-audit-submit{display:flex;align-items:center;justify-content:center;gap:10px}
#v38-audit-submit{display:inline-flex}
.auth .login #loginButton.is-busy:disabled,#v38-audit-submit.is-busy:disabled{opacity:1}
#loginButton .dorfer-icon,#v38-audit-submit .dorfer-icon,.dorfer-ts-retry .dorfer-icon{width:20px;height:20px;flex:none}
/* Meldung A: „Erneut prüfen“ (Symbol refresh in Bordeaux) */
.auth .login .dorfer-ts-retry{width:100%;min-height:51px;border-radius:12px;display:flex;align-items:center;justify-content:center;gap:10px;margin:0 0 16px}
.dorfer-ts-retry .dorfer-icon{color:var(--red)}
