:root{--brand: #14558a;--brand-600: #0f4674;--brand-700: #0b3659;--brand-050: #eef6fc;--brand-100: #d9eaf7;--accent: #1f9d63;--ink: #17222e;--ink-2: #46586a;--ink-3: #7a8a9a;--line: #dfe6ee;--line-2: #eef2f7;--bg: #f4f7fa;--card: #ffffff;--danger: #c9342f;--danger-bg: #fdeceb;--warn: #a96a12;--warn-bg: #fdf4e3;--success: #1b7f4b;--success-bg: #e8f7ee;--radius: 14px;--shadow-sm: 0 1px 2px rgba(16, 32, 48, .06);--shadow: 0 12px 32px rgba(16, 32, 48, .1);--sidebar: #0c2c4a;--sidebar-2: #103f68}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:Segoe UI,system-ui,-apple-system,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}h1,h2,h3,h4,p{margin:0}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}img{max-width:100%}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.icon{flex-shrink:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 16px;border-radius:10px;border:1px solid transparent;background:#fff;color:var(--ink);font-weight:600;font-size:14px;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .05s ease,box-shadow .15s ease;white-space:nowrap}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--brand);color:#fff;box-shadow:0 6px 16px #14558a3d}.btn-primary:hover:not(:disabled){background:var(--brand-600)}.btn-ghost{background:#fff;border-color:var(--line);color:var(--ink);box-shadow:var(--shadow-sm)}.btn-ghost:hover:not(:disabled){background:var(--line-2)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:#a92a26}.btn-sm{padding:7px 12px;font-size:13px;border-radius:8px}.btn-block{width:100%}.danger-text{color:var(--danger)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px;border:1px solid transparent;background:transparent;color:var(--ink-2);cursor:pointer;transition:background .15s ease,color .15s ease}.icon-btn:hover:not(:disabled){background:var(--line-2);color:var(--brand)}.icon-btn.danger:hover:not(:disabled){background:var(--danger-bg);color:var(--danger)}.icon-btn:disabled{opacity:.35;cursor:not-allowed}.field{display:flex;flex-direction:column;gap:6px;min-width:0}.field-label{font-size:12.5px;font-weight:700;color:var(--ink-2);letter-spacing:.01em}.field-hint{font-size:12px;color:var(--ink-3)}input,select,textarea{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:9px;background:#fff;outline:none;transition:border-color .15s ease,box-shadow .15s ease}input:focus,select:focus,textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px #14558a1f}input:disabled,select:disabled{background:#f5f7fa;color:var(--ink-3)}textarea{resize:vertical}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%237a8a9a' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center;padding-right:32px}.form-stack{display:flex;flex-direction:column;gap:14px}.form-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}.check{display:flex;align-items:center;gap:9px;font-size:14px;color:var(--ink-2);cursor:pointer}.check input{width:17px;height:17px;accent-color:var(--brand);flex-shrink:0}.check-row{display:flex;flex-wrap:wrap;gap:18px}.password-input{position:relative}.password-input input{padding-right:44px}.password-toggle{position:absolute;right:4px;top:50%;transform:translateY(-50%)}.alert{display:flex;align-items:flex-start;gap:8px;padding:11px 14px;border-radius:10px;font-size:13.5px;line-height:1.45}.alert-error{background:var(--danger-bg);color:var(--danger);border:1px solid #f5c9c6}.alert-info{background:var(--brand-050);color:var(--brand-600);border:1px solid var(--brand-100)}.hint-line{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-3)}.app-shell{display:flex;min-height:100vh}.sidebar{position:sticky;top:0;align-self:flex-start;width:272px;height:100vh;flex-shrink:0;background:linear-gradient(180deg,var(--sidebar) 0%,var(--sidebar-2) 100%);color:#fff;display:flex;flex-direction:column;padding:22px 18px;z-index:40}.sidebar-brand{display:flex;align-items:center;gap:12px;padding:4px 6px 22px;border-bottom:1px solid rgba(255,255,255,.12)}.logo-img{object-fit:contain}.logo-img-sidebar{width:46px;height:46px;background:#fff;border-radius:12px;padding:5px;flex-shrink:0}.logo-img-login{width:118px;height:118px;background:#fff;border-radius:24px;padding:12px;box-shadow:0 18px 40px #00000038}.logo-img-print{width:100%;height:100%;object-fit:contain}.logo-img-settings{width:160px;height:160px;object-fit:contain}.logo-fallback{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;background:#ffffff1f;border-radius:12px;flex-shrink:0}.logo-fallback-sidebar{width:46px;height:46px;padding:6px}.logo-fallback-login{width:118px;height:118px;padding:14px;background:#ffffff24;border-radius:24px}.logo-fallback-print{width:100%;height:100%;color:#14558a;background:#fff}.logo-fallback-settings{width:160px;height:160px;color:var(--brand);background:var(--brand-050);border-radius:16px}.logo-fallback-text{font-size:9px;font-weight:800;letter-spacing:.08em;margin-top:2px}.brand-text{display:flex;flex-direction:column;min-width:0}.brand-text strong{font-size:14.5px;line-height:1.25}.brand-text span{font-size:11.5px;color:#ffffffad;margin-top:2px}.sidebar-nav{display:flex;flex-direction:column;gap:4px;padding:18px 0;flex:1}.nav-link{display:flex;align-items:center;gap:11px;padding:11px 13px;border-radius:9px;color:#ffffffc2;font-size:14px;font-weight:500;transition:background .15s ease,color .15s ease}.nav-link:hover{background:#ffffff17;color:#fff}.nav-link.active{background:#fff;color:var(--brand-700);font-weight:700;box-shadow:0 6px 18px #0000002e}.sidebar-footer{border-top:1px solid rgba(255,255,255,.12);padding-top:14px;display:flex;flex-direction:column;gap:10px}.user-chip{display:flex;align-items:center;gap:10px}.avatar{width:38px;height:38px;border-radius:50%;background:#ffffff29;border:1px solid rgba(255,255,255,.24);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:700;flex-shrink:0}.avatar-sm{width:32px;height:32px;font-size:11.5px;background:var(--brand-050);border-color:var(--brand-100);color:var(--brand)}.user-meta{display:flex;flex-direction:column;min-width:0}.user-meta strong{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-meta span{font-size:11.5px;color:#ffffff9e}.sidebar-actions{display:flex;gap:6px}.nav-mini{display:inline-flex;align-items:center;gap:6px;padding:7px 9px;border-radius:7px;background:#ffffff12;border:1px solid rgba(255,255,255,.1);color:#fffc;font-size:12px;cursor:pointer;flex:1;justify-content:center}.nav-mini:hover{background:#ffffff24;color:#fff}.main-column{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{display:none}.content{padding:30px 34px 60px;width:100%;max-width:1480px;margin:0 auto}.nav-scrim{display:none}.page{display:flex;flex-direction:column;gap:20px;animation:fadeUp .25s ease}@keyframes fadeUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;flex-wrap:wrap}.eyebrow{font-size:11.5px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--brand);margin-bottom:4px}.page-head h1{font-size:27px;letter-spacing:-.02em;line-height:1.15}.page-sub{color:var(--ink-2);font-size:14px;margin-top:6px;max-width:780px}.head-actions{display:flex;gap:10px;flex-wrap:wrap}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:22px}.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px;flex-wrap:wrap}.card-head h2{font-size:17px;letter-spacing:-.01em}.card-sub{color:var(--ink-2);font-size:13px;margin-top:4px;max-width:640px}.filter-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px 12px;box-shadow:var(--shadow-sm)}.filter-bar>select{width:auto;min-width:170px}.search-box{display:flex;align-items:center;gap:8px;flex:1;min-width:220px;padding:0 10px;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink-3)}.search-box:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px #14558a1f}.search-box input{border:0;box-shadow:none;padding:9px 0;background:transparent}.search-box input:focus{box-shadow:none;border:0}.search-box-sm{min-width:0;margin:2px 0 6px}.result-count{font-size:12.5px;color:var(--ink-3);padding-right:4px;white-space:nowrap}.table-card{padding:0;overflow:hidden}.table-wrap{overflow-x:auto}.data-table{width:100%;border-collapse:collapse;font-size:14px}.data-table thead th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);font-weight:800;padding:14px 16px;background:#f8fafc;border-bottom:1px solid var(--line);white-space:nowrap}.data-table tbody td{padding:13px 16px;border-bottom:1px solid var(--line-2);vertical-align:middle}.data-table tbody tr:last-child td{border-bottom:0}.data-table tbody tr:hover{background:#fbfcfe}.data-table .num{text-align:right;white-space:nowrap}.actions-col{text-align:right;width:120px}.row-title{display:block;font-weight:700;color:var(--ink);font-size:14px}a.row-title:hover{color:var(--brand)}.row-sub{display:block;font-size:12px;color:var(--ink-3);margin-top:2px}.cell-soft{color:var(--ink-2);font-size:13px}.row-actions{display:flex;gap:2px;justify-content:flex-end}.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;font-size:11.5px;font-weight:700;letter-spacing:.01em;white-space:nowrap}.badge-neutral{background:#eef2f7;color:#5b6b7c}.badge-success{background:var(--success-bg);color:var(--success)}.badge-danger{background:#fdeceb;color:var(--danger)}.badge-warning{background:var(--warn-bg);color:var(--warn)}.badge-brand{background:var(--brand-050);color:var(--brand-600)}.badge-info{background:#e9f2fb;color:var(--brand)}.empty-state{background:var(--card);border:1px dashed #cbd7e3;border-radius:var(--radius);padding:54px 24px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:10px}.empty-icon{width:52px;height:52px;border-radius:14px;background:var(--brand-050);color:var(--brand);display:flex;align-items:center;justify-content:center;margin-bottom:4px}.empty-state h3{font-size:17px}.empty-state p{color:var(--ink-2);font-size:13.5px;max-width:440px}.spinner-wrap{display:flex;align-items:center;justify-content:center;gap:12px;padding:60px 20px;color:var(--ink-3);font-size:13.5px}.spinner{width:22px;height:22px;border-radius:50%;border:2.5px solid var(--brand-100);border-top-color:var(--brand);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.boot-screen{min-height:100vh;display:flex;align-items:center;justify-content:center}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0c1e3085;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:flex-start;justify-content:center;padding:42px 16px;z-index:100;overflow-y:auto;animation:fadeIn .14s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal{width:100%;max-width:620px;background:#fff;border-radius:16px;box-shadow:0 30px 80px #08182857;display:flex;flex-direction:column;animation:pop .18s ease}.modal-sm{max-width:460px}.modal-lg{max-width:820px}@keyframes pop{0%{opacity:0;transform:translateY(10px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:20px 22px 14px;border-bottom:1px solid var(--line-2)}.modal-head h2{font-size:19px;letter-spacing:-.01em}.modal-subtitle{color:var(--ink-2);font-size:13px;margin-top:4px;max-width:500px}.modal-body{padding:20px 22px}.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:14px 22px;border-top:1px solid var(--line-2);background:#fbfcfe;border-radius:0 0 16px 16px}.confirm-text{color:var(--ink-2);font-size:14px}.toast-stack{position:fixed;right:20px;bottom:20px;display:flex;flex-direction:column;gap:8px;z-index:200;max-width:380px}.toast{display:flex;align-items:flex-start;gap:10px;background:#0f2234;color:#fff;padding:12px 16px;border-radius:10px;font-size:13.5px;box-shadow:0 16px 40px #06142257;animation:slideIn .2s ease}@keyframes slideIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.toast-dot{width:8px;height:8px;border-radius:50%;margin-top:6px;flex-shrink:0;background:#54d38a}.toast-error .toast-dot{background:#ff7c76}.toast-info .toast-dot{background:#6db9ff}.login-page{min-height:100vh;display:grid;grid-template-columns:1.02fr .98fr;background:#fff}.login-brand{position:relative;overflow:hidden;background:radial-gradient(circle at 18% 18%,#1a6aa6 0%,transparent 55%),radial-gradient(circle at 82% 84%,#0f7d59 0%,transparent 50%),linear-gradient(155deg,#0b2e4c,#0d3c63 55%,#0a2a45);color:#fff;display:flex;align-items:center;justify-content:center;padding:60px 56px}.login-brand:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px);background-size:46px 46px;-webkit-mask-image:radial-gradient(circle at 50% 45%,#000 0%,transparent 78%);mask-image:radial-gradient(circle at 50% 45%,#000 0%,transparent 78%);pointer-events:none}.login-brand-inner{position:relative;max-width:440px;display:flex;flex-direction:column;align-items:flex-start;gap:14px}.login-brand-inner h1{font-size:38px;line-height:1.1;letter-spacing:-.03em;margin-top:10px}.login-brand-sub{font-size:14px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#9fd2c3}.login-brand-desc{color:#ffffffbd;font-size:14.5px;line-height:1.65;max-width:400px}.login-features{list-style:none;padding:0;margin:18px 0 0;display:flex;flex-direction:column;gap:11px}.login-features li{display:flex;align-items:center;gap:10px;font-size:13.5px;color:#ffffffdb}.login-features .icon{color:#7fe0b0}.login-form-panel{display:flex;align-items:center;justify-content:center;padding:48px 40px;background:linear-gradient(180deg,#fbfdff,#f4f8fc)}.login-card{width:100%;max-width:390px;display:flex;flex-direction:column;gap:18px}.login-card-head h2{font-size:25px;letter-spacing:-.02em}.login-card-head p{color:var(--ink-2);font-size:14px;margin-top:6px}.login-mobile-logo{display:none;margin-bottom:18px}.login-mobile-logo .logo-img,.login-mobile-logo .logo-fallback{width:74px;height:74px;border-radius:18px;padding:8px}.login-card .btn-block{padding:12px;margin-top:4px}.login-foot{text-align:center;font-size:11.5px;color:var(--ink-3);line-height:1.6;margin-top:8px}.editor-page{gap:16px}.editor-toolbar{position:sticky;top:0;z-index:30;background:#f4f7faeb;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);margin:-10px -10px 0;padding:10px 10px 0;border-bottom:1px solid var(--line)}.editor-top{display:flex;align-items:flex-start;gap:12px;padding-bottom:12px;flex-wrap:wrap}.back-btn{background:#fff;border-color:var(--line);box-shadow:var(--shadow-sm);margin-top:3px}.editor-heading{flex:1;min-width:240px}.title-input{border:1px solid transparent;background:transparent;font-size:21px;font-weight:800;letter-spacing:-.02em;padding:3px 6px;border-radius:8px;width:100%}.title-input:hover{border-color:var(--line);background:#fff}.title-input:focus{background:#fff;border-color:var(--brand);box-shadow:0 0 0 3px #14558a1a}.editor-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;color:var(--ink-2);padding:0 6px;margin-top:2px}.dot-sep{width:3px;height:3px;border-radius:50%;background:var(--ink-3);opacity:.6}.meta-link{display:inline-flex;align-items:center;gap:5px;color:var(--brand);font-weight:600}.meta-link:hover{text-decoration:underline}.editor-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.dirty-pill{font-size:11.5px;font-weight:700;color:var(--warn);background:var(--warn-bg);padding:4px 9px;border-radius:999px;white-space:nowrap}.status-select{width:auto;min-width:128px;padding:9px 30px 9px 12px}.editor-tabs{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.tab{display:inline-flex;align-items:center;gap:7px;padding:10px 13px;border:0;background:transparent;color:var(--ink-2);font-size:13.5px;font-weight:600;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.tab:hover{color:var(--brand)}.tab.active{color:var(--brand);border-bottom-color:var(--brand)}.editor-stats{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-2);padding-right:4px}.editor-stats strong{color:var(--ink)}.palette-bar{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 14px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;box-shadow:var(--shadow-sm);position:sticky;top:126px;z-index:20}.palette-title{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);white-space:nowrap}.palette-chips{display:flex;align-items:center;gap:6px;flex-wrap:wrap;flex:1}.palette-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 9px 4px 4px;border-radius:999px;border:1px solid var(--line);background:#fff;font-size:11.5px;font-weight:600;cursor:pointer;color:var(--ink-2);transition:box-shadow .15s ease,border-color .15s ease,transform .05s ease}.palette-chip:hover{border-color:#b9cadb}.palette-chip.selected{border-color:var(--brand);box-shadow:0 0 0 2px #14558a2e;color:var(--ink)}.chip-swatch{width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;border:1px solid rgba(0,0,0,.12);flex-shrink:0}.chip-swatch .icon{stroke-width:3.2}.eraser-swatch{background:#fff;color:var(--ink-3)}.palette-hint{font-size:11.5px;color:var(--ink-3);white-space:nowrap}.months-editor{display:grid;grid-template-columns:repeat(auto-fill,minmax(318px,1fr));gap:14px}.month-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:8px}.month-card-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.month-card-head h3{font-size:12.5px;letter-spacing:.1em;font-weight:800;color:var(--brand-700)}.month-letivos{font-size:11px;color:var(--ink-3);white-space:nowrap}.month-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}.weekday-cell{text-align:center;font-size:10px;font-weight:800;color:var(--ink-3);padding-bottom:2px}.day-cell{position:relative;aspect-ratio:1 / .86;min-height:29px;border:1px solid var(--line);border-radius:6px;background:#fff;font-size:11.5px;font-weight:600;color:var(--ink-2);cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;transition:transform .06s ease,box-shadow .12s ease}.day-cell:hover:not(.empty){box-shadow:0 0 0 2px #14558a47;z-index:2}.day-cell.empty{border-color:transparent;background:transparent;cursor:default}.day-cell.weekend:not(.painted){background:#f6f8fb;color:var(--ink-3)}.day-cell.painted{border-color:#00000017;font-weight:700}.day-mark{position:absolute;bottom:2px;width:3px;height:3px;border-radius:50%;background:currentColor;opacity:.55}.month-summary{min-height:16px;display:flex;flex-wrap:wrap;gap:4px 10px;font-size:10.5px;color:var(--ink-2)}.summary-item{display:inline-flex;align-items:center;gap:4px}.summary-dot{width:7px;height:7px;border-radius:2px;border:1px solid rgba(0,0,0,.14);flex-shrink:0}.summary-more,.summary-empty{color:var(--ink-3)}.month-card-actions{display:flex;gap:6px;border-top:1px solid var(--line-2);padding-top:8px}.mini-btn{border:1px solid var(--line);background:#fff;border-radius:6px;padding:4px 8px;font-size:11px;font-weight:600;color:var(--ink-2);cursor:pointer}.mini-btn:hover:not(:disabled){background:var(--brand-050);color:var(--brand);border-color:var(--brand-100)}.mini-btn:disabled{opacity:.45;cursor:not-allowed}.editor-panel{display:flex;flex-direction:column;gap:16px}.legend-table{display:flex;flex-direction:column;gap:6px}.legend-row{display:grid;grid-template-columns:140px 176px minmax(150px,1fr) 140px 74px 40px;gap:10px;align-items:center}.legend-colors,.legend-hexes{display:flex;align-items:center;gap:4px;flex-wrap:nowrap}.legend-colors .color-input{width:44px;flex:0 0 auto}.legend-hexes .hex-input{width:80px;min-width:0;flex:0 0 auto;padding:8px 6px;box-sizing:border-box}.icon-btn.tiny{width:24px;height:24px;font-size:16px;line-height:1}.mini-btn.dual-btn{padding:5px 7px;font-size:10.5px;white-space:nowrap}.legend-head{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);font-weight:800;padding-bottom:4px;border-bottom:1px solid var(--line-2)}.legend-row input[type=text],.legend-row input:not([type]){padding:8px 10px;font-size:13.5px}.color-input{width:46px;height:34px;padding:2px;border:1px solid var(--line);border-radius:8px;background:#fff;cursor:pointer}.hex-input{padding:8px 9px;font-size:12px;font-family:Consolas,monospace;text-transform:uppercase}.center{display:flex;justify-content:center}.order-btns{display:flex;gap:2px}.order-btns .icon-btn{width:30px;height:30px;font-size:14px}.preview-strip{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px;padding-top:14px;border-top:1px solid var(--line-2)}.legend-preview{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:6px;font-size:11.5px;font-weight:700;border:1px solid rgba(0,0,0,.12)}.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.stat{background:#f8fafc;border:1px solid var(--line-2);border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:4px}.stat-label{font-size:11.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;color:var(--ink-3)}.stat-value{font-size:26px;letter-spacing:-.02em}.config-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}.period-list{display:flex;flex-direction:column;gap:8px}.period-row{display:grid;grid-template-columns:minmax(120px,1.2fr) 1fr 16px 1fr 62px 34px;gap:6px;align-items:center}.period-row input{padding:8px 9px;font-size:12.5px}.period-label{font-weight:600}.period-sep{font-size:12px;color:var(--ink-3);text-align:center}.period-count{font-size:11.5px;color:var(--brand);font-weight:700;text-align:right;white-space:nowrap}.period-count.muted{color:var(--ink-3);font-weight:500}.legend-ro h2{font-size:15px;margin-bottom:0}.model-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:14px}.model-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px;display:flex;gap:13px;box-shadow:var(--shadow-sm);align-items:flex-start}.model-icon{width:44px;height:44px;border-radius:11px;background:var(--brand-050);color:var(--brand);display:flex;align-items:center;justify-content:center;flex-shrink:0}.model-main{flex:1;min-width:0}.model-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}.model-cat{font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--brand)}.year-pill{font-size:10.5px;font-weight:800;background:#eef2f7;color:var(--ink-2);padding:2px 7px;border-radius:999px}.model-main h3{font-size:14.5px;letter-spacing:-.01em;word-break:break-word}.model-desc{font-size:12.5px;color:var(--ink-2);margin-top:3px}.model-file{font-size:11.5px;color:var(--ink-3);margin-top:6px;word-break:break-word}.model-actions{display:flex;flex-direction:column;gap:4px;align-items:flex-end;flex-shrink:0}.school-checks{max-height:190px;overflow-y:auto;border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:8px;background:#fbfcfe}.logo-layout{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}.dropzone{border:1.5px dashed #c3d2e0;border-radius:12px;background:#fbfcfe;padding:30px 20px;display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;cursor:pointer;transition:border-color .15s ease,background .15s ease}.dropzone:hover,.dropzone.over{border-color:var(--brand);background:var(--brand-050)}.dropzone-icon{width:48px;height:48px;border-radius:12px;background:var(--brand-050);color:var(--brand);display:flex;align-items:center;justify-content:center;margin-bottom:4px}.dropzone strong{font-size:14px}.dropzone span{font-size:12px;color:var(--ink-3);max-width:360px}.upload-preview,.current-logo{margin-top:18px;padding-top:16px;border-top:1px solid var(--line-2);display:flex;flex-direction:column;gap:10px;align-items:flex-start}.preview-label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;font-weight:800;color:var(--ink-3)}.preview-tile{border:1px solid var(--line);border-radius:12px;padding:16px;display:flex;align-items:center;justify-content:center;width:100%;max-width:240px}.preview-tile.light{background:#fff}.preview-tile img{max-height:120px;max-width:180px;object-fit:contain}.preview-actions{display:flex;gap:8px}.logo-demos{display:flex;flex-direction:column;gap:22px}.logo-demo{display:flex;flex-direction:column;gap:8px}.demo-login{display:grid;grid-template-columns:1fr 1fr;border-radius:12px;overflow:hidden;border:1px solid var(--line);min-height:176px}.demo-login-bg{background:linear-gradient(155deg,#0b2e4c,#0d3c63 55%,#0a2a45);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:16px;text-align:center}.demo-login-bg .logo-img,.demo-login-bg .logo-fallback{width:58px;height:58px;border-radius:14px;padding:6px;margin-bottom:4px}.demo-login-bg strong{font-size:12px}.demo-login-bg span{font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:#9fd2c3}.demo-login-form{background:#fff;padding:22px 18px;display:flex;flex-direction:column;gap:9px;justify-content:center}.skeleton-line{height:9px;border-radius:4px;background:#dfe7ef;margin-bottom:3px}.skeleton-line.w70{width:70%}.skeleton-input{height:24px;border-radius:5px;background:#f1f5f9;border:1px solid #e6edf4}.skeleton-btn{height:26px;border-radius:5px;background:var(--brand);margin-top:3px}.demo-sidebar{background:linear-gradient(180deg,var(--sidebar),var(--sidebar-2));border-radius:12px;padding:16px;display:flex;flex-direction:column;gap:8px}.demo-brand{display:flex;align-items:center;gap:9px;padding-bottom:12px;border-bottom:1px solid rgba(255,255,255,.14);margin-bottom:4px}.demo-brand .logo-img,.demo-brand .logo-fallback{width:34px;height:34px;border-radius:9px;padding:4px;background:#fff}.demo-brand strong{display:block;color:#fff;font-size:11px}.demo-brand span{font-size:8.5px;color:#fff9}.skeleton-nav{height:20px;border-radius:5px;background:#ffffff1a}.skeleton-nav.active{background:#fff;width:78%}.print-app{min-height:100vh;background:#e9eef3;padding-bottom:40px}.print-toolbar{position:sticky;top:0;z-index:20;background:#fff;border-bottom:1px solid var(--line);padding:12px 22px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;box-shadow:var(--shadow-sm)}.print-toolbar-center{display:flex;flex-direction:column;text-align:center;min-width:0}.print-toolbar-center strong{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.print-toolbar-center span{font-size:12px;color:var(--ink-3)}.print-toolbar-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.inline-select{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-2)}.inline-select select{width:auto;padding:8px 30px 8px 10px}.print-docs{display:flex;flex-direction:column;align-items:center;gap:22px;padding:22px 12px;overflow-x:auto}.print-page{width:210mm;min-height:297mm;height:297mm;background:#fff;padding:8mm 9mm 7mm;display:flex;flex-direction:column;gap:2.2mm;box-shadow:0 10px 34px #10203029;color:#111;position:relative;overflow:hidden;print-color-adjust:exact;-webkit-print-color-adjust:exact}.pr-head{display:grid;grid-template-columns:21mm 1fr 52mm;gap:3mm;align-items:center;border-bottom:.5mm solid #1b1b1b;padding-bottom:2mm}.pr-logo{width:20mm;height:20mm;display:flex;align-items:center;justify-content:center}.pr-titles{text-align:center;line-height:1.2}.pr-org{font-size:8.2pt;font-weight:800;letter-spacing:.01em}.pr-institution{font-size:7.6pt;font-weight:700;text-transform:uppercase;margin-top:1mm}.pr-legal{font-size:6.6pt;color:#333;margin-top:.6mm}.pr-doc{text-align:center;border-left:.3mm solid #444;padding-left:3mm;line-height:1.25}.pr-doc-title{font-size:9pt;font-weight:800}.pr-doc-year{font-size:10.5pt;font-weight:800;letter-spacing:.02em}.pr-total{font-size:6.4pt;color:#333}.pr-decree{font-size:5.8pt;color:#333;margin-top:.8mm}.pr-periods{grid-column:1 / -1;display:grid;grid-template-columns:repeat(4,1fr);gap:1mm 3mm;border-top:.2mm solid #bbb;padding-top:1.2mm;font-size:6.3pt;color:#222}.pr-period strong{font-weight:700}.pr-mini-head{display:flex;align-items:center;justify-content:space-between;gap:4mm;font-size:6.4pt;color:#333;border-bottom:.3mm solid #999;padding-bottom:1mm}.pr-mini-head strong{font-size:7pt}.print-months{flex:1;display:grid;gap:2.4mm;min-height:0}.print-pair{display:grid;grid-template-columns:1fr 1fr;gap:2.4mm;min-height:0;break-inside:avoid;align-items:stretch}.print-month{border:.4mm solid #1f1f1f;display:flex;flex-direction:column;min-height:0;background:#fff}.pr-month-head{display:flex;align-items:baseline;justify-content:space-between;gap:2mm;padding:.8mm 1.4mm;background:#f1f5f9;border-bottom:.3mm solid #9aa6b2}.pr-month-head h3{font-size:7.6pt;font-weight:800;letter-spacing:.06em;color:#123}.pr-month-head span{font-size:5.9pt;color:#333;white-space:nowrap}.pr-grid{height:100%;display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:3.8mm repeat(6,minmax(0,1fr));min-height:0}.pr-weekday{display:flex;align-items:center;justify-content:center;font-size:6.4pt;font-weight:800;color:#333;border-bottom:.2mm solid #999;border-right:.15mm solid #c9d2da;background:#f8fafc}.pr-cell{border-right:.15mm solid #c9d2da;border-bottom:.15mm solid #c9d2da;display:flex;align-items:center;justify-content:center;font-size:8pt;font-weight:600;line-height:1;min-height:0;overflow:hidden}.pr-cell.empty{background:transparent;border:none}.pr-cell.painted{font-weight:800}.pr-month-body{flex:1;display:grid;grid-template-columns:minmax(0,1fr) 26mm;min-height:0}.pr-highlights{border-left:.25mm solid #7d8a97;padding:.9mm 1.1mm;display:flex;flex-direction:column;gap:.9mm;font-size:5.8pt;line-height:1.2;color:#111;background:#fbfcfd;overflow:hidden}.pr-highlight{display:grid;grid-template-columns:2mm 1fr;column-gap:1.1mm;align-items:start}.pr-highlight-color{width:2mm;height:2mm;margin-top:.3mm;border:.12mm solid rgba(0,0,0,.35)}.pr-highlight-days{font-weight:800;white-space:nowrap}.pr-highlight-name{grid-column:2;font-size:5.4pt;color:#222;line-height:1.15}.pr-highlight.muted{color:#999}.pr-summary{display:none}.pr-summary-item{display:inline-flex;align-items:center;gap:.8mm;white-space:nowrap}.pr-summary-item.muted{color:#999}.pr-dot{width:1.6mm;height:1.6mm;border:.1mm solid rgba(0,0,0,.25);display:inline-block}.pr-legend{display:flex;flex-wrap:wrap;align-items:center;gap:1.2mm;border-top:.3mm solid #555;padding-top:1.2mm}.pr-legend-title{font-size:5.8pt;font-weight:800;letter-spacing:.08em;margin-right:1mm}.pr-legend-item{font-size:5.4pt;font-weight:700;padding:.4mm 1.6mm;border:.12mm solid rgba(0,0,0,.25);border-radius:.6mm;line-height:1.2}.pr-foot{display:flex;flex-direction:column;gap:1.6mm;border-top:.3mm solid #555;padding-top:1.6mm}.pr-note{font-size:5.8pt;color:#222}.pr-foot-row{display:flex;align-items:flex-end;justify-content:space-between;gap:4mm;font-size:5.9pt;color:#222}.pr-htpc{display:flex;align-items:center;gap:3mm;flex-wrap:wrap}.pr-htpc strong{font-size:6pt}.pr-city{text-align:right;white-space:nowrap}.pr-signs{display:grid;grid-template-columns:repeat(3,1fr);gap:4mm;margin-top:6mm}.pr-sign{display:flex;flex-direction:column;align-items:center;gap:1mm;text-align:center}.pr-sign-line{width:100%;border-top:.25mm solid #222}.pr-sign span{font-size:5.6pt;font-weight:600;line-height:1.2}.pr-page-number{position:absolute;right:9mm;bottom:3mm;font-size:5.4pt;color:#777}.print-page.dense{gap:1.4mm;padding:6mm 8mm 5mm}.dense .pr-head{grid-template-columns:16mm 1fr 46mm;padding-bottom:1.2mm}.dense .pr-logo{width:15mm;height:15mm}.dense .pr-org{font-size:7pt}.dense .pr-legal,.dense .pr-decree,.dense .pr-total{display:none}.dense .pr-doc-title{font-size:8pt}.dense .pr-doc-year{font-size:9pt}.dense .pr-periods{font-size:5.2pt;padding-top:.8mm}.dense .print-months,.dense .print-pair{gap:1.4mm}.dense .pr-month-head{padding:.5mm 1mm}.dense .pr-month-head h3{font-size:6.6pt}.dense .pr-month-head span{font-size:5.2pt}.dense .pr-grid{grid-template-rows:2.8mm repeat(6,minmax(0,1fr))}.dense .pr-cell{font-size:6.2pt}.dense .pr-weekday{font-size:5.2pt}.dense .pr-month-body{grid-template-columns:minmax(0,1fr) 19mm}.dense .pr-highlights{font-size:4.6pt;padding:.5mm .7mm;gap:.4mm}.dense .pr-highlight-name{font-size:4.3pt}.dense .pr-highlight-color{width:1.6mm;height:1.6mm}.dense .pr-legend{padding-top:.7mm;gap:.8mm}.dense .pr-legend-item{font-size:4.8pt;padding:.2mm 1.2mm}.dense .pr-foot{gap:.8mm;padding-top:.8mm}.dense .pr-signs{margin-top:3mm;gap:3mm}.dense .pr-sign span{font-size:5pt}.dense .pr-foot-row{font-size:5.2pt}.dense .pr-city{white-space:normal}@media (max-width: 1180px){.config-grid,.logo-layout{grid-template-columns:1fr}.legend-row{grid-template-columns:124px 168px minmax(140px,1fr) 120px 70px 36px}}@media (max-width: 1000px){.sidebar{position:fixed;left:0;top:0;transform:translate(-104%);transition:transform .22s ease;box-shadow:20px 0 50px #08182847}.app-shell.nav-open .sidebar{transform:translate(0)}.app-shell.nav-open .nav-scrim{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:35;border:0;background:#0a192873;cursor:pointer}.topbar{display:flex;align-items:center;gap:10px;padding:10px 16px;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:25}.topbar-menu{display:inline-flex}.topbar-title{flex:1;font-weight:800;font-size:14px;color:var(--brand-700)}.topbar-user{display:flex;align-items:center;gap:8px}.topbar-role{font-size:11.5px;color:var(--ink-3)}.content{padding:22px 18px 50px}.palette-bar{top:112px}.login-page{grid-template-columns:1fr}.login-brand{display:none}.login-mobile-logo{display:block}.login-mobile-logo .logo-img,.login-mobile-logo .logo-fallback{width:68px;height:68px;border-radius:16px;padding:7px;background:var(--brand-050);color:var(--brand)}}@media (max-width: 720px){.page-head{align-items:flex-start}.page-head h1{font-size:23px}.filter-bar>select{flex:1;min-width:140px}.form-grid-2{grid-template-columns:1fr}.legend-row{grid-template-columns:100px 1fr 32px;grid-template-areas:"color name del" "hex counts order";gap:8px;padding-bottom:10px;border-bottom:1px solid var(--line-2)}.legend-head{display:none}.legend-row>span:nth-child(1){grid-area:color}.legend-row>span:nth-child(2){grid-area:hex}.legend-row>span:nth-child(3){grid-area:name}.legend-row>span:nth-child(4){grid-area:counts;justify-content:flex-start}.legend-row>span:nth-child(5){grid-area:order;justify-content:flex-end}.legend-row>span:nth-child(6){grid-area:del;justify-content:flex-end}.period-row{grid-template-columns:1fr 1fr;grid-template-areas:"label label" "start end" "count del";gap:6px}.period-row .period-label{grid-area:label}.period-row>input[type=date]:nth-child(2){grid-area:start}.period-row>input[type=date]:nth-child(4){grid-area:end}.period-sep{display:none}.period-count{grid-area:count;text-align:left}.period-row>.icon-btn{grid-area:del;justify-self:end}.stat-grid{grid-template-columns:1fr}.editor-actions{width:100%}.editor-actions .btn{flex:1}.editor-stats{width:100%;margin-left:0;padding:6px 0 8px}.palette-bar{position:static}.months-editor{grid-template-columns:1fr}.day-cell{min-height:34px;font-size:12px}.modal-backdrop{padding:16px 10px}.login-form-panel{padding:30px 18px}.toast-stack{left:14px;right:14px;bottom:14px;max-width:none}.print-toolbar{justify-content:center}.print-toolbar-center{order:-1;width:100%}.demo-login{grid-template-columns:1fr}.demo-login-form{display:none}}.import-actions{display:flex;gap:10px;flex-wrap:wrap}.import-drop{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:34px 20px;border:2px dashed var(--line);border-radius:14px;background:#fbfcfe;color:var(--ink-2);text-align:center;cursor:pointer;transition:border-color .15s ease,background .15s ease,color .15s ease}.import-drop:hover,.import-drop.is-over{border-color:var(--brand);background:#f3f8fd;color:var(--brand)}.import-drop input{display:none}.import-drop strong{color:var(--ink);font-size:15px}.import-drop.is-over strong{color:var(--brand)}.import-drop span{font-size:12.5px}.import-summary{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;font-size:13.5px;color:var(--ink-2)}.import-preview{max-height:340px;overflow:auto;border:1px solid var(--line);border-radius:12px}.import-preview .data-table thead th{position:sticky;top:0;z-index:1}.import-preview .data-table tbody td{vertical-align:top}.import-problem{display:inline-flex;gap:6px;align-items:flex-start;font-size:12px;color:var(--danger);max-width:260px}.import-stats{display:flex;gap:12px;flex-wrap:wrap}.import-stat{flex:1 1 110px;display:flex;flex-direction:column;gap:2px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#fbfcfe}.import-stat strong{font-size:24px}.import-stat span{font-size:12.5px;color:var(--ink-2)}.import-stat.is-error strong{color:var(--danger)}.import-errors{padding:14px 16px;border:1px solid #f3c9c7;border-radius:12px;background:#fdf4f3;font-size:13px}.import-errors strong{display:block;margin-bottom:6px;color:var(--danger)}.import-errors ul{margin:0;padding-left:18px;max-height:220px;overflow:auto}.import-errors li{margin:3px 0}.import-details{font-size:13.5px}.import-details summary{cursor:pointer;color:var(--brand);font-weight:600}.import-details ul{margin:8px 0 0;padding-left:18px;max-height:220px;overflow:auto}@media print{@page{size:A4 portrait;margin:0}html,body{background:#fff!important;margin:0!important;padding:0!important}.no-print,.toast-stack,.nav-scrim,.topbar,.sidebar{display:none!important}.print-app{background:#fff;padding:0;min-height:0}.print-docs{display:block;padding:0;gap:0}.print-page{width:210mm;height:297mm;min-height:297mm;box-shadow:none;margin:0;break-after:page;page-break-after:always;overflow:hidden}.print-page:last-child{break-after:auto;page-break-after:auto}.print-page,.print-page *{print-color-adjust:exact;-webkit-print-color-adjust:exact}.pr-cell,.pr-legend-item,.legend-preview{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
