/* Schulpilot RFB v5 */
:root{--bg0:#08090f;--bg1:#0c0f1a;--bg2:#131728;--bg3:#171c30;--bg4:#1d2340;--bg5:#0f1222;--acc:#00d4aa;--acc-d:#00a88450;--acc-g:#00d4aa25;--warn:#f0a030;--warn-d:#f0a03020;--err:#f0503c;--err-d:#f0503c18;--info:#5090f0;--info-d:#5090f020;--exam:#c060f0;--exam-d:#c060f018;--t1:#d8dce8;--t2:#8890a8;--t3:#505870;--brd:#1e2440;--brd2:#2a3050;--r:10px;--rs:6px;--rl:16px;--f:'DM Sans',sans-serif;--fh:'Outfit',sans-serif;--fm:'JetBrains Mono',monospace;--sb:220px;--tb:56px;--mn:64px;--tr:.2s cubic-bezier(.4,0,.2,1)}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{font-size:15px;-webkit-text-size-adjust:100%}
body{font-family:var(--f);background:var(--bg0);color:var(--t1);overflow-x:hidden;min-height:100dvh;line-height:1.55}
h1,h2,h3,h4{font-family:var(--fh);font-weight:600;letter-spacing:-.02em}
input,button,select{font-family:inherit;font-size:inherit}
.screen{display:none}.screen.active{display:block}.view{display:none}.view.active{display:block}

/* LOGIN */
.login-wrapper{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(ellipse 500px 350px at 50% 40%,var(--acc-g),transparent),var(--bg0)}
.login-card{width:100%;max-width:380px;background:var(--bg3);border:1px solid var(--brd);border-radius:var(--rl);padding:36px 28px 28px;text-align:center;animation:fadeUp .4s ease}
@keyframes fadeUp{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
.login-logo img{width:56px;height:56px;border-radius:var(--rs);margin-bottom:14px;object-fit:contain}
.login-title{font-size:1.7rem;font-weight:700;margin-bottom:2px}
.login-sub{font-family:var(--fm);font-size:.7rem;color:var(--acc);letter-spacing:.15em;text-transform:uppercase;margin-bottom:28px}
.login-form{text-align:left}
.input-group{margin-bottom:14px}
.input-group label{display:block;font-size:.78rem;font-weight:500;color:var(--t2);margin-bottom:5px}
.input-group input,.modal-box input{width:100%;padding:11px 13px;background:var(--bg5);border:1px solid var(--brd);border-radius:var(--rs);color:var(--t1);outline:none;transition:border var(--tr)}
.input-group input:focus,.modal-box input:focus{border-color:var(--acc);box-shadow:0 0 0 3px var(--acc-d)}
.input-group input::placeholder,.modal-box input::placeholder{color:var(--t3)}
.login-error{color:var(--err);font-size:.8rem;min-height:18px;margin-bottom:6px;text-align:center}
.btn-primary{width:100%;padding:12px;background:var(--acc);color:var(--bg0);border:none;border-radius:var(--rs);font-weight:600;font-size:.95rem;cursor:pointer;transition:all var(--tr);position:relative;overflow:hidden}
.btn-primary:hover{filter:brightness(1.1)}.btn-primary:active{transform:scale(.98)}
.btn-primary.loading .btn-text{opacity:0}.btn-primary.loading .btn-loader{display:block}
.btn-loader{display:none;position:absolute;inset:0;margin:auto;width:18px;height:18px;border:2px solid transparent;border-top-color:var(--bg0);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.login-footer{margin-top:20px;font-size:.7rem;color:var(--t3)}
.btn-sm{padding:7px 14px;background:var(--bg2);border:1px solid var(--brd);border-radius:var(--rs);color:var(--t2);cursor:pointer;font-size:.78rem;transition:all var(--tr)}
.btn-sm:hover{background:var(--bg4);color:var(--t1)}

/* TOPBAR */
.topbar{position:fixed;top:0;left:0;right:0;height:var(--tb);background:var(--bg1);border-bottom:1px solid var(--brd);display:flex;align-items:center;justify-content:space-between;padding:0 20px;z-index:100;backdrop-filter:blur(12px)}
.topbar-left{display:flex;align-items:center;gap:10px}.topbar-logo{width:26px;height:26px;border-radius:5px;object-fit:contain}
.topbar-brand{display:flex;align-items:baseline;gap:6px}.topbar-name{font-family:var(--fh);font-weight:600;font-size:1rem}.topbar-rfb{font-family:var(--fm);font-size:.62rem;color:var(--acc);background:var(--acc-d);padding:2px 6px;border-radius:4px;letter-spacing:.1em}
.topbar-right{display:flex;align-items:center;gap:7px}
.topbar-status{display:flex;align-items:center;gap:5px;font-family:var(--fm);font-size:.72rem;color:var(--t2);padding:4px 10px;background:var(--bg2);border-radius:18px;border:1px solid var(--brd)}
.pulse-dot{width:6px;height:6px;background:var(--acc);border-radius:50%;animation:pulse 2s ease infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
.topbar-btn{width:34px;height:34px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--brd);border-radius:var(--rs);color:var(--t2);cursor:pointer;transition:all var(--tr)}
.topbar-btn:hover{color:var(--t1);background:var(--bg4)}

/* SIDEBAR */
.sidebar{position:fixed;top:var(--tb);left:0;width:var(--sb);height:calc(100dvh - var(--tb));background:var(--bg1);border-right:1px solid var(--brd);padding:14px 10px;display:flex;flex-direction:column;gap:3px;z-index:90;overflow-y:auto}
.nav-item{display:flex;align-items:center;gap:11px;padding:11px 13px;background:transparent;border:none;border-radius:var(--r);color:var(--t2);cursor:pointer;transition:all var(--tr);font-size:.88rem;font-weight:500;text-align:left;width:100%}
.nav-item:hover{background:var(--bg4);color:var(--t1)}
.nav-item.active{background:var(--acc-d);color:var(--acc)}
.nav-item svg{flex-shrink:0}

/* CONTENT */
.content{margin-top:var(--tb);margin-left:var(--sb);padding:22px;min-height:calc(100dvh - var(--tb))}
.view-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;flex-wrap:wrap;gap:10px}
.view-header h2{font-size:1.3rem}

/* DATE NAV */
.date-nav{display:flex;align-items:center;gap:5px}
.date-btn{min-width:34px;height:34px;display:flex;align-items:center;justify-content:center;background:var(--bg2);border:1px solid var(--brd);border-radius:var(--rs);color:var(--t2);cursor:pointer;transition:all var(--tr);font-size:1.1rem;font-weight:600;padding:0 4px}
.date-btn:hover{background:var(--bg4);color:var(--t1)}
.today-btn{width:auto;padding:0 13px;font-size:.78rem;font-weight:500}
.date-display{text-align:center;min-width:120px}
.date-label{display:block;font-size:.68rem;color:var(--t3);text-transform:uppercase;letter-spacing:.08em}
.date-value{display:block;font-weight:500;font-size:.88rem}

/* SEARCH */
.search-bar{display:flex;align-items:center;gap:7px;background:var(--bg5);border:1px solid var(--brd);border-radius:var(--rs);padding:8px 12px;min-width:180px;transition:border var(--tr)}
.search-bar:focus-within{border-color:var(--acc)}
.search-bar svg{color:var(--t3);flex-shrink:0}
.search-bar input{flex:1;background:none;border:none;color:var(--t1);outline:none;font-size:.85rem}
.search-bar input::placeholder{color:var(--t3)}

/* STATES */
.loading-state,.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:50px 20px;color:var(--t3);gap:10px}
.spinner{width:28px;height:28px;border:2.5px solid var(--brd);border-top-color:var(--acc);border-radius:50%;animation:spin .8s linear infinite}
.no-school{text-align:center;padding:40px 20px;color:var(--t3)}.no-school-icon{font-size:2.5rem;margin-bottom:10px;opacity:.3}

/* LESSON CARDS */
.lesson-grid{display:flex;flex-direction:column;gap:7px}
.lesson-card{display:grid;grid-template-columns:62px 1fr;gap:12px;padding:13px 15px;background:var(--bg3);border:1px solid var(--brd);border-radius:var(--r);transition:all var(--tr);position:relative;overflow:hidden}
.lesson-card::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--acc);border-radius:0 3px 3px 0}
.lesson-card.cancelled::before{background:var(--err)}.lesson-card.substituted::before{background:var(--warn)}.lesson-card.exam::before{background:var(--exam)}
.lesson-card.cancelled{background:var(--err-d);border-color:rgba(240,80,60,.12)}.lesson-card.substituted{background:var(--warn-d);border-color:rgba(240,160,48,.12)}.lesson-card.exam{background:var(--exam-d);border-color:rgba(192,96,240,.12)}
.lesson-time{font-family:var(--fm);font-size:.78rem;color:var(--t2);text-align:center;line-height:1.4}
.lesson-time .period{display:block;font-size:.65rem;color:var(--t3);margin-bottom:1px}
.lesson-body{min-width:0}
.lesson-subject{font-weight:600;font-size:.95rem;margin-bottom:2px;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.lesson-subject .cancelled-text{text-decoration:line-through;opacity:.45}
.lesson-meta{font-size:.78rem;color:var(--t2);display:flex;flex-wrap:wrap;gap:3px 10px}
.lesson-badge{padding:2px 9px;border-radius:16px;font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
.badge-cancelled{background:var(--err-d);color:var(--err)}.badge-subst{background:var(--warn-d);color:var(--warn)}.badge-exam{background:var(--exam-d);color:var(--exam)}.badge-test{background:var(--info-d);color:var(--info)}

/* ALL PLANS */
.ap-controls{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.ap-tabs{display:flex;gap:3px}
.ap-tab{padding:8px 18px;background:var(--bg2);border:1px solid var(--brd);border-radius:var(--rs);color:var(--t2);cursor:pointer;font-weight:500;font-size:.85rem;transition:all var(--tr)}
.ap-tab:hover{background:var(--bg4)}.ap-tab.active{background:var(--acc-d);color:var(--acc);border-color:var(--acc)}
.ap-chips{display:flex;flex-wrap:wrap;gap:5px;max-height:160px;overflow-y:auto;padding:2px 0;margin-bottom:4px}
.chip{padding:5px 12px;background:var(--bg2);border:1px solid var(--brd);border-radius:16px;color:var(--t2);cursor:pointer;font-size:.78rem;font-weight:500;transition:all var(--tr);white-space:nowrap}
.chip:hover{background:var(--bg4);color:var(--t1)}.chip.active{background:var(--acc-d);color:var(--acc);border-color:var(--acc)}

/* ISLANDS */
.island-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.island-panel{background:var(--bg3);border:1px solid var(--brd);border-radius:var(--rl);padding:18px}
.island-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--brd)}
.island-name{font-family:var(--fh);font-size:1.05rem;font-weight:600}
.island-classes{font-size:.72rem;color:var(--t3);font-family:var(--fm)}
.island-hour{display:flex;align-items:center;padding:8px 10px;border-radius:var(--rs);margin-bottom:4px;transition:background var(--tr)}
.island-hour:hover{background:var(--bg4)}
.island-hour-time{font-family:var(--fm);font-size:.74rem;color:var(--t2);min-width:72px;line-height:1.3}
.island-hour-info{flex:1;margin:0 10px}
.island-hour-reason{font-size:.75rem;color:var(--t2)}
.island-hour-classes{font-size:.68rem;color:var(--t3);font-family:var(--fm)}
.island-count{font-family:var(--fm);font-weight:600;font-size:.95rem;min-width:42px;text-align:center;padding:3px 7px;border-radius:var(--rs)}
.count-low{color:var(--acc);background:var(--acc-d)}.count-med{color:var(--warn);background:var(--warn-d)}.count-high{color:var(--err);background:var(--err-d)}
.island-bar{height:3px;border-radius:2px;background:var(--brd);margin-top:3px;overflow:hidden}.island-bar-fill{height:100%;border-radius:2px;transition:width .4s ease}

/* TEACHERS */
.teacher-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:7px}
.teacher-card{padding:12px 14px;background:var(--bg3);border:1px solid var(--brd);border-radius:var(--r);cursor:pointer;transition:all var(--tr);display:flex;align-items:center;gap:10px}
.teacher-card:hover{background:var(--bg4);transform:translateY(-1px)}
.teacher-avatar{width:32px;height:32px;border-radius:50%;background:var(--bg2);border:1px solid var(--brd);display:flex;align-items:center;justify-content:center;font-family:var(--fm);font-size:.68rem;font-weight:600;color:var(--t2);flex-shrink:0}
.teacher-card-info{min-width:0}.teacher-card-name{font-weight:600;font-size:.85rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.teacher-card-status{font-size:.72rem;margin-top:1px}
.status-teaching{color:var(--acc)}.status-free{color:var(--t3)}.status-absent{color:var(--err)}
.detail-back{display:inline-flex;align-items:center;gap:5px;background:none;border:none;color:var(--acc);cursor:pointer;font-size:.82rem;font-weight:500;margin-bottom:14px;padding:4px 0}
.detail-teacher-name{font-family:var(--fh);font-size:1.2rem;font-weight:600;margin-bottom:3px}
.detail-teacher-status{font-size:.82rem;margin-bottom:14px;padding:7px 11px;border-radius:var(--rs);display:inline-block}
.detail-lesson{display:flex;align-items:center;gap:12px;padding:9px 11px;border-radius:var(--rs);margin-bottom:3px;border-left:3px solid var(--brd)}
.detail-lesson.current{background:var(--acc-d);border-left-color:var(--acc)}.detail-lesson.cancelled{opacity:.45;border-left-color:var(--err)}
.detail-lesson-time{font-family:var(--fm);font-size:.74rem;color:var(--t2);min-width:64px}
.detail-lesson-subject{font-weight:600;font-size:.85rem}.detail-lesson-class{font-size:.74rem;color:var(--t2)}

/* SETTINGS — using same card style as lesson cards */
.settings-wrap{max-width:600px;display:flex;flex-direction:column;gap:12px}
.s-card{background:var(--bg3);border:1px solid var(--brd);border-radius:var(--r);padding:16px 18px}
.s-title{font-family:var(--fh);font-size:.9rem;font-weight:600;color:var(--t2);margin-bottom:10px;text-transform:uppercase;letter-spacing:.06em;font-size:.72rem}
.s-row{display:flex;align-items:center;justify-content:space-between;padding:9px 0;border-bottom:1px solid var(--brd)}
.s-row:last-child{border-bottom:none}
.s-row>span:first-child{font-size:.85rem}
.s-val{font-family:var(--fm);font-size:.78rem;color:var(--t2)}
.s-row select{padding:5px 10px;background:var(--bg5);border:1px solid var(--brd);border-radius:var(--rs);color:var(--t1);outline:none;font-size:.82rem}
.s-row select:focus{border-color:var(--acc)}
.tog{position:relative;display:inline-block;width:40px;height:22px;cursor:pointer}
.tog input{opacity:0;width:0;height:0}
.tog-s{position:absolute;inset:0;background:var(--bg5);border:1px solid var(--brd);border-radius:22px;transition:all var(--tr)}
.tog-s::before{content:'';position:absolute;left:3px;top:3px;width:14px;height:14px;background:var(--t3);border-radius:50%;transition:all var(--tr)}
.tog input:checked+.tog-s{background:var(--acc-d);border-color:var(--acc)}
.tog input:checked+.tog-s::before{transform:translateX(18px);background:var(--acc)}
.btn-debug{display:inline-flex;align-items:center;gap:7px;padding:10px 18px;background:var(--bg3);border:1px solid var(--brd);border-radius:var(--r);color:var(--t3);cursor:pointer;font-size:.82rem;transition:all var(--tr);margin-top:8px}
.btn-debug:hover{color:var(--t1);border-color:var(--brd2)}

/* DEBUG PANEL */
.debug-panel{margin-top:16px}
.debug-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;flex-wrap:wrap;gap:8px}
.debug-header h3{font-size:1rem}
.debug-actions{display:flex;gap:5px;flex-wrap:wrap}
.debug-pre{background:var(--bg3);border:1px solid var(--brd);border-radius:var(--r);padding:14px;font-family:var(--fm);font-size:.72rem;color:var(--t2);line-height:1.6;margin-bottom:10px;white-space:pre-wrap;word-break:break-all;overflow:hidden}
.debug-log-scroll{max-height:450px;overflow-y:auto}
.log-err{color:var(--err)}.log-warn{color:var(--warn)}.log-info{color:var(--t2)}.log-rpc{color:var(--info)}.log-rest{color:var(--acc)}

