:root{font-synthesis:none;text-rendering:optimizelegibility}html,body,#root{min-height:100%;margin:0;padding:0}:root{--bg:#f5f7fa;--ink:#16202b;--ink-soft:#5b6675;--card:#fff;--border:#e3e7ed;--border-soft:#eef1f5;--accent:#2a5b8c;--accent-soft:#eaf1f8;--danger:#c4436d;--shadow:0 1px 2px #16202b0a, 0 6px 20px #16202b0d;--hour-h:44px;--grid-line:#9aa5b4;--grid-line-soft:#b0b8c4}*{box-sizing:border-box}.planner-root{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;padding:26px 30px 50px;padding-left:max(30px, env(safe-area-inset-left));padding-right:max(30px, env(safe-area-inset-right));padding-bottom:max(50px, env(safe-area-inset-bottom));min-height:100dvh;font-family:Inter,system-ui,sans-serif}.planner-root h1,.planner-root h2,.planner-root h3{margin:0;font-family:Manrope,sans-serif}.login-overlay .login-card{flex-direction:column;gap:12px;max-width:min(380px,92vw);display:flex}.login-card .modal-actions{margin-top:4px}.lunch-modal{max-width:min(380px,92vw)}.app-menu-user{color:var(--accent);margin-top:4px;font-size:13px;font-weight:600;line-height:1.35}.users-modal{max-width:min(520px,94vw);max-height:min(86vh,720px);overflow:auto}.audit-overlay{z-index:60;padding:max(12px, env(safe-area-inset-top)) 16px max(12px, env(safe-area-inset-bottom));background:#10161e6b;justify-content:center;align-items:center}.audit-overlay.open .audit-modal{transform:none}.audit-modal{background:#fff;flex-direction:column;display:flex}.audit-head{flex:none;justify-content:space-between;align-items:center;gap:12px;margin-bottom:2px;display:flex}.audit-close{border:1px solid var(--border);background:var(--bg);width:34px;height:34px;color:var(--ink-soft);cursor:pointer;border-radius:10px;flex:none;justify-content:center;align-items:center;font-size:14px;line-height:1;display:flex}.audit-close:hover{background:var(--accent-soft);color:var(--accent);border-color:#0000}.audit-filters{border:1px solid var(--border-soft);background:linear-gradient(#f7f9fc 0%,#f3f6fa 100%);border-radius:12px;flex:none;grid-template-columns:1fr 1fr;gap:8px 10px;margin:10px 0 8px;padding:12px;display:grid}.audit-filters .field input[type=date],.audit-filters .field select{border:1px solid var(--border);width:100%;color:var(--ink);background:#fff;border-radius:8px;padding:8px 10px;font-family:inherit;font-size:13px}.audit-filter-actions{grid-column:1/-1;justify-content:flex-end;display:flex}.audit-filter-actions .btn{justify-content:center;min-width:120px}.audit-toolbar{flex:none;min-height:20px;margin:2px 2px 8px}.audit-count{letter-spacing:.03em;text-transform:uppercase;color:var(--ink-soft);font-size:11.5px;font-weight:700}.audit-list{border-top:1px solid var(--border-soft);flex:1;min-height:0;max-height:none;margin:0 -6px;padding:0 6px 4px;overflow:auto}@media (width>=761px){.audit-filters{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px 12px}.audit-filters .field{margin-bottom:0}}.audit-list.is-busy{opacity:.55}.audit-list ul{margin:0;padding:8px 0 4px;list-style:none}.audit-item{border-bottom:1px solid var(--border-soft);grid-template-columns:10px 72px 1fr;align-items:start;gap:0 10px;padding:11px 6px 12px;display:grid}.audit-item:last-child{border-bottom:none}.audit-rail{background:var(--accent);width:8px;height:8px;box-shadow:0 0 0 3px var(--accent-soft);border-radius:50%;margin-top:7px}.audit-item.action-create .audit-rail{background:#2f7d57;box-shadow:0 0 0 3px #e6f4ec}.audit-item.action-update .audit-rail{background:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.audit-item.action-delete .audit-rail{background:var(--danger);box-shadow:0 0 0 3px #f8e8ee}.audit-when-col{flex-direction:column;gap:1px;padding-top:1px;display:flex}.audit-day{color:var(--ink);text-transform:capitalize;font-size:11.5px;font-weight:700;line-height:1.25}.audit-time{color:var(--ink-soft);font-variant-numeric:tabular-nums;font-size:11px;font-weight:600}.audit-body{min-width:0}.audit-meta{flex-wrap:wrap;align-items:center;gap:5px 7px;margin-bottom:4px;display:flex}.audit-user{color:var(--accent);margin-left:2px;font-size:11.5px;font-weight:700}.audit-badge{background:var(--accent-soft);color:var(--accent);letter-spacing:.02em;border-radius:6px;padding:2px 7px;font-size:10.5px;font-weight:700;display:inline-block}.audit-badge.soft{color:var(--ink-soft);background:#eef1f5;font-weight:600}.audit-badge.action-create{color:#246748;background:#e6f4ec}.audit-badge.action-update{background:var(--accent-soft);color:var(--accent)}.audit-badge.action-delete{color:#9e3356;background:#f8e8ee}.audit-summary{color:var(--ink);word-break:break-word;font-size:13px;line-height:1.4}.audit-empty{text-align:center;color:var(--ink-soft);padding:36px 12px;font-size:13px;line-height:1.4}.audit-empty-title{color:var(--ink);margin-bottom:4px;font-size:13.5px;font-weight:700}@media (width<=560px){.audit-filters{grid-template-columns:1fr}.audit-item{grid-template-columns:8px 1fr;gap:0 8px}.audit-when-col{flex-direction:row;grid-column:2;align-items:baseline;gap:8px;margin-bottom:2px}.audit-body{grid-column:2}}.users-tabs{gap:8px;margin:10px 0 14px;display:flex}.users-tab{border:1px solid var(--border);background:var(--card);cursor:pointer;color:var(--ink-soft);border-radius:999px;padding:6px 12px;font-size:12px;font-weight:700}.users-tab.active{background:var(--accent);border-color:var(--accent);color:#fff}.users-form{flex-direction:column;gap:10px;margin-bottom:14px;display:flex}.roles-panel{flex-direction:column;gap:14px;margin-bottom:12px;display:flex}.role-block{border:1px solid var(--border-soft);border-radius:10px;padding:10px}.role-title{margin-bottom:8px;font-size:13px;font-weight:700}.topbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:18px;display:flex}.menu-toggle{border:1px solid var(--border);background:var(--card);width:44px;height:44px;box-shadow:var(--shadow);cursor:pointer;-webkit-tap-highlight-color:transparent;border-radius:12px;flex-direction:column;flex:none;justify-content:center;gap:5px;padding:12px 11px;display:flex}.menu-toggle:hover{background:var(--accent-soft)}.menu-toggle span{background:var(--ink);border-radius:2px;height:2px;display:block}.week-nav{background:var(--card);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:999px;align-items:center;gap:8px;padding:5px 6px;display:flex}.week-nav button{width:28px;height:28px;color:var(--ink);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;font-size:15px;transition:background .15s;display:flex}.week-nav button:hover{background:var(--accent-soft)}.week-nav .label{text-align:center;min-width:150px;font-size:13px;font-weight:700}.week-nav .today-btn{background:var(--accent-soft);width:auto;height:26px;color:var(--accent);border-radius:999px;padding:0 11px;font-size:12px;font-weight:600}.day-tabs{gap:6px;margin-bottom:16px;padding-bottom:2px;display:flex;overflow-x:auto}.day-tab{background:var(--card);border:1px solid var(--border);text-align:center;cursor:pointer;border-radius:10px;flex:1;min-width:92px;padding:8px 4px;transition:all .12s}.day-tab .dn{letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);font-size:10.5px;font-weight:700}.day-tab .dd{margin-top:1px;font-size:16px;font-weight:800}.day-tab.is-today .dn,.day-tab.is-today .dd{color:var(--accent)}.day-tab.selected{background:var(--accent);border-color:var(--accent)}.day-tab.selected .dn,.day-tab.selected .dd{color:#fff}.toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.legend{flex-wrap:wrap;gap:8px;display:flex}.legend .chip{background:var(--card);border:1px solid var(--border);color:var(--ink-soft);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:5px 10px 5px 8px;font-family:inherit;font-size:12px;font-weight:600;transition:border-color .12s,background .12s,color .12s,opacity .12s;display:inline-flex}.legend .chip:hover{color:var(--ink);background:#fafcff;border-color:#c5d3e3}.legend .chip.is-on{border-color:var(--accent);background:var(--accent-soft);color:var(--ink);box-shadow:0 0 0 2px #2a5b8c1a}.legend .chip.is-dim{opacity:.42}.legend .chip.is-dim:hover{opacity:.75}.legend .chip-clear{color:var(--accent);background:0 0;border-style:dashed}.legend .chip-clear:hover{background:var(--accent-soft)}.legend .dot{border-radius:50%;flex:none;width:8px;height:8px}.btn{cursor:pointer;border:none;border-radius:8px;align-items:center;gap:6px;padding:9px 14px;font-family:Inter,sans-serif;font-size:13px;font-weight:700;transition:transform .1s;display:inline-flex}.btn:active{transform:scale(.97)}.btn-primary{background:var(--accent);color:#fff;box-shadow:0 4px 12px #2a5b8c47}.btn-primary:hover{background:#234c76}.btn-ghost{background:var(--card);color:var(--ink);border:1px solid var(--border)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{filter:brightness(.96)}.btn-ghost:hover{background:var(--accent-soft)}.grid-wrap{background:var(--card);border:1px solid var(--grid-line);box-shadow:var(--shadow);border-radius:14px;overflow:hidden}.grid-scroll{-webkit-overflow-scrolling:touch;overflow:auto hidden}.head-row,.body-wrap{grid-template-columns:var(--hour-col-w,40px) repeat(var(--loc-count,1), minmax(160px,1fr));min-width:calc(var(--hour-col-w,40px) + var(--loc-count,1) * 160px);display:grid}.body-wrap{position:relative}.cell-head{border-bottom:1px solid var(--grid-line);text-align:center;background:#fbfcfd;padding:11px 8px}.corner-head{border-right:1px solid var(--grid-line);z-index:4;background:#fbfcfd;position:sticky;left:0;box-shadow:2px 0 6px #10161e14}.loc-head{border-right:1px solid var(--grid-line);box-shadow:inset -2px 0 #16202b0f}.loc-head .lname{font-size:12.5px;font-weight:800}.loc-head .ldot{vertical-align:middle;border-radius:50%;width:8px;height:8px;margin-right:6px;display:inline-block}.hour-col{border-right:1px solid var(--grid-line);z-index:3;background:#fbfcfd;position:sticky;left:0;box-shadow:2px 0 6px #10161e14}.hour-row{height:var(--hour-h);border-bottom:1px solid var(--grid-line-soft);color:var(--ink-soft);letter-spacing:-.02em;background:#fbfcfd;justify-content:center;align-items:flex-start;padding-top:4px;font-size:9.5px;font-weight:700;display:flex;position:relative}.track{border-right:1px solid var(--grid-line);background-image:repeating-linear-gradient(to bottom, transparent 0, transparent calc(var(--hour-h) / 4 - 1px), #d5dbe3 calc(var(--hour-h) / 4 - 1px), #d5dbe3 calc(var(--hour-h) / 4), transparent calc(var(--hour-h) / 4), transparent calc(var(--hour-h) / 2 - 1px), #b0b8c4 calc(var(--hour-h) / 2 - 1px), #b0b8c4 calc(var(--hour-h) / 2), transparent calc(var(--hour-h) / 2), transparent calc(var(--hour-h) * 3 / 4 - 1px), #d5dbe3 calc(var(--hour-h) * 3 / 4 - 1px), #d5dbe3 calc(var(--hour-h) * 3 / 4), transparent calc(var(--hour-h) * 3 / 4), transparent calc(var(--hour-h) - 1px), var(--grid-line) calc(var(--hour-h) - 1px), var(--grid-line) var(--hour-h));position:relative;box-shadow:inset -2px 0 #16202b0f}.track.is-today{background-color:#2a5b8c06}.add-lane{cursor:pointer;border-left:1.5px dashed var(--grid-line);background:#fbfcfdeb;justify-content:center;align-items:flex-start;height:100%;padding-top:8px;transition:background-color .12s,border-left-color .12s;display:flex;position:absolute;top:0}.add-lane:hover{background:var(--accent-soft);border-left-color:var(--accent)}.add-lane span{color:var(--ink-soft);font-size:13px;font-weight:700;line-height:1}.add-lane:hover span{color:var(--accent)}.shift-block{border:none;border-left:4px solid var(--block-color,#999);background:var(--block-bg,#eff2f5);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;padding:6px 3px;transition:filter .1s,box-shadow .1s;display:flex;position:absolute;overflow:hidden;box-shadow:0 1px 2px #10161e0f,inset 0 0 0 1px #ffffff59}.shift-block:hover{filter:brightness(.97);z-index:5;box-shadow:0 2px 8px #10161e24}.shift-block .sb-inner{flex-direction:row;justify-content:center;align-items:center;gap:5px;max-width:100%;height:100%;display:flex}.shift-block .sb-name{writing-mode:vertical-rl;text-orientation:sideways;color:var(--block-ink,var(--ink));letter-spacing:.02em;white-space:nowrap;text-overflow:ellipsis;max-height:100%;font-size:10.5px;font-weight:800;line-height:1.1;overflow:hidden;transform:rotate(180deg)}.shift-block .sb-time{writing-mode:vertical-rl;text-orientation:sideways;color:var(--block-ink,var(--ink-soft));opacity:.78;white-space:nowrap;letter-spacing:.01em;text-overflow:ellipsis;max-height:100%;font-size:8.5px;font-weight:700;line-height:1.1;overflow:hidden;transform:rotate(180deg)}.shift-block.compact .sb-name{font-size:9.5px}.shift-block.compact .sb-time{font-size:8px}.shift-block.tiny .sb-time{display:none}.shift-block.tiny .sb-name{font-size:9px}.summary{background:var(--card);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:12px;margin-top:18px;padding:14px 16px}.summary h3{text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft);margin-bottom:6px;font-size:12px}.summary-sub{color:var(--ink-soft);margin-bottom:10px;font-size:11.5px}.summary-row{flex-wrap:wrap;gap:10px;display:flex}.summary-item{background:var(--bg);border:1px solid var(--border-soft);border-radius:999px;align-items:center;gap:8px;padding:6px 12px 6px 6px;display:flex}.summary-item .av{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;font-size:10px;font-weight:800;display:flex}.summary-item .sname{font-size:12.5px;font-weight:700}.summary-item .shrs{color:var(--ink-soft);margin-left:2px;font-size:11.5px}.overlay{z-index:50;opacity:0;pointer-events:none;background:#10161e6b;justify-content:center;align-items:center;transition:opacity .15s;display:flex;position:fixed;inset:0}.overlay.open{opacity:1;pointer-events:auto}.modal{background:#fff;border-radius:14px;width:360px;max-width:90vw;padding:20px 20px 18px;transition:transform .15s;transform:translateY(8px);box-shadow:0 20px 60px #00000040}.overlay.open .modal{transform:translateY(0)}.overlay.audit-overlay .modal.audit-modal{border-radius:14px;width:min(960px,86vw);max-width:min(960px,86vw);height:min(78vh,780px);min-height:0;max-height:min(80vh,800px);padding:18px 20px 16px;transform:none;box-shadow:0 20px 60px #00000040}.modal h3{margin-bottom:2px;font-size:15px;font-weight:800}.modal .m-sub{color:var(--ink-soft);margin-bottom:14px;font-size:12.5px}.m-warn{color:#b4720a;background:#fbf0dc;border-radius:6px;margin-bottom:12px;padding:6px 9px;font-size:11.5px}.m-ok{color:#246748;background:#e6f4ec;border-radius:6px;margin-bottom:12px;padding:6px 9px;font-size:11.5px}.field{margin-bottom:12px}.field label{color:var(--ink-soft);text-transform:uppercase;letter-spacing:.03em;margin-bottom:5px;font-size:11px;font-weight:700;display:block}.field input,.field select{border:1px solid var(--border);width:100%;color:var(--ink);background:#fff;border-radius:8px;padding:9px 10px;font-family:inherit;font-size:13.5px}.field input:disabled,.field select:disabled{opacity:.65;cursor:not-allowed}.people-pick{border:1px solid var(--border);border-radius:8px;max-height:168px;padding:4px 0;overflow-y:auto}.people-pick label.pp-item{cursor:pointer;text-transform:none;letter-spacing:0;color:var(--ink);align-items:center;gap:8px;margin:0;padding:7px 10px;font-size:13px;font-weight:600;display:flex}.people-pick label.pp-item:hover{background:var(--accent-soft)}.people-pick label.pp-item input{accent-color:var(--accent);flex:none;width:15px;height:15px}.people-pick .pp-av{color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;width:20px;height:20px;font-size:8.5px;font-weight:800;display:flex}.people-pick .pp-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.people-pick .pp-badge{color:#8a6a20;text-overflow:ellipsis;white-space:nowrap;background:#fbf0dc;border-radius:4px;flex:none;max-width:14ch;padding:2px 6px;font-size:10px;font-weight:700;overflow:hidden}.people-pick .pp-badge-move{color:#8b3a1a;background:#f8e6dc}.people-pick .pp-badge-ok,.pp-edit-person .pp-badge-ok{color:#2f6b4f;background:#e7f5ee}.people-pick label.pp-busy,.pp-edit-person.pp-busy{background:#fff9f0}.pp-edit-person{border:1px solid var(--border);border-radius:8px;align-items:center;gap:8px;padding:9px 10px;font-size:13px;font-weight:600;display:flex}.pp-edit-person .pp-av{color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;width:20px;height:20px;font-size:8.5px;font-weight:800;display:flex}.pp-edit-person .pp-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.pp-edit-person .pp-badge{color:#8a6a20;text-overflow:ellipsis;white-space:nowrap;background:#fbf0dc;border-radius:4px;flex:none;max-width:16ch;padding:2px 6px;font-size:10px;font-weight:700;overflow:hidden}.pp-edit-person .pp-badge-move{color:#8b3a1a;background:#f8e6dc}.people-pick .pp-empty{color:var(--ink-soft);padding:10px 12px;font-size:12.5px}.btn-confirm-move{background:#c47a1a!important;border-color:#c47a1a!important}.time-row{gap:10px;display:flex}.time-row .field{flex:1;margin-bottom:0}.time-row input[type=time],.time-row input[type=date]{border:1px solid var(--border);border-radius:8px;width:100%;padding:8px 9px;font-family:inherit;font-size:13px}.check-card{border:1px solid var(--border);cursor:pointer;-webkit-user-select:none;user-select:none;background:#fff;border-radius:12px;align-items:flex-start;gap:10px;margin:4px 0 14px;padding:10px 12px;transition:border-color .12s,background .12s,box-shadow .12s;display:flex;position:relative}.check-card:hover{background:#fafcff;border-color:#c5d3e3}.check-card.is-on{background:#ffebee;border-color:#f1b0b0;box-shadow:0 0 0 3px #e5393514}.check-card-compact.is-on{background:var(--accent-soft);border-color:#b7cbe0;box-shadow:0 0 0 3px #2a5b8c14}.check-card input{opacity:0;pointer-events:none;width:1px;height:1px;margin:0;position:absolute}.check-card-box{background:#fff;border:1.5px solid #b8c4d1;border-radius:6px;flex:none;place-items:center;width:18px;height:18px;margin-top:1px;transition:border-color .12s,background .12s,box-shadow .12s;display:grid}.check-card-box:after{content:"";opacity:0;border-bottom:2px solid #0000;border-left:2px solid #0000;width:10px;height:6px;margin-top:-1px;transition:opacity .12s,transform .12s,border-color .12s;transform:rotate(-45deg)scale(.6)}.check-card.is-on .check-card-box{background:#e53935;border-color:#e53935;box-shadow:0 2px 6px #e5393547}.check-card-compact.is-on .check-card-box{border-color:var(--accent);background:var(--accent);box-shadow:0 2px 6px #2a5b8c47}.check-card.is-on .check-card-box:after{opacity:1;border-bottom-color:#fff;border-left-color:#fff;transform:rotate(-45deg)scale(1)}.check-card:has(input:disabled){opacity:.55;cursor:not-allowed}.check-card-text{flex-direction:column;gap:2px;min-width:0;display:flex}.check-card-title{color:var(--ink);font-size:13px;font-weight:700;line-height:1.25}.check-card-sub{color:var(--ink-soft);font-size:11.5px;font-weight:500;line-height:1.3}.check-card.is-on .check-card-title{color:#c62828}.check-card-compact.is-on .check-card-title{color:var(--accent)}.weekday-pick{grid-template-columns:repeat(7,minmax(0,1fr));gap:5px;display:grid}.weekday-chip{border:1px solid var(--border);cursor:pointer;-webkit-user-select:none;user-select:none;text-align:center;background:#fff;border-radius:8px;justify-content:center;align-items:center;min-height:28px;margin:0;padding:4px 2px;transition:border-color .12s,background .12s,color .12s,box-shadow .12s,transform .12s;display:flex;position:relative}.weekday-chip:hover{background:#fff8f8;border-color:#e0a8a8}.weekday-chip.is-on{color:#fff;background:#e53935;border-color:#e53935;box-shadow:0 2px 6px #e5393538}.weekday-chip input{opacity:0;pointer-events:none;width:1px;height:1px;margin:0;position:absolute}.weekday-chip-label{letter-spacing:.01em;text-align:center;width:100%;font-size:10.5px;font-weight:800;line-height:1;display:block}.weekday-chip.is-on .weekday-chip-label{color:#fff}.weekday-chip:has(input:disabled){opacity:.5;cursor:not-allowed;box-shadow:none;transform:none}@media (width<=420px){.weekday-pick{grid-template-columns:repeat(4,minmax(0,1fr))}}.modal-actions{flex-wrap:wrap;gap:8px;margin-top:16px;display:flex}.modal-actions .btn{flex:1;justify-content:center;min-width:0}.btn-delete{color:var(--danger);background:#fdeef2}.btn-delete:hover{background:#fbdfe7}.btn-add-same{background:var(--accent-soft);color:var(--accent);border:1px solid #0000}.btn-add-same:hover{border-color:var(--accent)}.people-modal ul{max-height:220px;margin:0;padding:0;list-style:none;overflow-y:auto}.people-modal li{border-bottom:1px solid var(--border-soft);align-items:center;gap:8px;padding:7px 2px;display:flex}.people-modal li .av{color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;width:22px;height:22px;font-size:9.5px;font-weight:800;display:flex}.people-modal li .pn{flex:1;font-size:13px;font-weight:600}.people-modal li button{color:var(--ink-soft);cursor:pointer;background:0 0;border:none;font-size:13px}.people-modal li button:hover{color:var(--danger)}.new-person-row{gap:8px;margin-top:12px;display:flex}.new-person-row input{border:1px solid var(--border);border-radius:8px;flex:1;padding:8px 10px;font-family:inherit;font-size:13px}.app-menu-overlay{z-index:80;opacity:0;pointer-events:none;background:#10161e6b;transition:opacity .18s;position:fixed;inset:0}.app-menu-overlay.open{opacity:1;pointer-events:auto}.app-menu-drawer{width:min(328px,90vw);padding:max(18px, env(safe-area-inset-top)) 16px max(24px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));-webkit-overflow-scrolling:touch;background:linear-gradient(#fff 0%,#f7f9fc 100%);flex-direction:column;gap:20px;transition:transform .2s;display:flex;position:absolute;top:0;bottom:0;left:0;overflow-y:auto;transform:translate(-104%);box-shadow:8px 0 32px #10161e2e}.app-menu-drawer.open{transform:translate(0)}.app-menu-head{border-bottom:1px solid var(--border-soft);justify-content:space-between;align-items:flex-start;gap:12px;padding-bottom:14px;display:flex}.app-menu-title{font-family:Manrope,sans-serif;font-size:18px;font-weight:800;line-height:1.25}.app-menu-version{color:var(--ink-soft);opacity:.85;font-variant-numeric:tabular-nums;margin-top:6px;font-size:11px;font-weight:600}.app-menu-close{border:1px solid var(--border);width:40px;height:40px;color:var(--ink-soft);cursor:pointer;-webkit-tap-highlight-color:transparent;background:#fff;border-radius:12px;justify-content:center;align-items:center;font-size:16px;transition:background .12s,color .12s;display:flex}.app-menu-close:hover{background:var(--accent-soft);color:var(--accent);border-color:#0000}.app-menu-section{flex-direction:column;gap:10px;display:flex}.app-menu-section-session{margin-top:auto;padding-top:4px}.app-menu-label{letter-spacing:.05em;text-transform:uppercase;color:var(--ink-soft);padding-left:4px;font-size:11px;font-weight:700}.app-menu-week{color:var(--ink);padding:0 4px 2px;font-size:15px;font-weight:700}.app-menu-week-actions{grid-template-columns:1fr 1fr 1fr;gap:8px;display:grid}.app-menu-nav-btn{border:1px solid var(--border);min-height:44px;color:var(--ink);cursor:pointer;-webkit-tap-highlight-color:transparent;background:#fff;border-radius:12px;padding:10px 6px;font-family:inherit;font-size:12px;font-weight:700;transition:background .12s,border-color .12s,color .12s}.app-menu-nav-btn:hover{background:var(--accent-soft);color:var(--accent);border-color:#0000}.app-menu-nav-btn:active{transform:scale(.98)}.app-menu-nav-btn.accent{background:var(--accent-soft);color:var(--accent);border-color:#0000}.app-menu-nav-btn.accent:hover{background:var(--accent);color:#fff}.app-menu-list{border:1px solid var(--border);background:#fff;border-radius:14px;flex-direction:column;display:flex;overflow:hidden;box-shadow:0 1px 2px #16202b08}.app-menu-section .app-menu-list+.app-menu-list{margin-top:2px}.app-menu-item{border:none;border-bottom:1px solid var(--border-soft);width:100%;min-height:52px;color:var(--ink);cursor:pointer;text-align:left;-webkit-tap-highlight-color:transparent;background:0 0;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;font-family:inherit;font-size:15px;font-weight:600;transition:background .12s;display:flex}.app-menu-item.nested{background:#f7f9fc;min-height:48px;padding:12px 16px 12px 28px;font-size:14px}.app-menu-list>.app-menu-item:last-child,.app-menu-sublist>.app-menu-item:last-child{border-bottom:none}.app-menu-item:hover{background:var(--accent-soft)}.app-menu-item.nested:hover{background:#e8f0f8}.app-menu-item:active{background:#dce8f4}.app-menu-item:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;z-index:1}.app-menu-item.danger{color:var(--danger)}.app-menu-item.danger:hover{background:#fceef3}.app-menu-group-toggle{font-weight:700}.app-menu-list.is-expanded>.app-menu-group-toggle{border-bottom-color:var(--border);background:var(--accent-soft);color:var(--accent)}.app-menu-sublist{border-top:1px solid var(--border-soft);flex-direction:column;display:flex}.app-menu-item-label{min-width:0}.app-menu-item-chevron{color:var(--ink-soft);opacity:.75;flex:none;font-size:20px;font-weight:400;line-height:1;transition:transform .15s,color .12s,opacity .12s}.app-menu-item-chevron.toggle{display:inline-block}.app-menu-item-chevron.toggle.open{color:var(--accent);opacity:1;transform:rotate(90deg)}.app-menu-item:hover .app-menu-item-chevron{color:var(--accent);opacity:1}.app-menu-item.danger:hover .app-menu-item-chevron{color:var(--danger)}body.menu-open{touch-action:none;overflow:hidden}.app-menu-view-toggle{border:1px solid var(--border);background:#fff;border-radius:14px;grid-template-columns:1fr 1fr;gap:0;display:grid;overflow:hidden;box-shadow:0 1px 2px #16202b08}.app-menu-view-btn{min-height:48px;color:var(--ink-soft);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;border-radius:0;font-family:inherit;font-size:14px;font-weight:700;transition:background .12s,color .12s}.app-menu-view-btn+.app-menu-view-btn{border-left:1px solid var(--border-soft)}.app-menu-view-btn:hover:not(.active){background:var(--accent-soft);color:var(--accent)}.app-menu-view-btn.active{background:var(--accent);color:#fff}.gantt-wrap{background:var(--card);border:1px solid var(--grid-line);box-shadow:var(--shadow);border-radius:14px;overflow:hidden}.gantt-scroll{-webkit-overflow-scrolling:touch;max-height:calc(100dvh - 180px);overflow:auto}.gantt-head,.gantt-row{grid-template-columns:var(--gantt-person-w,140px) repeat(var(--gantt-days,31), var(--gantt-day-w,72px));width:max-content;display:grid}.gantt-head{z-index:5;position:sticky;top:0}.gantt-corner,.gantt-person{z-index:3;border-right:1px solid var(--grid-line);background:#fbfcfd;position:sticky;left:0;box-shadow:2px 0 6px #10161e14}.gantt-corner{z-index:6;border-bottom:1px solid var(--grid-line);flex-direction:column;justify-content:center;gap:2px;padding:8px 10px;display:flex;position:sticky;top:0;left:0}.gantt-corner-title{text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft);font-size:11px;font-weight:800;line-height:1.2}.gantt-corner-hint{text-transform:none;letter-spacing:0;color:var(--accent);font-size:10px;font-weight:600;line-height:1.2}.gantt-day-head{border-bottom:1px solid var(--grid-line);border-right:1px solid var(--grid-line-soft);text-align:center;background:#fbfcfd;padding:6px 4px}.gantt-day-head.is-weekend{background:#f3f5f8}.gantt-day-head.is-current-week{background:#e8f0f8}.gantt-day-head.is-today{background:var(--accent-soft)}.gantt-dow{color:var(--ink-soft);text-transform:uppercase;font-size:9.5px;font-weight:700;display:block}.gantt-dom{margin-top:1px;font-size:14px;font-weight:800;display:block}.gantt-day-head.is-current-week .gantt-dom,.gantt-day-head.is-today .gantt-dom{color:var(--accent)}.gantt-person{border-bottom:1px solid var(--grid-line-soft);align-items:center;gap:8px;min-height:56px;padding:8px 10px;display:flex}.gantt-person-empty{color:var(--ink-soft);font-size:12.5px;font-weight:600}.gantt-av{color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;width:24px;height:24px;font-size:9.5px;font-weight:800;display:flex}.gantt-person-text{flex-direction:column;gap:1px;min-width:0;display:flex}.gantt-pname{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12.5px;font-weight:700;overflow:hidden}.gantt-pname-btn{width:100%;max-width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;margin:0;padding:0;font-size:12.5px;font-weight:700;display:block;overflow:hidden}.gantt-pname-btn:hover{color:var(--accent);text-decoration:underline}.gantt-pname-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}.gantt-phours{color:var(--ink-soft);font-size:11px;font-weight:600}.gantt-cell{border-right:1px solid var(--grid-line-soft);border-bottom:1px solid var(--grid-line-soft);flex-direction:column;gap:3px;min-height:64px;padding:4px;display:flex}.gantt-readonly .gantt-person{min-height:0;padding:6px 10px}.gantt-readonly .gantt-cell{gap:2px;min-height:0;padding:3px}.gantt-cell.is-weekend{background:#f3f5f8a6}.gantt-cell.is-current-week{background:#2a5b8c12}.gantt-cell.is-today{background:#2a5b8c1f}.gantt-bar{border:none;border-left:3px solid var(--bar-color,#999);background:var(--bar-bg,#eef1f5);cursor:pointer;text-align:left;-webkit-tap-highlight-color:transparent;border-radius:5px;flex-direction:column;align-items:flex-start;gap:1px;width:100%;padding:4px 5px;font-family:inherit;display:flex}.gantt-readonly .gantt-bar{padding:3px 5px}.gantt-bar:hover,.gantt-bar:active{filter:brightness(.97)}.gantt-bar-loc{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:10px;font-weight:800;overflow:hidden}.gantt-bar-time{color:var(--ink-soft);font-size:9px;font-weight:600}.gantt-bar-vacation .gantt-bar-loc{color:#5b6675;font-weight:700}.gantt-bar-franco .gantt-bar-loc{color:#c62828;font-weight:700}.vacation-modal{max-width:min(420px,92vw)}.vac-list{max-height:220px;margin:0;padding:0;list-style:none;overflow-y:auto}.vac-list li{border-bottom:1px solid var(--border-soft)}.vac-list-row{align-items:center;gap:8px;padding:8px 2px;display:flex}.vac-list-text{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.vac-list-row .pn{color:var(--ink);font-size:13px;font-weight:600}.vac-list-range{color:var(--ink-soft);font-size:11.5px}.vac-list-remove{color:var(--ink-soft);cursor:pointer;background:0 0;border:none;padding:4px 6px;font-family:inherit;font-size:13px}.vac-list-remove:hover{color:var(--danger)}.vac-remove-actions{flex-wrap:wrap}.gantt-add{border:1px dashed var(--grid-line-soft);width:28px;height:18px;color:var(--ink-soft);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:4px;justify-content:center;align-self:center;align-items:center;margin-top:auto;padding:0;font-family:inherit;font-size:12px;font-weight:700;line-height:1;display:inline-flex}.gantt-add:hover{border-color:var(--accent);color:var(--accent);background:#fff}@media (width<=760px){.planner-root{padding:12px 12px max(28px, env(safe-area-inset-bottom));padding-left:max(12px, env(safe-area-inset-left));padding-right:max(12px, env(safe-area-inset-right))}.topbar{gap:10px;margin-bottom:12px}.day-tabs{scrollbar-width:none;gap:5px;margin-bottom:12px}.day-tabs::-webkit-scrollbar{display:none}.day-tab{flex:none;min-width:64px;padding:10px 4px}.day-tab .dn{font-size:10px}.day-tab .dd{font-size:15px}.week-nav button{width:36px;height:36px}.head-row,.body-wrap{min-width:760px}.overlay{align-items:flex-end}.overlay.audit-overlay{align-items:flex-end;padding:0}.modal{width:100%;max-width:100%;max-height:min(92vh,100%);padding-bottom:max(18px, env(safe-area-inset-bottom));border-radius:16px 16px 0 0;overflow-y:auto}.overlay.audit-overlay .modal.audit-modal{width:100%;max-width:100%;height:min(92vh,100%);max-height:min(92vh,100%);padding:16px 14px max(14px, env(safe-area-inset-bottom));border-radius:16px 16px 0 0;overflow:hidden}.modal-actions .btn{min-height:44px}.gantt-scroll{max-height:calc(100dvh - 160px)}}
