/* ESP Web-Flasher */
.fl > * + * { margin-top: 1.4rem; }
.fl-step { padding-top: 1.2rem; border-top: 1px solid var(--line); }
.fl-step:first-of-type, .fl > .flash + .fl-step { border-top: 0; padding-top: 0; }
.fl-step > * + * { margin-top: 0.8rem; }
.fl-h { display: flex; align-items: center; gap: 0.6rem; font-size: 1.25rem; margin: 0; }
.fl-num { display: inline-grid; place-items: center; width: 1.8rem; height: 1.8rem; border-radius: 50%; background: var(--accent); color: var(--accent-ink); font: 700 0.95rem/1 var(--font); flex: none; }
.fl-sec { font-size: 1.02rem; margin: 1.2rem 0 0.5rem; }
.fl-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr)); gap: 0.8rem 1.1rem; align-items: start; }
.fl-grid .btn-row { margin-top: 0; align-self: end; }
.fl-grid > .field.fl-wide { grid-column: 1 / -1; }

/* Firmware-Auswahl */
.fl-fws { display: grid; gap: 0.6rem; }
.fl-fw { display: flex; gap: 0.75rem; align-items: flex-start; padding: 0.8rem 1rem; border: 2px solid var(--line); border-radius: var(--r); background: var(--card); cursor: pointer; font-weight: 400; }
.fl-fw:hover { border-color: color-mix(in srgb, var(--accent) 45%, var(--line)); }
.fl-fw.is-sel { border-color: var(--accent); background: var(--accent-soft); }
.fl-fw > input { margin-top: 0.3rem; flex: none; accent-color: var(--accent); }
.fl-fw-body { display: flex; flex-direction: column; gap: 0.25rem; min-width: 0; }
.fl-fw-head { display: flex; flex-wrap: wrap; gap: 0.35rem 0.5rem; align-items: center; }
.fl-fw-head strong { font-size: 1.05rem; margin-right: 0.2rem; }
.fl-fw-desc { overflow-wrap: anywhere; }
.fl-fw-meta { font-size: 0.85rem; color: var(--muted); }

/* Anleitung zur Firmware */
.fl-readme { border: 1px solid var(--line); border-radius: var(--r); background: var(--paper); }
.fl-readme > summary { cursor: pointer; padding: 0.75rem 1rem; font-weight: 700; }
.fl-readme > .prose { padding: 0 1.1rem 1rem; max-width: none; }
.fl-readme > .prose > :first-child { margin-top: 0; }
.fl-readme img, .fl-readme video { max-width: 100%; height: auto; border-radius: var(--r-s); }

/* Eigene Dateien */
.fl-own { padding: 0.9rem 1rem; border: 1px dashed var(--line); border-radius: var(--r); }
.fl-own > * + * { margin-top: 0.7rem; }
.fl-files { display: grid; gap: 0.7rem; }
.fl-file { display: flex; flex-wrap: wrap; gap: 0.6rem 0.8rem; align-items: flex-end; }
.fl-file .fl-off { flex: 0 1 9rem; }
.fl-file .fl-off input { width: 100%; }
.fl-file-info { flex: 1 1 100%; }
.fl-file-info:empty { display: none; }
.fl-help ul { margin: 0.5rem 0 0; padding-left: 1.2rem; }
.fl-help li + li { margin-top: 0.3rem; }

/* Einrichtung */
.fl-series { display: grid; grid-template-columns: minmax(10rem, 14rem) 1fr; gap: 0.5rem 1.1rem; align-items: end; padding: 0.8rem 1rem; border-radius: var(--r-s); background: var(--accent-soft); }
.fl-series p { margin: 0 0 0.35rem; }
@media (max-width: 620px) { .fl-series { grid-template-columns: 1fr; } }
.fl-form .field[hidden], .fl-form .fl-grid[hidden] { display: none; }
.fl-bool { justify-content: flex-end; min-height: 100%; }
.fl-bool .check { padding-top: 1.7rem; }
@media (max-width: 620px) { .fl-bool .check { padding-top: 0; } }
.fl-pw { display: flex; gap: 0.4rem; }
.fl-pw input { flex: 1 1 auto; min-width: 0; }
.fl-eye { flex: none; }
.fl-help-t { margin: 0; }
.fl-err { margin: 0; color: var(--bad); font-weight: 600; }
.field.is-bad input, .field.is-bad select { border-color: var(--bad); box-shadow: 0 0 0 1px var(--bad); }
.fl-preview { margin-top: 1rem; font-weight: 600; color: var(--accent); }
.fl-preview:empty { display: none; }
.fl input:disabled { opacity: 0.65; }

/* Ablauf */
.fl-run > * + * { margin-top: 0.7rem; }
.fl-status { margin: 0; padding: 0.7rem 0.9rem; border-radius: var(--r-s); border-left: 5px solid var(--accent); background: var(--accent-soft); font-weight: 600; }
.fl-status.is-ok { border-color: var(--ok); background: var(--ok-soft); }
.fl-status.is-bad { border-color: var(--bad); background: var(--bad-soft); }
.fl-status:empty { display: none; }
.fl-bar { height: 0.8rem; border-radius: 99px; background: var(--line); overflow: hidden; }
.fl-bar > span { display: block; width: 0; height: 100%; border-radius: 99px; background: var(--accent); transition: width 0.2s; }
.fl-bar > span.is-done { background: var(--ok); }
.fl-info > div { grid-template-columns: minmax(8rem, 11rem) 1fr; padding: 0.35rem 0; }
.fl-log { margin: 0.6rem 0 0; max-height: 18rem; overflow: auto; padding: 0.7rem 0.85rem; border-radius: var(--r-s); background: var(--code-bg); color: var(--code-ink); font: 0.8rem/1.45 var(--mono); white-space: pre-wrap; overflow-wrap: anywhere; }
.fl-log:empty::before { content: "Noch keine Ausgabe."; opacity: 0.6; }
.fl-term { min-height: 10rem; max-height: 24rem; }
.fl-logbox summary, .fl-more summary { cursor: pointer; font-weight: 600; }
.fl-more { padding: 0.9rem 1rem; border: 1px solid var(--line); border-radius: var(--r); }
.fl-more > * + * { margin-top: 0.9rem; }
.fl-mon > * + * { margin-top: 0.7rem; }

/* Geräteliste */
.fl-table td { white-space: nowrap; }
.fl-table td.mono { font-family: var(--mono); font-size: 0.85rem; }
