:root{--bg:#f3f6f8;--panel:#fff;--ink:#0d1720;--muted:#65727d;--dark:#071015;--dark2:#0c1c23;--cyan:#00b7d9;--cyan2:#087f96;--line:#dfe7eb;--ok:#1f8b62;--warn:#ad7513;--danger:#b63c3c;--shadow:0 8px 24px rgba(5,20,30,.12)}*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:Inter,Segoe UI,Arial,sans-serif;color:var(--ink);background:var(--bg)}button,input,select,textarea{font:inherit}.hidden{display:none!important}.auth-view{min-height:100vh;background:linear-gradient(135deg,#071015,#0b2530);display:grid;place-items:center;padding:28px}.auth-brand{position:fixed;left:26px;top:24px;color:white;display:flex;gap:12px;align-items:center}.auth-brand img,.brand img{width:34px;height:34px;object-fit:contain}.auth-brand strong,.brand strong{display:block;letter-spacing:.04em}.auth-brand span,.brand small{display:block;color:var(--cyan);font-size:10px;font-weight:700;letter-spacing:.12em}.auth-card{width:min(440px,92vw);background:#fff;border-radius:10px;padding:30px;box-shadow:var(--shadow)}.auth-card h1{margin:0 0 8px;font-size:24px}.auth-card p{color:var(--muted);margin:0 0 20px}.auth-card label{display:block;font-size:12px;font-weight:700;margin:14px 0 5px}.auth-card input{width:100%;border:1px solid #bbc9d1;border-radius:6px;padding:11px 12px;outline:none}.auth-card input:focus{border-color:var(--cyan2);box-shadow:0 0 0 3px rgba(0,183,217,.13)}.auth-card small{display:block;margin-top:14px;color:var(--muted)}.link-button{border:0;background:none;color:#087f96;padding:8px 0;text-decoration:underline;cursor:pointer}.message{padding:10px 12px;border-radius:6px;margin-top:12px;background:#eef6f8}.message.error{background:#fff0f0;color:#8f2020}.message.warn{background:#fff8e8;color:#76520c}.hint{margin-top:10px;font-size:12px;color:var(--muted)}.app{min-height:100vh}.topbar{height:58px;background:var(--dark);color:#fff;display:flex;align-items:center;gap:12px;padding:0 14px;border-bottom:2px solid var(--cyan);position:sticky;top:0;z-index:30}.icon-btn,.user-btn{border:0;background:transparent;color:#fff;cursor:pointer}.icon-btn{font-size:20px;width:34px;height:34px}.brand{display:flex;align-items:center;gap:8px;color:#fff;text-decoration:none;min-width:112px}.brand span{line-height:1}.context-select{width:210px;background:#0d2a34;color:#fff;border:1px solid #1a6b7d;border-radius:5px;padding:8px 32px 8px 10px}.search-wrap{position:relative;flex:1;max-width:700px}.search-wrap>input{width:100%;padding:9px 12px;border:1px solid #89a1ad;border-radius:5px;background:#edf6fa;outline:none}.overlay-list{position:absolute;top:41px;left:0;right:0;background:white;color:var(--ink);border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow);max-height:360px;overflow:auto;z-index:50}.overlay-item{padding:10px 12px;border-bottom:1px solid var(--line);cursor:pointer}.overlay-item:hover{background:#eef8fa}.overlay-item small{display:block;color:var(--muted);margin-top:2px}.badge-wrap{position:relative}.badge{position:absolute;right:-1px;top:-2px;background:#d43838;color:white;font-size:9px;border-radius:10px;min-width:16px;padding:2px}.user-wrap{position:relative}.user-btn{display:flex;align-items:center;gap:8px;padding:7px 8px;border:1px solid #155c70;border-radius:4px}.avatar{color:#8ec9ff}.user-menu{position:absolute;right:0;top:44px;width:230px;background:white;color:var(--ink);border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow);padding:12px;z-index:50}.user-identity{font-size:12px;line-height:1.45;padding-bottom:10px;border-bottom:1px solid var(--line);margin-bottom:8px}.logout-btn{width:100%;text-align:left;border:0;background:white;padding:9px;border-radius:4px;cursor:pointer}.logout-btn:hover{background:#f3f6f8}.notification-panel{position:absolute;right:150px;top:54px;width:360px;max-height:460px;overflow:auto;background:white;color:var(--ink);border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow);padding:8px;z-index:60}.notice{padding:10px;border-bottom:1px solid var(--line);cursor:pointer}.notice.unread{background:#eef9fb}.notice small{display:block;color:var(--muted);margin-top:4px}.body-grid{display:grid;grid-template-columns:155px 1fr;min-height:calc(100vh - 58px)}.sidebar{background:#081115;color:#dce5e9}.sidebar nav{padding:18px 0}.nav-link{display:block;color:#dce5e9;text-decoration:none;padding:13px 18px;border-left:3px solid transparent}.nav-link:hover,.nav-link.active{background:#10232b;border-left-color:var(--cyan);color:white}.main{padding:26px;min-width:0}.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:18px}.page-head h1{margin:0;font-size:26px}.page-head p{margin:5px 0 0;color:var(--muted)}.actions{display:flex;gap:8px;flex-wrap:wrap}.btn{border:1px solid #aebec6;background:white;padding:8px 12px;border-radius:5px;cursor:pointer}.btn.primary{background:#087f96;border-color:#087f96;color:white}.btn.danger{background:#b63c3c;border-color:#b63c3c;color:#fff}.btn:disabled{opacity:.5;cursor:not-allowed}.cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:18px}.card,.panel{background:var(--panel);border:1px solid var(--line);border-radius:7px;box-shadow:0 2px 8px rgba(5,20,30,.04)}.card{padding:16px}.card span{display:block;color:var(--muted);font-size:12px}.card strong{display:block;font-size:22px;margin-top:6px}.panel{padding:16px;margin-bottom:16px}.panel h2,.panel h3{margin-top:0}.table-wrap{overflow:auto}.data-table{width:100%;border-collapse:collapse;background:white}.data-table th{font-size:11px;text-align:left;color:#52616a;background:#f0f5f7;padding:10px;border-bottom:1px solid #d7e1e5;white-space:nowrap}.data-table td{padding:10px;border-bottom:1px solid #e7edef;font-size:13px;vertical-align:top}.data-table tbody tr{cursor:pointer}.data-table tbody tr:hover{background:#f6fbfc}.status{display:inline-block;padding:3px 7px;border-radius:11px;font-size:10px;font-weight:700;background:#e9eef0}.status.active,.status.approved{background:#e7f6ef;color:#176649}.status.candidate{background:#fff4d7;color:#7a5600}.status.inactive,.status.rejected{background:#f5e9e9;color:#8d3131}.split{display:grid;grid-template-columns:1fr 1fr;gap:16px}.detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.detail{border:1px solid var(--line);border-radius:5px;padding:10px}.detail span{display:block;color:var(--muted);font-size:11px}.detail strong{display:block;margin-top:3px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.form-grid label{font-size:11px;font-weight:700}.form-grid input,.form-grid select,.form-grid textarea{display:block;width:100%;margin-top:5px;padding:9px;border:1px solid #bbc9d1;border-radius:5px}.wide{grid-column:1/-1}.matrix{overflow:auto}.matrix table{min-width:760px}.matrix input[type=checkbox]{transform:scale(1.1)}.images{display:grid;grid-template-columns:1fr 1fr;gap:12px}.evidence{background:#eef2f4;border:1px solid var(--line);border-radius:6px;padding:8px}.evidence img{width:100%;height:220px;object-fit:contain;background:#111}.empty{padding:24px;color:var(--muted);text-align:center}.toast{position:fixed;right:22px;bottom:22px;background:#0c2730;color:white;padding:12px 16px;border-radius:6px;box-shadow:var(--shadow);z-index:100}.loading{color:var(--muted)}@media(max-width:900px){.body-grid{grid-template-columns:1fr}.sidebar{position:fixed;top:58px;bottom:0;left:0;width:220px;z-index:25;transform:translateX(-100%);transition:.2s}.sidebar.open{transform:translateX(0)}.cards{grid-template-columns:1fr 1fr}.split{grid-template-columns:1fr}.context-select{width:150px}.brand span{display:none}.notification-panel{right:10px}.form-grid{grid-template-columns:1fr}.wide{grid-column:auto}}@media(max-width:650px){.cards{grid-template-columns:1fr}.main{padding:14px}.context-select{display:none}.search-wrap{max-width:none}.user-btn #userLabel{display:none}.notification-panel{width:calc(100vw - 20px)}}

/* Web-Candidate 017: Kunde / Parkraum / Kamerazuordnung */
.btn.good{border-color:#1b8f68;background:#1b8f68;color:#fff}.btn.small{padding:5px 8px;font-size:12px}.check{display:flex;align-items:center;gap:8px}.check input{width:auto}.opening-editor{display:grid;gap:8px}.opening-row{display:grid;grid-template-columns:42px 130px 1fr 28px 1fr;gap:8px;align-items:center;padding:7px 0;border-bottom:1px solid #e1e7eb}.opening-row input[type="time"]{min-width:0}.subform{margin-top:16px;border-top:1px solid #dce5e9;padding-top:16px}.panel pre{white-space:pre-wrap;word-break:break-word;background:#f5f7f8;border:1px solid #dce5e9;border-radius:6px;padding:10px;max-height:220px;overflow:auto}
@media(max-width:900px){.opening-row{grid-template-columns:35px 1fr 1fr}.opening-row span{display:none}}

/* Version 001 - Mandantenkonzept: eine Hierarchie, keine parallelen Entitäten */
.nav-sub-link{padding-left:31px;font-size:12px;background:rgba(255,255,255,.025)}
.nav-sub-link::before{content:'↳ ';color:#67bac7}
.nav-parent-current{border-left-color:#2c6977;background:#0b1e25}
.list-filters{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;margin-bottom:20px}
.list-filters label{display:flex;flex-direction:column;gap:5px;color:#53626c;font-weight:600;font-size:12px;min-width:170px}
.list-filters input,.list-filters select{padding:9px;border:1px solid #b9c7ce;border-radius:5px}
.list-filters label:first-child{flex:1;max-width:460px}
.form-help{font-size:12px;color:#62727d;margin:0}
.row-actions{white-space:nowrap}
.row-actions .btn{margin:2px}
.rules-overlay{position:fixed;inset:0;z-index:120;background:rgba(2,15,22,.55);display:flex;align-items:center;justify-content:center;padding:18px}
.rules-window{background:#fff;border-radius:9px;border:1px solid #9cbdc6;box-shadow:0 20px 60px rgba(0,0,0,.24);padding:24px;width:min(700px,96vw);max-height:92vh;overflow:auto}
.rules-window h2{margin:0}
.rules-actions{justify-content:flex-end;margin-top:22px}
@media(max-width:650px){.row-actions{white-space:normal}.rules-window .detail-grid{grid-template-columns:1fr}.list-filters{display:block}.list-filters label{margin-bottom:10px}}

/* Objekt-Hilfe: schreibende Wirkungen klar benennen, kein Backend-Eingriff. */
.object-help-popover{position:fixed;z-index:10030;pointer-events:none;max-width:340px;
  padding:11px 14px;border-radius:9px;background:#102730;color:#f6fcff;
  border:1px solid #29b4cb;box-shadow:0 9px 27px rgba(0,0,0,.24);
  line-height:1.45;font-size:13px;white-space:normal;overflow-wrap:anywhere}
.object-help-popover.hidden{display:none}
@media print{.object-help-popover{display:none!important}}

/* EDO-PM Kameraeinrichtung 001 - unabhängiges Modal */
.camera-setup-overlay{position:fixed;inset:0;z-index:130;background:rgba(2,15,22,.65);display:grid;place-items:center;padding:16px}
.camera-setup-window{background:white;border-radius:10px;border:1px solid #9cbdc6;box-shadow:0 20px 60px rgba(0,0,0,.24);padding:24px;width:min(760px,96vw);max-height:94vh;overflow-y:auto}
.camera-setup-window h2{margin:0}.camera-setup-window .page-head p{margin-top:4px}.camera-setup-qr{display:block;width:min(300px,75vw);margin:12px auto}
.camera-setup-route{display:block;background:#eef2f4;padding:12px;word-break:break-all}.camera-setup-print code{overflow-wrap:anywhere}
@media print{body *{visibility:hidden!important}.camera-setup-overlay,.camera-setup-overlay *, .camera-setup-print,.camera-setup-print *{visibility:visible!important}
.camera-setup-overlay{position:absolute;inset:0;background:white;padding:0}.camera-setup-window{border:0;box-shadow:none;width:100%;max-height:unset}.camera-setup-controls,.camera-setup-window>.page-head{display:none!important}}


/* EDO-PM LOGIN_GLASS_001 | CSS-only, nur der bestehende Anmeldezustand.
   Kein Auth-/API-/Status-/Kamera-Code wird geaendert.
   Der untere Balken ist ein Zierakzent, keine Fortschrittsanzeige. */
#loginView.auth-view, #loginView.auth-view {
  position:relative; isolation:isolate;
  background:
    radial-gradient(ellipse at 8% 18%,rgba(0,197,224,.18) 0%,transparent 34%),
    radial-gradient(ellipse at 91% 82%,rgba(23,77,129,.33) 0%,transparent 42%),
    linear-gradient(145deg,#061019 0%,#081d2a 43%,#081522 100%);
  color:#f3fbff;
}
#loginView .auth-brand{z-index:3;filter:drop-shadow(0 0 7px rgba(0,210,237,.13))}
#loginView .auth-card{
  position:relative;z-index:1;overflow:visible;
  width:min(510px,calc(100vw - 38px));
  padding:39px 42px 46px;
  border:1.5px solid rgba(63,236,252,.85);border-radius:24px;
  color:#edf8ff;
  background:linear-gradient(125deg,rgba(34,65,87,.89),rgba(24,44,64,.92) 56%,rgba(30,55,77,.88));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.17),inset 0 -2px 30px rgba(0,219,239,.08),
    0 0 0 3px rgba(1,184,216,.06),0 19px 56px rgba(0,0,0,.43),0 0 38px rgba(0,200,231,.13);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);
}
#loginView .auth-card:before{
  content:"";position:absolute;inset:4px;z-index:-1;pointer-events:none;
  border-radius:20px;box-shadow:inset 0 0 42px rgba(3,187,218,.065);
}
#loginView .auth-card:after{
  content:"";position:absolute;left:12%;right:12%;bottom:-42px;height:8px;
  border:1px solid rgba(142,199,221,.75);border-radius:99px;
  background:linear-gradient(90deg,#08d8ed 0%,#11d6eb 62%,rgba(149,197,219,.18) 62%,rgba(149,197,219,.12) 100%);
  box-shadow:0 0 0 3px rgba(2,17,30,.3),0 0 22px rgba(14,214,239,.2);
  pointer-events:none;
}
#loginView .auth-card h1{font-size:27px;letter-spacing:.01em;font-weight:750;color:#f9fdff;margin:0 0 8px}
#loginView .auth-card p{color:#b8cfdc;font-size:13px;line-height:1.52;margin:0 0 23px}
#loginView .auth-card label{font-size:13px;color:#cfe3ee;font-weight:650;margin:17px 0 8px}
#loginView #loginUsername,#loginView #loginPassword{
  display:block;width:100%;min-height:62px;padding:14px 14px 14px 65px;
  color:#f6fcff;background-color:rgba(25,47,66,.68);
  background-repeat:no-repeat;background-position:15px center;background-size:32px 32px;
  border:1.5px solid rgba(152,196,216,.9);border-radius:12px;
  outline:none;font-size:17px;line-height:1.5;letter-spacing:.025em;
  box-shadow:inset 0 1px 5px rgba(2,10,20,.18);
  transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease;
}
#loginView #loginUsername{background-image:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzRlMGVjIiBzdHJva2Utd2lkdGg9IjIuMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48Y2lyY2xlIGN4PSIxNiIgY3k9IjEwIiByPSI1LjYiIGZpbGw9IiNjNGUwZWMiIHN0cm9rZT0ibm9uZSIvPjxwYXRoIGQ9Ik01LjUgMjcuNWMuNC02LjQgNC40LTkuNCAxMC41LTkuNHMxMC4xIDMgMTAuNSA5LjQiIGZpbGw9IiNjNGUwZWMiIHN0cm9rZT0ibm9uZSIvPjwvZz48L3N2Zz4=')}
#loginView #loginPassword{background-image:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHJlY3QgeD0iNyIgeT0iMTMuNSIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE1IiByeD0iMyIgZmlsbD0iI2M0ZTBlYyIvPjxwYXRoIGQ9Ik0xMSAxNFY5LjRhNSA1IDAgMCAxIDEwIDBWMTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2M0ZTBlYyIgc3Ryb2tlLXdpZHRoPSIzIi8+PGNpcmNsZSBjeD0iMTYiIGN5PSIyMCIgcj0iMS44IiBmaWxsPSIjMTczOTRiIi8+PHJlY3QgeD0iMTUiIHk9IjIxIiB3aWR0aD0iMiIgaGVpZ2h0PSIzLjUiIHJ4PSIxIiBmaWxsPSIjMTczOTRiIi8+PC9zdmc+')}
#loginView #loginUsername:focus,#loginView #loginPassword:focus{
  background-color:rgba(30,58,79,.95);border-color:#25deef;
  box-shadow:0 0 0 3px rgba(18,219,242,.18),0 0 20px rgba(4,204,232,.12);
}
#loginView #loginUsername::placeholder,#loginView #loginPassword::placeholder{color:#a9c1ce;opacity:1}
#loginView #loginUsername:-webkit-autofill,#loginView #loginPassword:-webkit-autofill{
  -webkit-text-fill-color:#f3fbff!important;
  -webkit-box-shadow:0 0 0 100px #1a3549 inset!important;
  caret-color:#fff;
}
#loginView #loginActionButtons{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-top:25px!important;justify-content:flex-start!important}
#loginView #loginActionButtons .btn{
  min-width:118px;min-height:43px;border-radius:10px;padding:10px 18px;
  font-weight:700;font-size:13px;letter-spacing:.015em;
  background:rgba(27,52,71,.9);color:#eaf9ff;border:1px solid rgba(156,208,224,.8);
  box-shadow:inset 0 1px rgba(255,255,255,.09);
}
#loginView #loginActionButtons .btn.primary{
  border:1px solid #05daf1;background:linear-gradient(150deg,#00c2de,#0786af);
  color:#001d30;box-shadow:0 4px 18px rgba(0,197,226,.24);
}
#loginView #loginActionButtons .btn:hover{border-color:#38efff;filter:brightness(1.1)}
#loginView #loginActionButtons .btn:focus-visible,#loginView .link-button:focus-visible{outline:3px solid #47eaf7;outline-offset:3px}
#loginView #loginActionButtons .btn:disabled{cursor:wait;opacity:.58}
#loginView .message{background:rgba(0,41,55,.48);border:1px solid rgba(67,176,204,.6);color:#eaf9ff}
#loginView .message.error{background:rgba(84,17,30,.72);border-color:#f58c9b;color:#ffe5e7}
#loginView .message.warn{background:rgba(87,67,16,.68);border-color:#efc164;color:#fff0c6}
#loginView .link-button{color:#89ebff}
#loginView #resetPasswordBtn{margin-top:10px}
@media(max-width:560px){
 #loginView.auth-view{padding:85px 16px 72px}
 #loginView .auth-card{padding:29px 23px 34px;border-radius:20px}
 #loginView .auth-card:after{bottom:-28px;height:6px}
 #loginView #loginUsername,#loginView #loginPassword{min-height:56px;padding-left:57px;background-position:12px center;background-size:29px}
 #loginView #loginActionButtons .btn{min-width:104px}
}
@media(prefers-reduced-motion:reduce){#loginView #loginUsername,#loginView #loginPassword{transition:none}}
