/* =====================================================================
   busapp FTP – Stylesheet  (Dark-/White-Mode + Auto)
   Theme-Steuerung: <html data-theme="light|dark">  |  ohne Attribut = auto
   ===================================================================== */

:root {
	--bg:        #eef1f4;
	--panel:     #ffffff;
	--panel-2:   #f6f8fa;
	--border:    #d4dae0;
	--text:      #1c2530;
	--text-soft: #5a6b7b;
	--accent:    #00843b;   /* busapp-Gruen */
	--accent-2:  #0a66cf;
	--accent-fg: #ffffff;
	--row-even:  #f4f6f8;
	--row-hover: #e7f3ec;
	--danger:    #c0392b;
	--warn:      #d68910;
	--link:      #0a66c2;
	--shadow:    0 2px 10px rgba(0,0,0,.08);
}

/* explizit Dark */
html[data-theme="dark"] {
	--bg:        #0f1419;
	--panel:     #1a212b;
	--panel-2:   #141b24;
	--border:    #2b3744;
	--text:      #e4e9ee;
	--text-soft: #93a3b3;
	--accent:    #19a85a;
	--accent-2:  #2f86e0;
	--accent-fg: #ffffff;
	--row-even:  #1f2730;
	--row-hover: #243443;
	--danger:    #e74c3c;
	--warn:      #e1a23a;
	--link:      #5fb0f2;
	--shadow:    0 2px 12px rgba(0,0,0,.45);
}

/* Auto: System-Dunkelmodus, wenn KEIN data-theme gesetzt ist */
@media (prefers-color-scheme: dark) {
	html:not([data-theme]) {
		--bg:        #0f1419;
		--panel:     #1a212b;
		--panel-2:   #141b24;
		--border:    #2b3744;
		--text:      #e4e9ee;
		--text-soft: #93a3b3;
		--accent:    #19a85a;
		--accent-2:  #2f86e0;
		--accent-fg: #ffffff;
		--row-even:  #1f2730;
		--row-hover: #243443;
		--danger:    #e74c3c;
		--warn:      #e1a23a;
		--link:      #5fb0f2;
		--shadow:    0 2px 12px rgba(0,0,0,.45);
	}
}

* { box-sizing: border-box; }
html, body { height: 100%; margin: 0; }
body {
	font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
	font-size: 14px; color: var(--text); background: var(--bg);
	-webkit-font-smoothing: antialiased;
}
a { color: var(--link); text-decoration: none; }
a:hover { text-decoration: underline; }
button, input, select, textarea { font-family: inherit; font-size: inherit; color: var(--text); }

/* ----------------------------- Login ------------------------------ */
body.login {
	display: flex; align-items: center; justify-content: center;
	min-height: 100vh;
	background:
		radial-gradient(1200px 600px at 70% -10%, color-mix(in srgb, var(--accent) 22%, transparent), transparent),
		var(--bg);
}
.loginbox {
	width: 360px; max-width: 92vw; background: var(--panel);
	border: 1px solid var(--border); border-radius: 16px; box-shadow: var(--shadow);
	padding: 34px 30px 26px;
}
.loginbox .brand { font-size: 26px; font-weight: 300; margin: 0 0 4px; }
.loginbox .brand strong { font-weight: 800; color: var(--accent); }
.loginbox .sub { color: var(--text-soft); font-size: 12px; margin: 0 0 22px; }
.loginbox label { display: block; font-size: 12px; color: var(--text-soft); margin: 12px 0 4px; }
.loginbox input[type=text], .loginbox input[type=password] {
	width: 100%; padding: 10px 12px; border: 1px solid var(--border);
	border-radius: 9px; background: var(--panel-2); outline: none;
}
.loginbox input:focus { border-color: var(--accent); }
.loginbox .btn { margin-top: 20px; width: 100%; }
.loginbox .meldung { margin-top: 14px; color: var(--danger); font-size: 12.5px; min-height: 16px; }