/* MODAL — fixed position, highest z-index */
.modal-bg{position:fixed;inset:0;background:rgba(0,0,0,.65);display:flex;align-items:center;justify-content:center;z-index:9999;backdrop-filter:blur(4px)}
.modal-box{background:var(--bg3);border:1px solid var(--brd);border-radius:var(--rl);padding:26px;max-width:340px;width:90%}
.modal-box h3{font-size:1.05rem;margin-bottom:6px}.modal-box p{font-size:.82rem;color:var(--t2);margin-bottom:12px}
.modal-btns{display:flex;gap:8px;margin-top:14px}.modal-btns .btn-primary{flex:1}

/* CHANGES */
.changes-section{margin-top:20px;padding-top:16px;border-top:1px solid var(--brd)}
.changes-section h3{font-size:.9rem;color:var(--t2);margin-bottom:10px}
.change-item{display:flex;gap:10px;padding:8px;font-size:.78rem;color:var(--t2);border-left:2px solid var(--brd);margin-bottom:4px;margin-left:6px}
.change-time{font-family:var(--fm);font-size:.68rem;color:var(--t3);min-width:90px}

/* TOAST */
.toast-wrap{position:fixed;bottom:80px;right:16px;display:flex;flex-direction:column-reverse;gap:6px;z-index:8000;pointer-events:none}
.toast{padding:10px 16px;background:var(--bg3);border:1px solid var(--brd);border-radius:var(--r);font-size:.82rem;box-shadow:0 6px 20px rgba(0,0,0,.35);animation:toastIn .25s ease,toastOut .25s ease 3.7s forwards;pointer-events:auto;max-width:320px;border-left:3px solid var(--acc)}
.toast.error{border-left-color:var(--err)}.toast.warning{border-left-color:var(--warn)}
@keyframes toastIn{from{opacity:0;transform:translateX(24px)}}@keyframes toastOut{to{opacity:0;transform:translateX(24px)}}

