:root{--g-arrow-color: #1f2937;--g-bar-color: #fff;--g-bar-border: #fff;--g-tick-color-thick: #ededed;--g-tick-color: #f3f3f3;--g-actions-background: #f3f3f3;--g-border-color: #ebeff2;--g-text-muted: #7c7c7c;--g-text-light: #fff;--g-text-dark: #171717;--g-progress-color: #dbdbdb;--g-handle-color: #37352f;--g-weekend-label-color: #dcdce4;--g-expected-progress: #c4c4e9;--g-header-background: #fff;--g-row-color: #fdfdfd;--g-row-border-color: #c7c7c7;--g-today-highlight: #37352f;--g-popup-actions: #ebeff2;--g-weekend-highlight-color: #f7f7f7}html[data-theme=dark]{--g-arrow-color: #e5e5e5;--g-bar-color: #2a2a2a;--g-bar-border: #3a3a3a;--g-tick-color-thick: #1a1a1a;--g-tick-color: #0a0a0a;--g-actions-background: #1a1a1a;--g-border-color: #2a2a2a;--g-text-muted: #999999;--g-text-light: #ffffff;--g-text-dark: #f5f5f5;--g-progress-color: #4a4a4a;--g-handle-color: #d0d0d0;--g-weekend-label-color: #3a3a3a;--g-expected-progress: #5a5a5a;--g-header-background: #0a0a0a;--g-row-color: #141414;--g-row-border-color: #2a2a2a;--g-today-highlight: #999999;--g-popup-actions: #1a1a1a;--g-weekend-highlight-color: #0f0f0f}.gantt-container{line-height:14.5px;position:relative;overflow:auto;font-size:12px;height:var(--gv-grid-height);width:100%;border-radius:8px;isolation:isolate}.gantt-container .popup-wrapper{position:absolute;top:0;left:0;background:var(--g-header-background);box-shadow:0 10px 24px -3px #0003;padding:10px;border-radius:5px;width:max-content;z-index:1000}.gantt-container .popup-wrapper .title{margin-bottom:2px;color:var(--g-text-dark);font-size:.85rem;font-weight:650;line-height:15px}.gantt-container .popup-wrapper .subtitle{color:var(--g-text-dark);font-size:.8rem;margin-bottom:5px}.gantt-container .popup-wrapper .details{color:var(--g-text-muted);font-size:.7rem}.gantt-container .popup-wrapper .actions{margin-top:10px;margin-left:3px}.gantt-container .popup-wrapper .action-btn{border:none;padding:5px 8px;background-color:var(--g-popup-actions);border-right:1px solid var(--g-border-color)}.gantt-container .popup-wrapper .action-btn:hover{filter:brightness(97%)}.gantt-container .popup-wrapper .action-btn:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.gantt-container .popup-wrapper .action-btn:last-child{border-right:none;border-top-right-radius:4px;border-bottom-right-radius:4px}.gantt-container .grid-header{height:calc(var(--gv-lower-header-height) + var(--gv-upper-header-height) + 10px);background-color:var(--g-header-background);position:sticky;top:0;left:0;border-bottom:1px solid var(--g-row-border-color);z-index:1000}.gantt-container .lower-text,.gantt-container .upper-text{text-anchor:middle}.gantt-container .upper-header{height:var(--gv-upper-header-height)}.gantt-container .lower-header{height:var(--gv-lower-header-height)}.gantt-container .lower-text{font-size:12px;position:absolute;width:calc(var(--gv-column-width) * .8);height:calc(var(--gv-lower-header-height) * .8);margin:0 calc(var(--gv-column-width) * .1);align-content:center;text-align:center;color:var(--g-text-muted)}.gantt-container .upper-text{position:absolute;width:fit-content;font-weight:500;font-size:14px;color:var(--g-text-dark);height:calc(var(--gv-lower-header-height) * .66)}.gantt-container .current-upper{position:sticky;left:0!important;padding-left:17px;background:var(--g-header-background)}.gantt-container .side-header{position:sticky;top:0;right:0;float:right;z-index:1000;line-height:20px;font-weight:400;width:max-content;margin-left:auto;padding-right:10px;padding-top:10px;background:var(--g-header-background);display:flex}.gantt-container .side-header *{transition-property:background-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;background-color:var(--g-actions-background);border-radius:.5rem;border:none;padding:5px 8px;color:var(--g-text-dark);font-size:14px;letter-spacing:.02em;font-weight:420;box-sizing:content-box;margin-right:5px}.gantt-container .side-header *:last-child{margin-right:0}.gantt-container .side-header *:hover{filter:brightness(97.5%)}.gantt-container .side-header select{width:60px;padding-top:2px;padding-bottom:2px}.gantt-container .side-header select:focus{outline:none}.gantt-container .date-range-highlight{background-color:var(--g-progress-color);border-radius:12px;height:calc(var(--gv-lower-header-height) - 6px);top:calc(var(--gv-upper-header-height) + 5px);position:absolute}.gantt-container .current-highlight{position:absolute;background:var(--g-today-highlight);width:1px;z-index:999}.gantt-container .current-ball-highlight{position:absolute;background:var(--g-today-highlight);z-index:1001;border-radius:50%}.gantt-container .current-date-highlight{background:var(--g-today-highlight);color:var(--g-text-light);border-radius:5px}.gantt-container .holiday-label{position:absolute;top:0;left:0;opacity:0;z-index:1000;background:var(--g-weekend-label-color);border-radius:5px;padding:2px 5px}.gantt-container .holiday-label.show{opacity:100}.gantt-container .extras{position:sticky;left:0}.gantt-container .extras .adjust{position:absolute;left:8px;top:calc(var(--gv-grid-height) - 60px);background-color:var(--g-actions-background);color:var(--g-text-light);border:none;padding:8px;border-radius:3px}.gantt-container .hide{display:none}.gantt{user-select:none;-webkit-user-select:none;position:absolute}.gantt .grid-background{fill:none}.gantt .grid-row{fill:var(--g-row-color)}.gantt .row-line{stroke:var(--g-border-color)}.gantt .tick{stroke:var(--g-tick-color);stroke-width:.4}.gantt .tick.thick{stroke:var(--g-tick-color-thick);stroke-width:.7}.gantt .arrow{fill:none;stroke:var(--g-arrow-color);stroke-width:1.5}.gantt .bar-wrapper .bar{fill:var(--g-bar-color);stroke:var(--g-bar-border);stroke-width:0;transition:stroke-width .3s ease}.gantt .bar-progress{fill:var(--g-progress-color);border-radius:4px}.gantt .bar-expected-progress{fill:var(--g-expected-progress)}.gantt .bar-invalid{fill:transparent;stroke:var(--g-bar-border);stroke-width:1;stroke-dasharray:5}:is(.gantt .bar-invalid)~.bar-label{fill:var(--g-text-light)}.gantt .bar-label{fill:var(--g-text-dark);dominant-baseline:central;font-family:Helvetica;font-size:13px;font-weight:400}.gantt .bar-label.big{fill:var(--g-text-dark);text-anchor:start}.gantt .handle{fill:var(--g-handle-color);opacity:0;transition:opacity .3s ease}.gantt .handle.active,.gantt .handle.visible{cursor:ew-resize;opacity:1}.gantt .handle.progress{fill:var(--g-text-muted)}.gantt .bar-wrapper{cursor:pointer}.gantt .bar-wrapper .bar{outline:1px solid var(--g-row-border-color);border-radius:3px}.gantt .bar-wrapper:hover .bar{transition:transform .3s ease}.gantt .bar-wrapper:hover .date-range-highlight{display:block}.gantt .grid-column{fill:transparent;pointer-events:all}.gantt .grid-column:hover{fill:var(--g-weekend-highlight-color);transition:fill .1s ease}:root{--bg: #f4f6fb;--surface: #ffffff;--surface-2: #f8fafc;--border: #e6e9f0;--text: #1e293b;--muted: #64748b;--faint: #94a3b8;--primary: #2563eb;--primary-hover: #1d4ed8;--primary-soft: #eef4ff;--success: #16a34a;--success-soft: #e9f7ef;--danger: #dc2626;--danger-soft: #fdecec;--warning: #d97706;--warning-soft: #fff7ed;--sidebar: #0f172a;--sidebar-2: #1e293b;--sidebar-text: #cbd5e1;--radius: 10px;--radius-sm: 7px;--shadow: 0 1px 2px rgba(15, 23, 42, .04), 0 2px 8px rgba(15, 23, 42, .06);--shadow-lg: 0 8px 30px rgba(15, 23, 42, .12);--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);color:var(--text);background:var(--bg);font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{color:#0f172a;line-height:1.25;margin:0 0 .5em;font-weight:650}h2{font-size:1.5rem}h3{font-size:1.15rem;margin-top:.4em}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}p{margin:0 0 .8em}.muted{color:var(--muted)}.small{font-size:.82rem}button,.btn{font-family:inherit;font-size:.9rem;padding:8px 14px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;transition:background .15s,border-color .15s,box-shadow .15s,transform .05s;line-height:1.2}button:hover,.btn:hover{background:var(--surface-2);border-color:#d2d8e3}button:active,.btn:active{transform:translateY(1px)}button:disabled,.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary,button.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:550}.btn-primary:hover{background:var(--primary-hover);border-color:var(--primary-hover)}.btn-block{display:block;width:100%;padding:10px;margin-top:12px}input,select,textarea,.input{font-family:inherit;font-size:.92rem;padding:9px 11px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);transition:border-color .15s,box-shadow .15s}input:focus,select:focus,textarea:focus,.input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}label{display:block;margin-bottom:12px;font-size:.9rem;color:#334155}label>input,label>select,label>textarea{width:100%;margin-top:5px}table{width:100%;border-collapse:collapse}th{text-align:left;font-size:.78rem;text-transform:uppercase;letter-spacing:.03em;color:var(--faint);font-weight:600;padding:10px;border-bottom:1px solid var(--border)}td{padding:11px 10px;border-bottom:1px solid var(--border);vertical-align:middle}tbody tr:hover td{background:var(--surface-2)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px 20px}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:.76rem;font-weight:600;border:1px solid transparent}.alert{border-radius:var(--radius-sm);padding:10px 12px;margin-top:12px;font-size:.9rem}.alert-error{background:var(--danger-soft);color:#991b1b}.app-shell{display:flex;min-height:100vh}.sidebar{width:224px;flex-shrink:0;background:var(--sidebar);color:var(--sidebar-text);display:flex;flex-direction:column;padding:18px 14px;position:sticky;top:0;height:100vh}.sidebar .brand{display:flex;align-items:center;gap:10px;padding:4px 8px 18px;color:#fff;font-weight:700;font-size:1.05rem}.brand-badge{display:inline-grid;place-items:center;width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;font-weight:800;font-size:.7rem;letter-spacing:.02em;box-shadow:0 2px 8px #2563eb80}.nav-group{display:flex;flex-direction:column;gap:2px}.nav-label{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:#64748b;padding:14px 8px 6px}.nav-link{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:8px;color:var(--sidebar-text);font-size:.9rem;transition:background .15s,color .15s}.nav-link:hover{background:var(--sidebar-2);color:#fff;text-decoration:none}.nav-link.active{background:var(--primary);color:#fff;font-weight:550}.nav-link .ic{width:18px;text-align:center;opacity:.9}.sidebar .user-chip{margin-top:auto;padding:12px 8px 4px;border-top:1px solid var(--sidebar-2);font-size:.85rem}.sidebar .user-chip .name{color:#fff;font-weight:550}.sidebar .logout{margin-top:8px;width:100%;background:transparent;border-color:var(--sidebar-2);color:var(--sidebar-text)}.sidebar .logout:hover{background:var(--sidebar-2);color:#fff}.content{flex:1;min-width:0;padding:28px 32px;max-width:1100px}.login{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-lg);padding:32px;width:100%;max-width:380px;text-align:center}.login-card .brand-badge{width:48px;height:48px;font-size:.85rem;margin:0 auto 14px}.login-card h1{font-size:1.35rem;margin-bottom:4px}.login-card form{margin-top:18px}.login-card .input{width:100%;text-align:center;font-size:1.1rem;letter-spacing:.15em}.login-hint{margin-top:18px;text-align:left;line-height:1.5}.gantt-wrap .gantt .grid-header{fill:#f8fafc}.gantt-wrap .gantt .row-line{stroke:#f0f3f8}.gantt-wrap .gantt .tick{stroke:#eef2f7}.gantt-wrap .gantt .tick.thick{stroke:#e2e8f0}.gantt-wrap .gantt .lower-text,.gantt-wrap .gantt .upper-text{fill:#64748b;font-size:11px}.gantt-wrap .gantt .today-highlight{fill:#fde68a;opacity:.4}.gantt-wrap .gantt .bar{fill:#e2e8f0;stroke:none;rx:3;ry:3}.gantt-wrap .gantt .bar-progress{fill:#2563eb;rx:3;ry:3}.gantt-wrap .gantt .bar-label{fill:#fff;font-weight:500}.gantt-wrap .gantt .bar-label.big{fill:#334155}.gantt-wrap .st-in_progress .bar-progress{fill:#f59e0b}.gantt-wrap .st-closed .bar-progress{fill:#22c55e}.gantt-wrap .st-confirmed .bar-progress{fill:#14b8a6}.gantt-wrap .st-done_pending .bar-progress{fill:#8b5cf6}.gantt-wrap .st-paused .bar-progress,.gantt-wrap .st-postponed .bar-progress{fill:#94a3b8}.segmented{display:inline-flex;background:var(--surface-2);border:1px solid var(--border);border-radius:8px;padding:2px;gap:2px}.segmented button{border:none;background:transparent;padding:5px 12px;border-radius:6px;font-size:.85rem}.segmented button.active{background:var(--surface);color:var(--primary);font-weight:600;box-shadow:var(--shadow)}.legend{display:flex;flex-wrap:wrap;gap:14px;margin:12px 0;font-size:.82rem;color:var(--muted)}.legend span{display:inline-flex;align-items:center;gap:6px}.legend i{width:12px;height:12px;border-radius:3px;display:inline-block}.qr-grid{display:flex;flex-wrap:wrap;gap:20px;margin-top:16px}.qr-card{width:300px;text-align:center}.qr-card h3{margin-top:0}.qr-box{display:inline-block;padding:14px;background:#fff;border:1px solid var(--border);border-radius:var(--radius);margin:6px 0 12px}.qr-box canvas{display:block}@media print{.sidebar,.qr-actions{display:none!important}.app-shell{display:block}.content{padding:0;max-width:none}.qr-card{border-color:#ccc;box-shadow:none;page-break-inside:avoid}}@media (max-width: 720px){.app-shell{flex-direction:column}.sidebar{width:100%;height:auto;position:static;flex-direction:row;flex-wrap:wrap;align-items:center;gap:4px;padding:10px 12px}.sidebar .brand{padding:0 10px 0 4px}.nav-label,.sidebar .user-chip{display:none}.content{padding:18px 16px}}