/* ----------------------------- Buttons ---------------------------- */
.btn {
	display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
	padding: 9px 16px; border: 1px solid transparent; border-radius: 9px;
	background: var(--accent); color: var(--accent-fg); font-weight: 600;
}
.btn:hover { filter: brightness(1.07); text-decoration: none; }
.btn.secondary { background: var(--panel-2); color: var(--text); border-color: var(--border); }
.btn.ghost { background: transparent; color: var(--text-soft); border-color: var(--border); }
.btn.small { padding: 4px 9px; font-size: 12px; border-radius: 7px; }
.btn.danger { background: var(--danger); }

/* --------------------------- App-Layout --------------------------- */
body.app { display: grid; grid-template-rows: auto 1fr auto; height: 100vh; overflow: hidden; }

/* Kopf: durchgehende Adressleiste */
.topbar {
	display: flex; align-items: center; gap: 10px;
	background: var(--panel); border-bottom: 1px solid var(--border);
	padding: 8px 14px; box-shadow: var(--shadow); z-index: 20;
}
.topbar .logo { font-weight: 800; color: var(--accent); white-space: nowrap; }
.topbar .logo span { color: var(--text); font-weight: 300; }
.breadcrumb {
	flex: 1 1 auto; display: flex; align-items: center; flex-wrap: wrap; gap: 2px;
	background: var(--panel-2); border: 1px solid var(--border); border-radius: 9px;
	padding: 6px 10px; overflow: auto; min-height: 38px;
}
.breadcrumb .crumb { cursor: pointer; padding: 2px 6px; border-radius: 6px; white-space: nowrap; }
.breadcrumb .crumb:hover { background: var(--row-hover); }
.breadcrumb .crumb.current { color: var(--accent); font-weight: 700; }
.breadcrumb .sep { color: var(--text-soft); padding: 0 1px; }
.topbar .tools { display: flex; align-items: center; gap: 8px; white-space: nowrap; }
.topbar select.profilwahl { padding: 7px 10px; border-radius: 8px; border: 1px solid var(--border); background: var(--panel-2); max-width: 240px; }

.themetoggle {
	cursor: pointer; border: 1px solid var(--border); background: var(--panel-2);
	border-radius: 8px; padding: 6px 10px; color: var(--text);
}

/* Impersonation-Banner */
.imp-banner {
	background: var(--warn); color: #1b1b1b; font-weight: 600; text-align: center;
	padding: 5px 10px; font-size: 12.5px;
}
.imp-banner a { color: #1b1b1b; text-decoration: underline; font-weight: 700; }

/* Mitte: 3 Spalten ~ 1/4 | 1/2 | 1/4 */
.main { display: grid; grid-template-columns: 1fr 2fr 1fr; gap: 0; min-height: 0; }
.col { min-height: 0; overflow: auto; background: var(--panel); }
.col.tree    { border-right: 1px solid var(--border); }
.col.upload  { border-left: 1px solid var(--border); background: var(--panel-2); }
.col-head {
	position: sticky; top: 0; background: var(--panel);
	border-bottom: 1px solid var(--border); padding: 9px 12px;
	font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-soft);
	display: flex; align-items: center; justify-content: space-between; z-index: 5;
}
.col.upload .col-head { background: var(--panel-2); }

/* Strukturbaum */
.tree-list, .tree-list ul { list-style: none; margin: 0; padding: 0; }
.tree-list ul { margin-left: 14px; }
.tnode { display: flex; align-items: center; gap: 4px; padding: 3px 8px; border-radius: 6px; cursor: pointer; white-space: nowrap; }
.tnode:hover { background: var(--row-hover); }
.tnode.active { background: var(--row-hover); color: var(--accent); font-weight: 600; }
.tnode .twist { width: 14px; text-align: center; color: var(--text-soft); transition: transform .12s; }
.tnode .twist.open { transform: rotate(90deg); }
.tnode .ic { width: 16px; text-align: center; }

