*{box-sizing:border-box}body{margin:0;background:#f4f7f4;color:#233f32;font:14px/1.55 "Segoe UI",Arial,sans-serif}a{color:inherit;text-decoration:none}button,input,select{font:inherit}button,a{touch-action:manipulation}button{cursor:pointer}button:disabled{opacity:.55;cursor:default}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #84b697;outline-offset:3px}.shell{display:flex;min-height:100vh}aside{width:230px;position:fixed;inset:0 auto 0 0;padding:35px 23px;background:white;border-right:1px solid #e1e9e1;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:9px;font-size:29px;letter-spacing:-1px;font-weight:700}.brand b{display:grid;place-items:center;width:38px;height:38px;border-radius:10px;background:#2b6a47;color:white;font-size:24px}.brand span{color:#79a28a;margin-left:-6px}.caption{font-size:10px;letter-spacing:1.7px;font-weight:700;color:#819786;margin:25px 0 10px}nav{display:grid;gap:8px;margin-top:22px}nav a{padding:12px 10px;border-radius:7px;color:#6d8473}nav a:hover{background:#eef5ee;color:#2e6542}.profile{margin-top:auto;padding-top:25px;border-top:1px solid #e6ece5}.profile strong{font-size:13px}.profile small{display:block;color:#8c9c8f;margin:4px 0 14px}main{margin-left:230px;width:calc(100% - 230px);padding:35px 42px;max-width:1600px}h1{font-size:30px;letter-spacing:-.7px;font-weight:600;line-height:1.25;margin:10px 0 12px}h2{font-size:18px;font-weight:600;margin:0 0 13px}p{color:#7d9082}small,.muted{font-size:12px;color:#8e9e91}.page-heading,.section-heading{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:25px}.page-heading p{margin-bottom:0}.primary,.secondary{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:7px;border:1px solid #2f6b48;background:#2f6b48;color:white;padding:11px 16px;font-weight:600;font-size:13px;white-space:nowrap}.secondary{background:white;border-color:#dce5db;color:#506f58;font-weight:400}.full{width:100%}.link{color:#3c7a51;background:none;border:0;padding:0;text-decoration:underline;font-size:13px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin:26px 0}.stats article{border:1px solid #e0e8de;border-radius:11px;padding:22px;background:white}.stats article:nth-child(2){background:#eaf3e9}.stats span{font-size:12px;color:#849687}.stats strong{display:block;font-size:31px;font-weight:600;margin-top:15px}.stats small{font-size:14px;font-weight:400}.card{background:white;border:1px solid #dfe8dd;border-radius:10px;padding:25px;margin-bottom:24px}.narrow{max-width:650px}.filters{display:flex;align-items:flex-end;gap:14px;margin:20px 0}.grow{flex:1}label{display:block;font-size:12px;color:#597760;margin-bottom:7px}input:not([type=hidden]):not([type=checkbox]),select{display:block;width:100%;padding:10px 12px;border:1px solid #dbe5d9;background:white;color:#2e513b;border-radius:6px;margin-top:6px}input[type=checkbox]{margin:0 8px}.filters label{margin:0}.filters input,.filters select{font-size:13px}.table-scroll{overflow-x:auto;margin:0 -25px}table{width:100%;border-collapse:collapse;white-space:nowrap}th{font-size:10px;text-transform:uppercase;letter-spacing:.8px;text-align:left;background:#f7faf5;color:#8c9c8e;padding:13px 20px;border-block:1px solid #e7ede3}td{font-size:12px;color:#627d6a;padding:16px 20px;border-bottom:1px solid #edf1e9}td strong{color:#3d624b}td small{display:block;margin-top:4px;font-size:11px}.status{font-size:11px;padding:5px 8px;border-radius:5px;background:#f0f3ed}.status.pending{color:#a47c2e;background:#fbf3df}.status.approved{color:#4d805c;background:#eaf4e9}.status.returned{color:#ad765f;background:#f9ede7}.comment{white-space:normal;max-width:240px}.review input{min-width:185px;font-size:11px;padding:7px!important}.review>div{display:flex;gap:5px;margin-top:7px}.review button{font-size:10px;padding:5px 8px;background:#f1f4ed;border:1px solid #dfe7d9;border-radius:4px;color:#7b8d77}.review button.approve{color:#47734d}.empty{padding:45px;text-align:center;color:#94a18e}.pagination{display:flex;gap:20px;justify-content:flex-end;font-size:11px;padding-top:20px;color:#8a9c8d}.pagination>span:first-child{margin-right:auto}.summaries,.two-columns{display:grid;grid-template-columns:1fr 1fr;gap:24px}.summary-row{display:flex;justify-content:space-between;gap:20px;padding:14px 0;border-bottom:1px solid #edf1e9;font-size:13px}.person{padding:16px 0;border-bottom:1px solid #edf1e9}.person small{display:block;margin-top:5px}.notice{background:#e9f3e9;color:#5a7e60;padding:15px 20px;border-radius:7px;margin-bottom:22px;border:1px solid #d4e5d4}.notice.error,.errorlist{background:#fff1eb;color:#a36750}.errorlist{font-size:12px;padding:9px 13px;list-style:none;border-radius:5px}.helptext{font-size:11px;color:#92a08c;display:block;margin-top:7px}.card form>p{margin:0 0 20px}.card form ul{font-size:11px;color:#92a08c;padding-left:20px}.auth{margin:0;width:100%;max-width:none;min-height:100vh;display:grid;place-items:center;padding:30px}.auth .card{width:480px;max-width:100%;padding:36px}.auth h1{font-size:26px}.auth .brand{margin-bottom:35px}.auth .muted{margin-top:24px}footer{font-size:11px;color:#a0ae9c;padding:20px 0}.calendar-top{background:white;border-bottom:1px solid #e0e8de;display:flex;align-items:center;justify-content:space-between;padding:18px 4vw;gap:20px}.calendar-top>span{font-size:12px;color:#8fa18d}.calendar-main{margin:auto;padding:20px 4vw 45px;width:100%;max-width:1560px}.calendar-meta{display:flex;align-items:center;gap:20px;flex-wrap:wrap;margin:27px 0 22px}.calendar-meta>a{margin-left:auto}.calendar-meta>span{font-size:13px;color:#789476}.pill{background:#e5efe1;padding:7px 12px;border-radius:5px;color:#52774e}.calendar-card{border:1px solid #dde7d7;border-radius:10px;overflow:hidden;background:white}.calendar-card>h2{padding:22px;margin:0;text-transform:capitalize}.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.weekday{padding:12px 20px;background:#f8faf5;border-block:1px solid #e1e9da;font-size:12px;color:#8c9d84}.calendar-cell{min-height:120px;border-right:1px solid #e5ecdF;border-bottom:1px solid #e5ecdf;padding:0}.calendar-cell:nth-child(7n){border-right:0}.calendar-cell.blank,.calendar-cell.future{background:#f8faf5}.day-button{background:transparent;border:0;display:flex;flex-direction:column;gap:10px;align-items:stretch;justify-content:space-between;width:100%;height:100%;min-height:120px;text-align:left;color:#5b7d57;padding:15px 18px}.day-button>span{font-size:15px;font-weight:600;display:flex;align-items:center;justify-content:space-between}.day-button small{font-size:10px}.today .day-button>span{color:#236d40}.today .day-button>span>small{background:#e3edde;padding:2px 5px;border-radius:4px}.day-hint{color:#99ad8d}.hours-badge{font-size:22px;color:#47713c;font-weight:600}.calendar-cell.filled{background:#edf5e6}.day-button:hover:not(:disabled){box-shadow:inset 0 0 0 2px #91b486;background:#f0f7e9}.calendar-input{padding:0 12px 12px}.js .calendar-input{display:none}.js .day-hint{opacity:0}.js .day-button:hover .day-hint,.js .day-button:focus-visible .day-hint{opacity:1}.calendar-submit{position:sticky;bottom:10px;display:flex;justify-content:space-between;gap:20px;align-items:center;margin-top:22px;background:white;border:1px solid #dce6d5;border-radius:10px;padding:21px 25px;box-shadow:0 -5px 20px #2740200a}.calendar-submit>div{display:flex;gap:23px;flex-wrap:wrap;font-size:14px;color:#7e9476}.calendar-submit strong{color:#3d6337}.calendar-submit small{flex-basis:100%;font-size:11px}.calendar-submit .primary{padding:14px 20px}.calendar-cell .errorlist{white-space:normal;font-size:10px}.calendar-page dialog{border:1px solid #dfe7d8;border-radius:13px;width:430px;max-width:calc(100vw - 30px);padding:30px;color:#33572e}.calendar-page dialog::backdrop{background:#17371966;backdrop-filter:blur(3px)}.calendar-page dialog h2{text-transform:capitalize;font-size:21px;line-height:1.4}.calendar-page dialog form{position:relative}.close-dialog{position:absolute;right:-10px;top:-15px;font-size:25px;border:0;background:none;color:#8a9e80}.calendar-page dialog input{font-size:26px}.quick-hours{display:flex;gap:8px;margin:15px 0 22px}.quick-hours button{flex:1;padding:10px;border:1px solid #dce6d5;border-radius:6px;background:#f3f8ee;color:#65855b;font-size:12px}.remove-hours{display:block;margin:17px auto 0;border:0;background:none;color:#b17d64;font-size:12px}
@media(min-width:1600px){.day-button,.calendar-cell{min-height:140px}}
@media(max-width:1100px){aside{width:195px;padding:28px 15px}main{margin-left:195px;width:calc(100% - 195px);padding:25px}.filters{flex-wrap:wrap}.stats{gap:10px}.stats article{padding:16px}.page-heading{align-items:flex-start}.page-heading h1{font-size:25px}}
@media(max-width:750px){.shell{display:block}aside{position:static;width:100%;padding:18px;display:block;border-bottom:1px solid #e0e8de}.brand{font-size:25px}.brand b{width:32px;height:32px}aside .caption{display:none}nav{display:flex;flex-wrap:wrap;gap:5px;margin-top:15px}nav a{padding:5px 8px;font-size:12px}.profile{border:0;margin:10px 0 0;padding:10px 0 0;display:flex;align-items:center;gap:12px;flex-wrap:wrap}.profile small{margin:0}.profile form{margin-left:auto}main{margin:0;width:100%;padding:23px 16px}.page-heading{flex-direction:column;gap:14px}h1{font-size:25px}.stats{grid-template-columns:1fr 1fr}.stats strong{font-size:27px}.card{padding:20px}.table-scroll{margin:0 -20px}.summaries,.two-columns{grid-template-columns:1fr;gap:0}.filters>*{min-width:130px;flex:1}.section-heading{align-items:flex-start;gap:15px;flex-wrap:wrap}.calendar-top{padding:15px;flex-wrap:wrap}.calendar-top>span{display:none}.calendar-top strong{font-size:12px}.calendar-main{padding:15px 10px 30px}.calendar-meta{gap:12px}.calendar-meta>a{margin-left:0}.calendar-meta strong{font-size:13px}.weekday{padding:10px 5px;text-align:center}.day-button,.calendar-cell{min-height:85px}.day-button{padding:10px 6px;gap:5px}.day-button>span{font-size:13px}.day-button>span>small,.day-hint{display:none}.hours-badge{font-size:17px}.calendar-card>h2{padding:17px;font-size:18px}.calendar-submit{padding:15px;flex-direction:column;align-items:stretch;gap:15px}.calendar-submit>div{gap:15px;font-size:13px}.calendar-submit .primary{font-size:12px}.auth .card{padding:27px}}

.login-help{border-top:1px solid #e3eade;margin-top:25px;padding-top:12px}.login-address{display:inline-block;overflow-wrap:anywhere;font-weight:600}.notice p{margin:8px 0 10px}

.teacher-status-legend{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:5px 0 18px}.teacher-status-legend small{margin-left:auto;font-size:11px}.teacher-journal{width:100%}.teacher-journal th[scope=row]{position:sticky;left:0;z-index:1;background:#fff;font-size:13px;font-weight:600;color:#3d624b;text-transform:none;letter-spacing:0;min-width:125px;border-right:1px solid #e7ede3}.teacher-journal td{padding:18px 20px}.teacher-lessons{display:flex;align-items:center;gap:12px;white-space:nowrap;width:max-content;min-width:100%}.lesson-entry{display:inline-block;white-space:nowrap;font-size:13px;padding:5px 7px;border-radius:5px;line-height:1.6}.lesson-entry.pending{color:#936f2c;background:#fcf5e6}.lesson-entry.approved{color:#45724f;background:#edf5e9}.lesson-entry.returned{color:#a66c54;background:#faeee7;text-decoration:underline;text-underline-offset:3px}.lesson-separator{color:#a3afa0;font-size:13px}.teacher-journal .empty{white-space:normal}@media(max-width:750px){.teacher-status-legend small{margin-left:0;flex-basis:100%}.teacher-journal th[scope=row]{min-width:100px;padding:15px 12px}.teacher-journal td{padding:15px 12px}.teacher-lessons{gap:8px}.lesson-entry{font-size:12px}}

.month-picker{display:inline-flex;align-items:center;gap:8px;width:100%}.month-picker select{min-width:140px;flex:1}.month-picker input[type=number]{width:105px;flex:0 0 105px}.filter-label{display:block;font-size:12px;color:#597760;margin-bottom:7px}.filter-month{min-width:260px}.lesson-entry .lesson-hours{font-size:inherit;font-weight:700;line-height:inherit;color:var(--journal-accent,#2d6151);vertical-align:baseline}.calendar-page dialog h2{text-transform:none}@media(max-width:750px){.lesson-entry .lesson-hours{font-size:inherit}.filter-month{min-width:245px}}

.teacher-journal .group-subject{color:var(--journal-accent,#2d6151);font-weight:600;font-size:inherit;text-transform:none;letter-spacing:normal}.teacher-journal th[scope=row]{white-space:nowrap}@media(max-width:750px){.teacher-journal th[scope=row]{position:static}}

.card input[name="subject"]::placeholder{color:#9aa79d;opacity:1}.vacancy-option{margin-top:-5px!important}.vacancy-option label{display:flex;align-items:center;gap:5px;font-size:12px}.vacancy-option input.vacancy-checkbox{width:14px;height:14px;margin:0 5px 0 0;accent-color:#2f6b48}

:root{--journal-accent:#2d6151;--pending-fill:#ffdf86;--pending-line:#e8bc46;--pending-text:#79540a;--approved-fill:#b9e5c5;--approved-line:#83c99a;--approved-text:#1a6237;--vacancy-text:#c23432}
.lesson-entry.pending,.status.pending{background:var(--pending-fill);color:var(--pending-text);border:1px solid var(--pending-line)}.lesson-entry.approved,.status.approved{background:var(--approved-fill);color:var(--approved-text);border:1px solid var(--approved-line)}.lesson-entry.returned,.status.returned{background:#fbe4dc;color:#a44f3c;border:1px solid #ebbdad}.lesson-entry{border:1px solid transparent}.lesson-entry .lesson-hours,.teacher-journal .group-subject{color:var(--journal-accent);font-size:inherit;font-weight:700;line-height:inherit}.teacher-journal .group-subject{display:inline-block;background:#e8f2ed;border:1px solid #c5dace;border-radius:5px;padding:3px 7px}.subject-stack{display:inline-flex;flex-direction:column;align-items:flex-start;vertical-align:middle;gap:4px;margin-left:6px}.vacancy-mark,.teacher-journal .vacancy-mark{display:block;color:var(--vacancy-text);font-size:11px;font-weight:650;line-height:1.3;letter-spacing:0;text-transform:none;white-space:nowrap}.stats article:nth-child(2){background:#daf0df;border-color:#abd5b6}.stats article:nth-child(3){background:#fff1be;border-color:#eed18a}.teacher-group-row .group-name{vertical-align:middle}

.stats{grid-template-columns:repeat(5,minmax(0,1fr))}.stats article.stat-hours{background:#e8f2ed;border-color:#c5dace}.stats article.stat-vacancy{background:#fff0e8;border-color:#ebbdad}.stats article.stat-vacancy strong{color:#a84937}.stats article.stat-approved{background:#daf0df;border-color:#abd5b6}.stats article.stat-pending{background:#fff1be;border-color:#eed18a}.stats article.stat-groups{background:#fff;border-color:#e0e8de}.stats-total-note{font-size:12px;color:#82927f;margin:-12px 0 25px}.stats-total-note strong{color:var(--journal-accent,#2d6151);font-weight:650}@media(max-width:1100px){.stats{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:750px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.stats article.stat-groups{grid-column:span 2}}

.group-subject .vacancy-inline{display:inline;font:inherit;color:var(--vacancy-text,#c23432);white-space:nowrap}.staff-subject .group-subject{display:inline-block;color:var(--journal-accent,#2d6151);font-size:inherit;font-weight:700;line-height:inherit;background:#e8f2ed;border:1px solid #c5dace;border-radius:5px;padding:3px 7px}.staff-subject .group-subject .vacancy-inline{font:inherit;color:var(--vacancy-text,#c23432)}