/* MOBILE */
@media(max-width:768px){
    .sidebar{top:auto;bottom:0;left:0;right:0;width:100%;height:var(--mn);flex-direction:row;justify-content:space-around;padding:2px 2px;border-right:none;border-top:1px solid var(--brd);overflow-x:auto;overflow-y:hidden}
    .nav-item{flex-direction:column;gap:1px;padding:4px 6px;font-size:.55rem;flex:0 0 auto;min-width:50px;justify-content:center;text-align:center}
    .nav-item svg{width:17px;height:17px}
    .content{margin-left:0;padding:14px 10px;padding-bottom:calc(var(--mn)+14px)}
    .view-header{flex-direction:column;align-items:flex-start}.view-header h2{font-size:1.1rem}
    .date-nav{width:100%;justify-content:space-between}
    .lesson-card{grid-template-columns:52px 1fr}
    .island-grid{grid-template-columns:1fr}
    .teacher-grid{grid-template-columns:1fr}
    .search-bar{width:100%;min-width:unset}
    .toast-wrap{bottom:calc(var(--mn)+10px);left:10px;right:10px}.toast{max-width:none}
    .ap-controls{flex-direction:column;align-items:stretch}.ap-chips{max-height:100px}
    .settings-wrap{max-width:100%}
}
@media(min-width:769px) and (max-width:1024px){:root{--sb:68px}.nav-item span{display:none}.nav-item{justify-content:center;padding:12px}}
::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--brd);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--brd2)}
.fade-in{animation:fadeUp .25s ease}