/* Inhaltsbereich */
.content-wrap { padding: 0; }
table.listing { width: 100%; border-collapse: collapse; }
table.listing th, table.listing td { text-align: left; padding: 7px 10px; border-bottom: 1px solid var(--border); }
table.listing th { position: sticky; top: 38px; background: var(--panel); font-size: 11.5px; color: var(--text-soft); text-transform: uppercase; z-index: 4; }
table.listing tr:nth-child(even) td { background: var(--row-even); }
table.listing tr:hover td { background: var(--row-hover); }
table.listing td.name { font-weight: 500; }
table.listing td.name .ic { margin-right: 7px; }
table.listing td.name a { cursor: pointer; }
table.listing td.size, table.listing td.modified { color: var(--text-soft); white-space: nowrap; font-variant-numeric: tabular-nums; }
table.listing td.actions { text-align: right; white-space: nowrap; }
.act { cursor: pointer; padding: 3px 6px; border-radius: 6px; color: var(--text-soft); }
.act:hover { background: var(--row-hover); color: var(--text); }
.act.del:hover { color: var(--danger); }
.crumbrow td { background: var(--panel-2) !important; font-weight: 600; }

/* Upload-Spalte */
.dropzone {
	margin: 14px; border: 2px dashed var(--border); border-radius: 12px;
	padding: 26px 14px; text-align: center; color: var(--text-soft);
	transition: border-color .15s, background .15s;
}
.dropzone.drag { border-color: var(--accent); background: var(--row-hover); color: var(--text); }
.uploadlist { margin: 0 14px; }
.uploadlist .u { display: flex; align-items: center; gap: 8px; padding: 6px 0; border-bottom: 1px solid var(--border); font-size: 12.5px; }
.uploadlist .bar { flex: 1; height: 6px; background: var(--panel-2); border-radius: 4px; overflow: hidden; }
.uploadlist .bar i { display: block; height: 100%; width: 0; background: var(--accent); }

/* Fusszeile */
.footer {
	display: flex; align-items: center; justify-content: space-between; gap: 12px;
	background: var(--panel); border-top: 1px solid var(--border);
	padding: 6px 14px; font-size: 12px; color: var(--text-soft); z-index: 20;
}
.footer .mid { text-align: center; flex: 1; }

/* Modal (Editor / Dialoge) */
.modal-back {
	position: fixed; inset: 0; background: rgba(0,0,0,.5);
	display: none; align-items: center; justify-content: center; z-index: 100;
}
.modal-back.show { display: flex; }
.modal {
	background: var(--panel); border: 1px solid var(--border); border-radius: 14px;
	box-shadow: var(--shadow); width: 880px; max-width: 94vw; max-height: 92vh;
	display: flex; flex-direction: column; overflow: hidden;
}
.modal .m-head { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; border-bottom: 1px solid var(--border); }
.modal .m-title { font-weight: 700; }
.modal .m-body { padding: 16px; overflow: auto; }
.modal .m-foot { padding: 12px 16px; border-top: 1px solid var(--border); display: flex; justify-content: flex-end; gap: 8px; }
.modal .x { cursor: pointer; color: var(--text-soft); font-size: 20px; line-height: 1; }
.editor {
	width: 100%; min-height: 50vh; resize: vertical;
	font-family: ui-monospace, "SFMono-Regular", "Menlo", "Consolas", monospace;
	font-size: 13px; line-height: 1.5; tab-size: 4;
	border: 1px solid var(--border); border-radius: 9px; padding: 12px;
	background: var(--panel-2); color: var(--text); white-space: pre; overflow: auto;
}
.modal input.txt, .modal select {
	width: 100%; padding: 9px 11px; border: 1px solid var(--border);
	border-radius: 9px; background: var(--panel-2); margin-top: 6px;
}
.modal label { display:block; font-size: 12px; color: var(--text-soft); margin-top: 12px; }

/* Toast */
.toast-wrap { position: fixed; right: 16px; bottom: 16px; display: flex; flex-direction: column; gap: 8px; z-index: 200; }
.toast { background: var(--panel); border: 1px solid var(--border); border-left: 4px solid var(--accent); border-radius: 9px; box-shadow: var(--shadow); padding: 10px 14px; font-size: 13px; max-width: 340px; }
.toast.err { border-left-color: var(--danger); }
.empty { padding: 30px; text-align: center; color: var(--text-soft); }
.spinner { padding: 26px; text-align: center; color: var(--text-soft); }

