:root{--bg: #f8fafc;--panel: #ffffff;--line: #eef2f7;--line-strong: #e2e8f0;--ink: #1e293b;--muted: #94a3b8;--muted-2: #64748b;--accent: #6366f1;--accent-weak: #eef2ff;--danger: #ef4444;--closed-bg: #f8fafc;--sidebar-w: 224px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ink);background:var(--bg);font-size:14px}button{font-family:inherit}.boot{padding:24px;color:var(--muted-2)}.boot.fullscreen{height:100vh;display:flex;align-items:center;justify-content:center}.load-err{color:var(--danger)}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.topbar{display:flex;height:60px;flex-shrink:0;background:var(--panel);border-bottom:1px solid var(--line-strong)}.topbar-brand{width:var(--sidebar-w);flex-shrink:0;display:flex;align-items:center;gap:10px;padding:0 16px;border-right:1px solid var(--line)}.brand-logo{width:34px;height:34px;border-radius:9px;background:var(--accent);color:#fff;font-weight:800;font-size:18px;display:flex;align-items:center;justify-content:center}.brand-text{display:flex;flex-direction:column;line-height:1.2}.brand-text strong{font-size:15px}.brand-sub{font-size:11px;color:var(--muted)}.topbar-main{flex:1;display:flex;align-items:center;gap:12px;padding:0 20px}.topbar-spacer{flex:1}.page-title{font-size:18px;margin:0}.tabs{display:flex;background:var(--bg);border:1px solid var(--line-strong);border-radius:9px;padding:3px}.tab{border:none;background:none;padding:6px 14px;border-radius:7px;cursor:pointer;font-size:13px;font-weight:600;color:var(--muted-2)}.tab.active{background:var(--panel);color:var(--ink);box-shadow:0 1px 3px #00000014}.month-nav{display:flex;align-items:center;gap:8px}.month-label{font-weight:700;min-width:108px;text-align:center;text-transform:capitalize}.icon-btn{width:30px;height:30px;border:1px solid var(--line-strong);background:var(--panel);border-radius:8px;cursor:pointer;font-size:16px;color:var(--muted-2)}.icon-btn:hover{background:var(--bg)}.btn-ghost{border:1px solid var(--line-strong);background:var(--panel);border-radius:8px;padding:7px 14px;cursor:pointer;font-size:13px;font-weight:600;color:var(--ink)}.btn-ghost:hover:not(:disabled){background:var(--bg)}.btn-ghost:disabled{opacity:.55;cursor:not-allowed}.btn-primary{border:none;background:var(--accent);color:#fff;border-radius:8px;padding:8px 15px;cursor:pointer;font-size:13px;font-weight:600}.btn-primary:hover:not(:disabled){filter:brightness(.95)}.btn-primary:disabled{opacity:.55;cursor:not-allowed}.body{flex:1;display:flex;overflow:hidden}.sidebar{width:var(--sidebar-w);flex-shrink:0;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:14px 12px}.nav{display:flex;flex-direction:column;gap:2px}.nav-item{display:flex;align-items:center;gap:10px;border:none;background:none;padding:9px 10px;border-radius:8px;cursor:pointer;font-size:14px;font-weight:500;color:var(--muted-2);text-align:left}.nav-item:hover{background:var(--bg);color:var(--ink)}.nav-item.active{background:var(--accent-weak);color:var(--accent);font-weight:600}.team{margin-top:22px;flex:1;overflow-y:auto}.team-head{display:flex;justify-content:space-between;align-items:baseline;padding:0 10px 8px;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}.team-head-hours{font-size:10px}.team-list{list-style:none;margin:0;padding:0}.team-item{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:8px;-webkit-user-select:none;user-select:none}.team-item.draggable{cursor:grab}.team-item.draggable:hover{background:var(--bg)}.team-item.dragging{opacity:.4}.team-item.dimmed{opacity:.35}.dot{width:11px;height:11px;border-radius:50%;flex-shrink:0}.team-name{flex:1;font-weight:500}.team-hours{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}.sidebar-user{display:flex;align-items:center;gap:9px;padding:10px 6px 2px;margin-top:8px;border-top:1px solid var(--line)}.avatar{width:30px;height:30px;border-radius:50%;background:var(--accent);color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.sidebar-user-name{flex:1;font-size:12px;color:var(--muted-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.logout-btn{border:none;background:none;cursor:pointer;color:var(--muted);font-size:15px;padding:2px 4px}.logout-btn:hover{color:var(--danger)}.content{flex:1;overflow:auto;padding:18px 20px}.month{min-width:900px}.weekbar,.grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}.weekbar{margin-bottom:8px}.weekbar-cell{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;padding:2px 4px}.cell{background:var(--panel);border:1px solid var(--line-strong);border-radius:12px;min-height:150px;padding:8px;display:flex;flex-direction:column;gap:6px}.cell.outside{background:var(--closed-bg);border-style:dashed}.cell.outside .daynum{color:var(--muted)}.cell.closed{background:#f1f5f9;border-color:var(--line)}.cell.closed .daynum{color:var(--muted)}.cell-head{display:flex;align-items:center;gap:6px}.cell-head-spacer{flex:1}.daynum{font-weight:700;font-size:14px;min-width:26px;height:26px;padding:0 4px;border-radius:8px;color:var(--ink);display:inline-flex;align-items:center;justify-content:center}.daynum.today{background:var(--accent);color:#fff}.closed-tag{font-size:10px;font-weight:700;letter-spacing:.05em;color:var(--muted)}.cell-actions{display:flex;align-items:center;gap:6px;opacity:0}.cell:hover .cell-actions{opacity:1}.cell-action-btn{border:none;background:none;color:var(--muted);font-size:11px;cursor:pointer;padding:1px 4px;border-radius:4px}.cell-action-btn:hover{color:var(--accent);background:var(--bg)}.cell-absences{display:flex;flex-direction:column;gap:4px}.absence{display:flex;align-items:center;gap:6px;font-size:11px;padding:3px 8px;border-radius:7px;border:1px solid}.abs-kind{font-weight:700}.abs-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.abs-del{border:none;background:none;cursor:pointer;color:inherit;opacity:.55;font-size:13px;line-height:1}.abs-del:hover{opacity:1}.abs-urlop{background:#fefce8;border-color:#fde68a;color:#92730c}.abs-l4{background:#fef2f2;border-color:#fecaca;color:#b91c1c}.abs-opieka{background:#eff6ff;border-color:#bfdbfe;color:#1d4ed8}.abs-bezplatny,.abs-inne{background:#f1f5f9;border-color:var(--line-strong);color:var(--muted-2)}.cell-slots{display:flex;flex-direction:column;gap:8px;flex:1}.slot{border:1px dashed transparent;border-radius:8px;padding:2px}.slot-head{display:flex;align-items:center;justify-content:space-between;gap:4px;padding:0 2px 3px}.slot-label{font-size:9px;font-weight:700;letter-spacing:.05em;color:var(--muted)}.slot-body{display:flex;flex-direction:column;gap:4px}.slot.drag-active{border-color:var(--line-strong)}.slot.over{border-color:var(--accent);border-style:solid;background:var(--accent-weak)}.slot.blocked{border-color:var(--danger);background:#fef2f2}.slot.over-blocked{border-style:solid;background:#fee2e2}.chip{--emp: #94a3b8;display:flex;align-items:center;gap:6px;padding:4px 8px;border-radius:8px;font-size:12px;background:color-mix(in srgb,var(--emp) 12%,white)}.chip.draggable{cursor:grab}.chip.dragging{opacity:.35}.chip.dimmed{opacity:.3}.chip.copy{border:1px dashed var(--emp)}.chip-time{font-variant-numeric:tabular-nums;font-weight:600;color:var(--muted-2)}.chip-name{font-weight:700;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:color-mix(in srgb,var(--emp) 75%,black)}.chip-ho{font-size:9px;font-weight:800;letter-spacing:.03em;padding:2px 5px;border-radius:5px;background:color-mix(in srgb,var(--emp) 22%,white);color:color-mix(in srgb,var(--emp) 75%,black)}.chip-ho.toggle{border:none;cursor:pointer;opacity:.4}.chip-ho.toggle.on{opacity:1}.chip-plus{font-weight:800;color:var(--emp)}.chip-del{border:none;background:none;cursor:pointer;color:var(--muted);font-size:15px;line-height:1;padding:0 2px;opacity:0}.chip:hover .chip-del{opacity:.7}.chip-del:hover{color:var(--danger)}.slot-add{position:relative}.slot-add-btn{border:none;background:none;color:var(--muted);font-size:10px;cursor:pointer;padding:0 3px;border-radius:4px;opacity:0}.cell:hover .slot-add-btn{opacity:1}.slot-add-btn:hover{color:var(--accent);background:var(--bg)}.slot-add-menu{position:absolute;top:100%;right:0;z-index:40;min-width:140px;max-height:210px;overflow-y:auto;background:var(--panel);border:1px solid var(--line-strong);border-radius:9px;box-shadow:0 10px 24px #00000026;padding:5px}.slot-add-item{display:flex;align-items:center;gap:8px;width:100%;border:none;background:none;cursor:pointer;padding:7px 8px;border-radius:6px;font-size:12px;text-align:left;color:var(--ink)}.slot-add-item:hover{background:var(--bg)}.slot-add-empty{padding:8px;font-size:11px;color:var(--muted)}.page{max-width:820px}.section-title{font-size:15px;margin:0 0 14px}.page-addbar{display:flex;gap:10px;align-items:center;margin-bottom:18px;flex-wrap:wrap}.page-addbar input[type=text],.page-addbar input[type=date],.page-addbar input[type=time],.page-addbar select{padding:8px 10px;border:1px solid var(--line-strong);border-radius:8px;font-size:14px}.page-addbar input[type=color]{width:38px;height:38px;padding:2px;border:1px solid var(--line-strong);border-radius:8px;background:var(--panel);cursor:pointer}.data-table{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--line-strong);border-radius:12px;overflow:hidden}.data-table th,.data-table td{text-align:left;padding:10px 14px;border-bottom:1px solid var(--line);font-size:14px}.data-table th{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);background:var(--bg)}.data-table tr:last-child td{border-bottom:none}.data-table td .dot{display:inline-block;vertical-align:middle;margin-right:4px}.data-table input[type=color]{width:30px;height:30px;padding:1px;border:1px solid var(--line-strong);border-radius:6px;cursor:pointer}.data-table input[type=time]{padding:5px 7px;border:1px solid var(--line-strong);border-radius:6px}.inline-input{padding:6px 8px;border:1px solid transparent;border-radius:6px;font-size:14px;width:100%;max-width:220px;background:transparent}.inline-input:hover,.inline-input:focus{border-color:var(--line-strong);background:var(--panel);outline:none}.row-inactive{opacity:.5}.empty-row{color:var(--muted);text-align:center}.link-danger{border:none;background:none;color:var(--danger);cursor:pointer;font-size:13px;padding:0}.link-danger:hover{text-decoration:underline}.hint{font-size:12px;color:var(--muted-2);margin-top:14px}.toast{position:fixed;bottom:22px;left:50%;transform:translate(-50%);background:#1e293b;color:#fff;padding:11px 18px;border-radius:9px;font-size:13px;box-shadow:0 8px 24px #0003;z-index:80}.toast.error{background:var(--danger)}.login-wrap{height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg)}.login-card{background:var(--panel);padding:32px;border-radius:14px;box-shadow:0 10px 30px #00000014;width:320px;display:flex;flex-direction:column;gap:14px}.login-card h1{margin:0 0 8px;font-size:20px}.login-card label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted-2)}.login-card input{padding:9px 10px;border:1px solid var(--line-strong);border-radius:8px;font-size:14px}.login-card button{padding:10px;border:none;background:var(--accent);color:#fff;border-radius:8px;cursor:pointer;font-size:14px;font-weight:600}.login-card button:disabled{opacity:.6}.login-err{color:var(--danger);font-size:13px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a66;display:flex;align-items:center;justify-content:center;z-index:90}.modal{background:var(--panel);padding:24px;border-radius:14px;width:340px;display:flex;flex-direction:column;gap:12px}.modal h3{margin:0}.modal label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted-2)}.modal input,.modal select{padding:8px;border:1px solid var(--line-strong);border-radius:8px;font-size:14px}.modal-row{display:flex;gap:12px}.modal-row label{flex:1}.modal-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:6px}.modal-actions button[type=submit]{padding:8px 16px;border:none;background:var(--accent);color:#fff;border-radius:8px;cursor:pointer;font-weight:600}.link-btn{background:none;border:none;color:var(--accent);cursor:pointer;padding:0;font-size:13px}
