:root{--bg: #0f2233;--bg-2: #14304a;--panel: #16324a;--panel-2: #1b3b58;--line: #244a6b;--text: #e8eef3;--muted: #9fb3c8;--teal: #2ec4b6;--teal-d: #23a99c;--red: #e15b53;--amber: #e0a955;--green: #4bbf73;--radius: 10px}*{box-sizing:border-box}html,body,#app{height:100%}body{margin:0;font-family:system-ui,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}a{color:var(--teal);text-decoration:none}h1,h2,h3{margin:0 0 .6rem;font-weight:650}h1{font-size:1.5rem}h2{font-size:1.15rem}small,.muted{color:var(--muted)}button,.btn{font:inherit;cursor:pointer;border:1px solid var(--line);background:var(--panel-2);color:var(--text);padding:.5rem .9rem;border-radius:8px;transition:background .15s,border-color .15s}button:hover,.btn:hover{background:var(--panel)}button:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--teal);border-color:var(--teal-d);color:#05231f;font-weight:600}.btn-primary:hover{background:var(--teal-d)}.btn-danger{border-color:#7a2f2b;color:#f0b4b0;background:transparent}.btn-sm{padding:.3rem .6rem;font-size:.85rem}input,select,textarea{font:inherit;width:100%;background:var(--bg-2);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:.55rem .7rem}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--teal)}label{display:block;font-size:.85rem;color:var(--muted);margin:.6rem 0 .25rem}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:1.25rem}.grid{display:grid;gap:1rem}.row{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}.spread{justify-content:space-between}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.55rem .6rem;border-bottom:1px solid var(--line);font-size:.9rem}th{color:var(--muted);font-weight:600}tr:hover td{background:var(--panel-2)}.tag{display:inline-block;padding:.12rem .5rem;border-radius:999px;font-size:.75rem;border:1px solid var(--line)}.tag.neu{color:var(--amber);border-color:#6b5320}.tag.extrahiert{color:var(--teal);border-color:var(--teal-d)}.tag.geprueft{color:#8fc7ff;border-color:#2b567e}.tag.verbucht{color:var(--green);border-color:#2f6b45}.tag.fehler,.tag.verworfen{color:var(--red);border-color:#7a2f2b}.err{color:#f0b4b0;background:#3a1d1b;border:1px solid #7a2f2b;padding:.6rem .8rem;border-radius:8px}.ok{color:#bfe8cd;background:#16351f;border:1px solid #2f6b45;padding:.6rem .8rem;border-radius:8px}.note{color:var(--muted);font-size:.85rem}.app{display:grid;grid-template-columns:230px 1fr;min-height:100vh}.sidebar{background:var(--bg-2);border-right:1px solid var(--line);padding:1rem .8rem}.brand{font-weight:700;font-size:1.1rem;padding:.3rem .5rem 1rem}.brand .dot{color:var(--teal)}.nav a{display:block;padding:.55rem .7rem;border-radius:8px;color:var(--muted);margin-bottom:.2rem}.nav a.router-link-active{background:var(--panel);color:var(--text)}.nav a:hover{color:var(--text)}.main{display:flex;flex-direction:column;min-width:0}.topbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.7rem 1.2rem;border-bottom:1px solid var(--line);background:var(--bg-2)}.content{padding:1.4rem;max-width:1100px;width:100%}.auth-wrap{display:grid;place-items:center;min-height:100vh;padding:1rem}.auth-card{width:100%;max-width:420px}.stat{display:grid;gap:.2rem}.stat .v{font-size:1.5rem;font-weight:700}.stat .l{color:var(--muted);font-size:.8rem}.hamburger{display:none;font-size:1.1rem;line-height:1;padding:.35rem .6rem}.menu-overlay{display:none}@media (max-width: 820px){.app{grid-template-columns:1fr}.sidebar{position:fixed;top:0;left:0;bottom:0;width:230px;z-index:200;transform:translate(-100%);transition:transform .2s ease;box-shadow:2px 0 20px #00000080}.sidebar.open{transform:translate(0)}.menu-overlay{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:150;background:#00000080}.hamburger{display:inline-flex;align-items:center}.hide-mobile{display:none}.topbar{padding:.6rem .8rem}.content{padding:1rem .8rem}h1{font-size:1.3rem}.card table{display:block;overflow-x:auto;white-space:nowrap}.grid[style*="1fr 1fr"],.grid{grid-template-columns:1fr!important}}@media (max-width: 460px){.topbar .row{gap:.4rem}.content{padding:.8rem .6rem}select,input{font-size:16px}}