/* Schmale Bildschirme: Spalten stapeln */
@media (max-width: 900px) {
	.main { grid-template-columns: 1fr; grid-auto-rows: minmax(180px, auto); overflow: auto; }
	body.app { overflow: auto; }
}

/* ----------------------------- Admin ----------------------------- */
body.admin { display: block; min-height: 100vh; overflow: auto; }
.admin .topbar { position: sticky; top: 0; }
.admin .nav { display: flex; gap: 4px; flex: 1; }
.admin .nav a { padding: 7px 12px; border-radius: 8px; color: var(--text); }
.admin .nav a:hover { background: var(--row-hover); text-decoration: none; }
.admin .nav a.active { background: var(--accent); color: var(--accent-fg); }
.wrap { max-width: 1100px; margin: 22px auto; padding: 0 18px; }
.card { background: var(--panel); border: 1px solid var(--border); border-radius: 14px; box-shadow: var(--shadow); padding: 18px 20px; margin-bottom: 20px; }
.card h2 { margin: 0 0 14px; font-size: 17px; }
.card h3 { margin: 18px 0 8px; font-size: 14px; color: var(--text-soft); }
table.grid { width: 100%; border-collapse: collapse; }
table.grid th, table.grid td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--border); }
table.grid th { font-size: 11.5px; text-transform: uppercase; color: var(--text-soft); }
table.grid tr:hover td { background: var(--row-hover); }
.badge { display: inline-block; padding: 2px 8px; border-radius: 20px; font-size: 11px; background: var(--panel-2); border: 1px solid var(--border); }
.badge.on { color: #0a7; border-color: #0a7; }
.badge.off { color: var(--danger); border-color: var(--danger); }
.formgrid { display: grid; grid-template-columns: 160px 1fr; gap: 10px 14px; align-items: center; }
.formgrid label { color: var(--text-soft); font-size: 13px; }
.formgrid input[type=text], .formgrid input[type=password], .formgrid input[type=number],
.formgrid select, .formgrid textarea {
	width: 100%; padding: 9px 11px; border: 1px solid var(--border);
	border-radius: 9px; background: var(--panel-2); color: var(--text);
}
.formgrid textarea { min-height: 90px; font-family: ui-monospace, monospace; font-size: 12px; }
.formgrid .full { grid-column: 1 / -1; }
.row-actions { white-space: nowrap; text-align: right; }
.muted { color: var(--text-soft); font-size: 12px; }
.flash { padding: 10px 14px; border-radius: 9px; margin-bottom: 16px; }
.flash.ok { background: color-mix(in srgb, var(--accent) 18%, transparent); border: 1px solid var(--accent); }
.flash.err { background: color-mix(in srgb, var(--danger) 16%, transparent); border: 1px solid var(--danger); }

/* ----------------------- Logo (Marke) ---------------------------- */
.logo-badge { display: inline-flex; align-items: center; justify-content: center; background: none; border: 0; padding: 0; }
/* SVG ist hellgrau -> im hellen Design abdunkeln, im dunklen so lassen */
.logo-badge img { height: 22px; width: auto; display: block; filter: brightness(0.30); }
html[data-theme="dark"] .logo-badge img { filter: none; }
@media (prefers-color-scheme: dark) { html:not([data-theme]) .logo-badge img { filter: none; } }
.topbar .logo-badge img { height: 20px; }

/* ------------------- Login: Logo + Cookie-Panel ------------------ */
.login-stage { position: relative; }
.login-stage .loginbox { position: relative; z-index: 2; }
.login-logo-badge { position: absolute; top: 16px; right: 16px; padding: 0; z-index: 3; }
.login-logo-badge img { height: 26px; width: auto; display: block; }

.login-cookie-check { display: block; position: relative; padding-left: 24px; font-size: 11.5px; color: var(--text-soft); margin: 14px 0 4px; cursor: pointer; line-height: 1.4; }
.login-cookie-check input[type="checkbox"] { position: absolute; left: 0; top: 2px; width: auto; margin: 0; cursor: pointer; }
.login-cookie-check > span { display: block; }
.login-cookie-link { color: var(--link); text-decoration: underline; cursor: pointer; }
.login-cookie-link:hover { filter: brightness(1.1); }
.btn:disabled { opacity: .5; cursor: not-allowed; filter: none; }

.login-cookie-info {
	position: absolute; top: 18px; bottom: 18px; left: 0; width: 320px; max-width: 80vw;
	z-index: 1; padding: 18px 22px 18px 50px; border-radius: 16px;
	background: var(--panel-2); border: 1px solid var(--border); color: var(--text);
	font-size: 12px; line-height: 1.5; overflow-y: auto; box-shadow: var(--shadow);
	opacity: 0; transform: translateX(0); pointer-events: none;
	transition: transform .32s ease, opacity .32s ease;
}
.login-cookie-info.offen { opacity: 1; transform: translateX(288px); pointer-events: auto; }
.login-cookie-info h2 { font-size: 15px; color: var(--accent); margin: 0 0 12px; font-weight: 600; }
.login-cookie-info p { margin: 0 0 12px; }
.login-cookie-info dl { margin: 0 0 12px; }
.login-cookie-info dt { font-weight: 700; color: var(--text); margin-top: 8px; }
.login-cookie-info dd { margin: 2px 0 0; color: var(--text-soft); }
.login-cookie-info strong { color: var(--text); font-weight: 700; }
.login-cookie-close { margin-top: 10px; padding: 8px 16px; background: rgb(0,132,59); color: #fff; border: none; cursor: pointer; font-size: 12px; }
.login-cookie-close:hover { background: rgb(0,110,49); }

@media (max-width: 760px) {
	.login-cookie-info { position: fixed; left: 8px; right: 8px; bottom: 8px; top: auto; width: auto; max-width: none; transform: translateY(130%); }
	.login-cookie-info.offen { transform: translateY(0); }
}

/* ===================================================================
   LOGIN im busapp.cms-Stil (cms2/busapp2) – überschreibt frühere Login-Regeln
   =================================================================== */
body.login {
	display: flex; align-items: center; justify-content: center; min-height: 100vh;
	background: linear-gradient(rgb(0,132,59) 0%, rgb(0,132,59) 40%, rgb(0,102,204) 90%, rgb(0,102,204) 100%);
}
.login-stage { position: relative; }
.login-host {
	position: absolute; bottom: 100%; right: 0; margin: 0 0 4px 0;
	font-style: italic; font-size: 12px; color: rgb(235,235,240); text-shadow: 0 1px 2px rgba(0,0,0,.45);
}
.login-box {
	position: relative; z-index: 2; width: 320px; max-width: 92vw; padding: 40px;
	background-color: rgba(210,210,210,0.82); border: 1px solid rgb(185,185,185); color: rgb(35,35,35);
	border-radius: 0; box-shadow: 0 10px 40px rgba(0,0,0,.25);
}
.login-logo { position: absolute; top: 16px; right: 16px; height: 36px; width: auto; filter: none; }
.login-box h1 { font-size: 26px; margin: 0 0 18px 0; color: inherit; font-weight: 300; }
.login-box h1 strong { color: rgb(0,132,59); font-weight: 800; }
.login-box label { display: block; margin: 0 0 4px 0; color: rgb(75,75,75); font-size: 13px; }
.login-box input[type="text"], .login-box input[type="password"] {
	width: 100%; padding: 8px; margin-bottom: 16px;
	background: rgb(225,225,225); border: 1px solid rgb(175,175,175); color: rgb(35,35,35); border-radius: 0;
}
.login-box input:focus { outline: 1px solid rgb(0,132,59); }
.login-box button#login-absenden {
	width: 100%; padding: 9px; background: rgb(0,132,59); color: #000;
	border: none; cursor: pointer; font-size: 13px; border-radius: 0; font-weight: normal;
}
.login-box button#login-absenden:hover { background: rgb(0,110,49); filter: none; }
.login-box button#login-absenden:disabled { background: rgb(0,132,59); color: #000; cursor: not-allowed; opacity: .5; }
.login-version { font-size: 10px; color: rgb(145,145,155); margin: 14px 0 0; text-align: center; }
.login-fehler { color: rgb(175,35,35); margin: 0 0 14px; font-size: 12px; }

/* Cookie-Checkbox/Link (busapp2) */
.login-cookie-check { color: rgb(85,85,85); margin: 0 0 16px; }
.login-cookie-link { color: rgb(0,132,59); }
.login-cookie-link:hover { color: rgb(0,90,40); filter: none; }

/* Cookie-Info-Panel (busapp2: grau, eckig, schiebt nach rechts aus) */
.login-cookie-info {
	border-radius: 0; background-color: rgba(220,220,220,0.96); border: 1px solid rgb(185,185,185);
	color: rgb(55,55,55); box-shadow: none; width: 370px;
}
.login-cookie-info.offen { transform: translateX(288px); }
.login-cookie-info h2 { color: rgb(0,132,59); }
.login-cookie-info dt, .login-cookie-info strong { color: rgb(35,35,35); }
.login-cookie-info dd { color: rgb(85,85,85); }
.login-cookie-close { border-radius: 0; }

/* ---- DARK (explizit + System-Auto) ---- */
html[data-theme="dark"] body.login .login-box,
html:not([data-theme]) body.login .login-box { }
html[data-theme="dark"] body.login .login-box { background-color: rgba(45,45,45,0.85); border-color: rgb(70,70,70); color: rgb(220,220,220); }
html[data-theme="dark"] body.login .login-box h1 { color: inherit; }
html[data-theme="dark"] body.login .login-box h1 strong { color: rgb(40,190,105); }
html[data-theme="dark"] body.login .login-box label { color: rgb(170,170,170); }
html[data-theme="dark"] body.login .login-box input[type="text"],
html[data-theme="dark"] body.login .login-box input[type="password"] { background: rgb(60,60,60); border-color: rgb(90,90,90); color: rgb(220,220,220); }
html[data-theme="dark"] body.login .login-cookie-check { color: rgb(170,170,170); }
html[data-theme="dark"] body.login .login-cookie-link { color: rgb(40,190,105); }
html[data-theme="dark"] body.login .login-cookie-info { background-color: rgba(40,40,40,0.97); border-color: rgb(80,80,80); color: rgb(210,210,210); }
html[data-theme="dark"] body.login .login-cookie-info h2 { color: rgb(40,190,105); }
html[data-theme="dark"] body.login .login-cookie-info dt, html[data-theme="dark"] body.login .login-cookie-info strong { color: rgb(225,225,225); }
html[data-theme="dark"] body.login .login-cookie-info dd { color: rgb(160,160,160); }

@media (prefers-color-scheme: dark) {
	html:not([data-theme]) body.login .login-box { background-color: rgba(45,45,45,0.85); border-color: rgb(70,70,70); color: rgb(220,220,220); }
	html:not([data-theme]) body.login .login-box h1 { color: inherit; }
	html:not([data-theme]) body.login .login-box h1 strong { color: rgb(40,190,105); }
	html:not([data-theme]) body.login .login-box label { color: rgb(170,170,170); }
	html:not([data-theme]) body.login .login-box input[type="text"],
	html:not([data-theme]) body.login .login-box input[type="password"] { background: rgb(60,60,60); border-color: rgb(90,90,90); color: rgb(220,220,220); }
	html:not([data-theme]) body.login .login-cookie-check { color: rgb(170,170,170); }
	html:not([data-theme]) body.login .login-cookie-link { color: rgb(40,190,105); }
	html:not([data-theme]) body.login .login-cookie-info { background-color: rgba(40,40,40,0.97); border-color: rgb(80,80,80); color: rgb(210,210,210); }
	html:not([data-theme]) body.login .login-cookie-info h2 { color: rgb(40,190,105); }
	html:not([data-theme]) body.login .login-cookie-info dt, html:not([data-theme]) body.login .login-cookie-info strong { color: rgb(225,225,225); }
	html:not([data-theme]) body.login .login-cookie-info dd { color: rgb(160,160,160); }
}
