:root{color-scheme:light dark;--teal-50: #eefbfa;--teal-100: #d5f5f3;--teal-200: #aeeae6;--teal-300: #77d9d3;--teal-400: #3cc0ba;--teal-500: #0ea5a0;--teal-600: #0b8a86;--teal-700: #0d6e6b;--teal-800: #105857;--teal-900: #114948;--gray-0: #ffffff;--gray-50: #f8fafc;--gray-100: #f1f5f9;--gray-200: #e2e8f0;--gray-300: #cbd5e1;--gray-400: #94a3b8;--gray-500: #64748b;--gray-600: #475569;--gray-700: #334155;--gray-800: #1e293b;--gray-900: #0f172a;--gray-950: #020617;--red-50: #fef2f2;--red-100: #fee2e2;--red-200: #fecaca;--red-500: #ef4444;--red-600: #dc2626;--red-700: #b91c1c;--amber-50: #fffbeb;--amber-100: #fef3c7;--amber-200: #fde68a;--amber-500: #f59e0b;--amber-600: #d97706;--amber-700: #b45309;--green-50: #f0fdf4;--green-100: #dcfce7;--green-200: #bbf7d0;--green-500: #22c55e;--green-600: #16a34a;--green-700: #15803d;--blue-50: #eff6ff;--blue-100: #dbeafe;--blue-200: #bfdbfe;--blue-500: #3b82f6;--blue-600: #2563eb;--blue-700: #1d4ed8;--orange-50: #fff7ed;--orange-100: #fdf0e2;--orange-500: #ea8a3d;--orange-700: #c2660f;--color-bg: #f4f6f9;--color-surface: var(--gray-0);--color-surface-sunken: var(--gray-50);--color-surface-hover: var(--gray-100);--color-surface-raised: var(--gray-0);--color-border: var(--gray-200);--color-border-strong: var(--gray-300);--color-text: var(--gray-800);--color-text-muted: var(--gray-600);--color-text-faint: var(--gray-500);--color-text-inverse: var(--gray-0);--color-primary: var(--teal-500);--color-primary-solid: var(--teal-700);--color-primary-hover: var(--teal-800);--color-primary-text: var(--teal-700);--color-primary-subtle: var(--teal-50);--color-primary-border: var(--teal-200);--color-on-primary: #ffffff;--color-danger: var(--red-600);--color-danger-hover: var(--red-700);--color-danger-text: var(--red-700);--color-danger-subtle: var(--red-50);--color-danger-border: var(--red-200);--color-warning: var(--amber-500);--color-warning-text: var(--amber-700);--color-warning-subtle: var(--amber-50);--color-warning-border: var(--amber-200);--color-success: var(--green-600);--color-success-solid: var(--green-700);--color-success-hover: #14532d;--color-success-text: var(--green-700);--color-success-subtle: var(--green-50);--color-success-border: var(--green-200);--color-info: var(--blue-600);--color-info-text: var(--blue-700);--color-info-subtle: var(--blue-50);--color-info-border: var(--blue-200);--color-accent: var(--orange-500);--color-accent-text: var(--orange-700);--color-accent-subtle: var(--orange-100);--color-sunday: var(--red-600);--color-saturday: var(--blue-600);--color-sunday-bg: #fdf2f4;--color-saturday-bg: #f2f6fd;--color-overlay: rgba(15, 23, 42, .45);--color-tooltip-bg: var(--gray-900);--color-tooltip-text: var(--gray-0);--font-sans: "Hiragino Kaku Gothic ProN", "Yu Gothic UI", "Meiryo", system-ui, -apple-system, sans-serif;--font-numeric: tabular-nums;--text-2xs: 10px;--text-xs: 11px;--text-sm: 12px;--text-base: 13px;--text-md: 14px;--text-lg: 16px;--text-xl: 19px;--text-2xl: 24px;--leading-tight: 1.3;--leading-normal: 1.5;--leading-relaxed: 1.7;--weight-normal: 400;--weight-medium: 500;--weight-semibold: 600;--weight-bold: 700;--space-1: 4px;--space-2: 6px;--space-3: 8px;--space-4: 10px;--space-5: 12px;--space-6: 16px;--space-7: 20px;--space-8: 24px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 999px;--shadow-sm: 0 1px 3px rgba(15, 23, 42, .08);--shadow-md: 0 4px 12px rgba(15, 23, 42, .1);--shadow-lg: 0 10px 40px rgba(15, 23, 42, .2);--focus-ring: 0 0 0 3px var(--color-primary-border);--focus-ring-offset: 2px;--transition-fast: .12s ease}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--color-bg: var(--gray-950);--color-surface: #0f1729;--color-surface-sunken: #0b1220;--color-surface-hover: #1a2438;--color-surface-raised: #162034;--color-border: #24314b;--color-border-strong: #35455f;--color-text: #e6ecf5;--color-text-muted: #94a3b8;--color-text-faint: #64748b;--color-text-inverse: var(--gray-900);--color-primary: var(--teal-400);--color-primary-solid: var(--teal-400);--color-primary-hover: var(--teal-300);--color-primary-text: var(--teal-300);--color-primary-subtle: rgba(14, 165, 160, .16);--color-primary-border: rgba(14, 165, 160, .42);--color-on-primary: #04211f;--color-danger: var(--red-500);--color-danger-hover: var(--red-600);--color-danger-text: #fca5a5;--color-danger-subtle: rgba(239, 68, 68, .14);--color-danger-border: rgba(239, 68, 68, .38);--color-warning: var(--amber-500);--color-warning-text: #fcd34d;--color-warning-subtle: rgba(245, 158, 11, .14);--color-warning-border: rgba(245, 158, 11, .38);--color-success: var(--green-500);--color-success-solid: var(--green-500);--color-success-hover: var(--green-600);--color-success-text: #86efac;--color-success-subtle: rgba(34, 197, 94, .14);--color-success-border: rgba(34, 197, 94, .38);--color-info: var(--blue-500);--color-info-text: #93c5fd;--color-info-subtle: rgba(59, 130, 246, .14);--color-info-border: rgba(59, 130, 246, .38);--color-accent: var(--orange-500);--color-accent-text: #fbbf74;--color-accent-subtle: rgba(234, 138, 61, .16);--color-sunday: #fca5a5;--color-saturday: #93c5fd;--color-sunday-bg: rgba(239, 68, 68, .09);--color-saturday-bg: rgba(59, 130, 246, .09);--color-overlay: rgba(2, 6, 23, .7);--color-tooltip-bg: #e6ecf5;--color-tooltip-text: var(--gray-900);--shadow-sm: 0 1px 3px rgba(0, 0, 0, .4);--shadow-md: 0 4px 12px rgba(0, 0, 0, .5);--shadow-lg: 0 10px 40px rgba(0, 0, 0, .6)}}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark;--color-bg: var(--gray-950);--color-surface: #0f1729;--color-surface-sunken: #0b1220;--color-surface-hover: #1a2438;--color-surface-raised: #162034;--color-border: #24314b;--color-border-strong: #35455f;--color-text: #e6ecf5;--color-text-muted: #94a3b8;--color-text-faint: #64748b;--color-text-inverse: var(--gray-900);--color-primary: var(--teal-400);--color-primary-solid: var(--teal-400);--color-primary-hover: var(--teal-300);--color-primary-text: var(--teal-300);--color-primary-subtle: rgba(14, 165, 160, .16);--color-primary-border: rgba(14, 165, 160, .42);--color-on-primary: #04211f;--color-danger: var(--red-500);--color-danger-hover: var(--red-600);--color-danger-text: #fca5a5;--color-danger-subtle: rgba(239, 68, 68, .14);--color-danger-border: rgba(239, 68, 68, .38);--color-warning: var(--amber-500);--color-warning-text: #fcd34d;--color-warning-subtle: rgba(245, 158, 11, .14);--color-warning-border: rgba(245, 158, 11, .38);--color-success: var(--green-500);--color-success-solid: var(--green-500);--color-success-hover: var(--green-600);--color-success-text: #86efac;--color-success-subtle: rgba(34, 197, 94, .14);--color-success-border: rgba(34, 197, 94, .38);--color-info: var(--blue-500);--color-info-text: #93c5fd;--color-info-subtle: rgba(59, 130, 246, .14);--color-info-border: rgba(59, 130, 246, .38);--color-accent: var(--orange-500);--color-accent-text: #fbbf74;--color-accent-subtle: rgba(234, 138, 61, .16);--color-sunday: #fca5a5;--color-saturday: #93c5fd;--color-sunday-bg: rgba(239, 68, 68, .09);--color-saturday-bg: rgba(59, 130, 246, .09);--color-overlay: rgba(2, 6, 23, .7);--color-tooltip-bg: #e6ecf5;--color-tooltip-text: var(--gray-900);--shadow-sm: 0 1px 3px rgba(0, 0, 0, .4);--shadow-md: 0 4px 12px rgba(0, 0, 0, .5);--shadow-lg: 0 10px 40px rgba(0, 0, 0, .6)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font-sans);background:var(--color-bg);color:var(--color-text);line-height:var(--leading-normal)}button{font-family:inherit;cursor:pointer;color:inherit}input,select,textarea{font-family:inherit;color:inherit}.num,table,.val,.total-col,.stat-line,.chip{font-variant-numeric:var(--font-numeric)}:where(button,a,input,select,textarea,[tabindex]):focus-visible{outline:2px solid var(--color-primary);outline-offset:var(--focus-ring-offset)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media print{:root,:root[data-theme=dark]{--color-bg: #ffffff;--color-surface: #ffffff;--color-surface-sunken: #f8fafc;--color-surface-hover: #f1f5f9;--color-surface-raised: #ffffff;--color-border: #cbd5e1;--color-border-strong: #94a3b8;--color-text: #0f172a;--color-text-muted: #475569;--color-text-faint: #64748b;--color-sunday: #dc2626;--color-saturday: #2563eb;--color-sunday-bg: #fdf2f4;--color-saturday-bg: #f2f6fd}}body{font-size:var(--text-md)}input,select,textarea{font-size:var(--text-base)}.shell{display:grid;grid-template-columns:auto 1fr;height:100vh;overflow:hidden}.sidebar{width:224px;flex:none;display:flex;flex-direction:column;gap:2px;padding:var(--space-5) var(--space-4);background:var(--color-surface);border-right:1px solid var(--color-border);overflow-y:auto}.sidebar.collapsed{width:68px;padding-left:var(--space-3);padding-right:var(--space-3)}.brand{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3) var(--space-6);font-weight:var(--weight-bold);font-size:var(--text-lg);letter-spacing:.01em}.brand .mark{width:28px;height:28px;border-radius:var(--radius-md);flex:none;background:var(--color-primary-solid);color:var(--color-on-primary);display:grid;place-items:center;font-size:var(--text-md)}.sidebar.collapsed .brand{padding:var(--space-2) 0 var(--space-6);justify-content:center}.nav-item{display:flex;align-items:center;gap:var(--space-4);padding:var(--space-4) var(--space-4);border-radius:var(--radius-md);color:var(--color-text-muted);font-weight:var(--weight-semibold);font-size:var(--text-base);text-decoration:none;position:relative;white-space:nowrap}.nav-item:hover{background:var(--color-surface-hover);color:var(--color-text)}.nav-item[aria-current=page]{background:var(--color-primary-subtle);color:var(--color-primary-text)}.nav-item[aria-current=page]:before{content:"";position:absolute;left:0;top:20%;bottom:20%;width:3px;border-radius:var(--radius-full);background:var(--color-primary-solid)}.nav-item .ico{flex:none;display:inline-flex}.nav-item .count{margin-left:auto;background:var(--color-danger);color:#fff;border-radius:var(--radius-full);font-size:var(--text-2xs);min-width:18px;height:18px;padding:0 5px;display:inline-flex;align-items:center;justify-content:center}.sidebar.collapsed .nav-item{justify-content:center;padding:var(--space-4) 0}.sidebar.collapsed .nav-item .label{display:none}.sidebar.collapsed .nav-item .count{position:absolute;top:3px;right:8px;margin:0}.nav-sep{height:1px;background:var(--color-border);margin:var(--space-4) var(--space-3)}.nav-foot{margin-top:auto;padding-top:var(--space-4)}.main{display:flex;flex-direction:column;min-width:0;height:100vh}.topbar{flex:none;display:flex;align-items:center;gap:var(--space-4);padding:var(--space-4) var(--space-6);background:var(--color-surface);border-bottom:1px solid var(--color-border);min-height:58px;flex-wrap:wrap}.topbar .title{font-size:var(--text-lg);font-weight:var(--weight-bold)}.month-nav{display:inline-flex;align-items:center;gap:2px}.month-nav .label{min-width:116px;text-align:center;font-weight:var(--weight-bold);font-size:var(--text-md);font-variant-numeric:var(--font-numeric)}.content{flex:1;min-height:0;overflow-y:auto;padding:var(--space-6)}.content.fill{overflow:hidden;display:flex;flex-direction:column;gap:var(--space-4)}.content.fill>.card{margin-bottom:0}.content.fill>.card:last-child{flex:1;min-height:0;display:flex;flex-direction:column;padding:var(--space-3) var(--space-4) var(--space-4)}.content.fill .grid-wrap{flex:1;min-height:140px;max-height:none}.content.fill .daily-wrap{flex:1;min-height:140px}.page-head{margin-bottom:var(--space-6)}.page-title{font-size:var(--text-xl);font-weight:var(--weight-bold);margin:0 0 2px}.page-sub{color:var(--color-text-muted);font-size:var(--text-sm)}.page-body{max-width:1100px}.toolbar{padding:var(--space-4) var(--space-5)}.toolbar-sep{height:1px;background:var(--color-border);margin:var(--space-4) 0}.toolbar .divider{width:1px;height:24px;background:var(--color-border);flex:none}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--space-4)}.kpi{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-3) var(--space-5)}.kpi .k{font-size:var(--text-xs);color:var(--color-text-muted);font-weight:var(--weight-semibold)}.kpi .v{font-size:var(--text-xl);font-weight:var(--weight-bold);margin-top:2px;font-variant-numeric:var(--font-numeric);line-height:1.2}.kpi .v small{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--color-text-muted);margin-left:2px}.kpi .s{font-size:var(--text-xs);color:var(--color-text-muted);margin-top:2px}.kpi.warn .v{color:var(--color-warning-text)}.kpi.danger .v{color:var(--color-danger-text)}.savebar{flex:none;display:flex;align-items:center;gap:var(--space-4);padding:var(--space-4) var(--space-6);background:var(--color-surface);border-top:2px solid var(--color-warning);box-shadow:0 -4px 16px #0f172a14}.savebar .lead{font-weight:var(--weight-bold);font-size:var(--text-base)}.savebar .lead .n{color:var(--color-warning-text)}.caret{color:var(--color-text-muted);display:inline-flex;transition:transform var(--transition-fast)}.caret.open{transform:rotate(90deg)}.empty{text-align:center;padding:48px var(--space-6);color:var(--color-text-muted)}.empty .ico{color:var(--color-text-faint);margin-bottom:var(--space-4);display:inline-flex}.empty .t{font-weight:var(--weight-bold);font-size:var(--text-md);color:var(--color-text);margin-bottom:var(--space-2)}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.45}}.skeleton{background:var(--color-surface-hover);border-radius:var(--radius-sm);animation:skeleton-pulse 1.4s ease-in-out infinite}.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}.skip-link{position:fixed;top:-60px;left:var(--space-4);z-index:200;background:var(--color-primary-solid);color:var(--color-on-primary);padding:var(--space-4) var(--space-6);border-radius:var(--radius-md);font-weight:var(--weight-bold);text-decoration:none}.skip-link:focus{top:var(--space-4)}@media(max-width:1180px){.sidebar{width:68px;padding-left:var(--space-3);padding-right:var(--space-3)}.sidebar .brand{padding:var(--space-2) 0 var(--space-6);justify-content:center}.sidebar .nav-item{justify-content:center;padding:var(--space-4) 0}.sidebar .nav-item .label{display:none}.sidebar .nav-item .count{position:absolute;top:3px;right:8px;margin:0}}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:var(--space-6) var(--space-6);margin-bottom:var(--space-5)}.portal-access-card{display:flex;align-items:center;gap:var(--space-8);background:var(--color-primary-subtle);border-color:var(--color-primary-border)}.portal-qr{flex:none;padding:var(--space-3);background:#fff;border:1px solid var(--color-border-strong);border-radius:var(--radius-md);line-height:0}.portal-access-info{min-width:0}.portal-access-info h2{margin:0 0 var(--space-2);font-size:var(--text-lg)}.portal-access-info p{margin:0 0 var(--space-3);color:var(--color-text-muted)}.portal-url{display:block;max-width:100%;overflow-wrap:anywhere;margin-bottom:var(--space-4);color:var(--color-text)}.portal-access-actions{margin-bottom:var(--space-3)}.portal-local-note{margin-top:var(--space-3);padding:var(--space-3) var(--space-4);color:var(--color-warning-text);background:var(--color-warning-subtle);border:1px solid var(--color-warning-border);border-radius:var(--radius-md);font-size:var(--text-sm)}.credential-fields{padding:var(--space-5);background:var(--color-surface-sunken);border:1px solid var(--color-border);border-radius:var(--radius-md)}.credential-head{display:flex;align-items:baseline;gap:var(--space-4);flex-wrap:wrap;margin-bottom:var(--space-4)}@media(max-width:700px){.portal-access-card{align-items:flex-start;flex-direction:column}.portal-qr{align-self:center}}.row{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap}.spacer{flex:1}.field-label{font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--color-text);margin-bottom:4px;display:block}.input,select.input{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:7px var(--space-4);background:var(--color-surface);color:var(--color-text)}.input:focus-visible{outline:2px solid var(--color-primary);outline-offset:0;border-color:var(--color-primary)}.input.sm{padding:4px 6px;font-size:var(--text-sm)}.input.time{width:74px;text-align:center;font-variant-numeric:var(--font-numeric)}.btn{border:1px solid var(--color-border);background-color:var(--color-surface);color:var(--color-text);border-radius:9px;padding:var(--space-3) var(--space-6);font-weight:var(--weight-semibold);font-size:var(--text-base);display:inline-flex;align-items:center;gap:var(--space-2)}.btn:hover{background-color:var(--color-surface-hover)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.primary{background-color:var(--color-primary-solid);border-color:var(--color-primary-solid);color:var(--color-on-primary)}.btn.primary:hover{background-color:var(--color-primary-hover)}.btn.success{background-color:var(--color-success-solid);border-color:var(--color-success-solid);color:var(--color-on-primary)}.btn.success:hover{background-color:var(--color-success-hover)}.btn.danger{color:var(--color-danger-text);border-color:var(--color-danger-border)}.btn.danger:hover{background-color:var(--color-danger-subtle)}.btn.sm{padding:4px 9px;font-size:var(--text-sm);border-radius:7px}.btn.ghost{border-color:transparent;background-color:transparent}.btn.ghost:hover{background-color:var(--color-surface-hover)}.chip{display:inline-flex;align-items:center;gap:var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-full);padding:4px var(--space-5);font-size:var(--text-sm);background:var(--color-surface);font-weight:var(--weight-semibold)}.chip .dot{width:8px;height:8px;border-radius:50%;background:currentColor;flex:none}.chip.status-ok{color:var(--color-success-text);border-color:var(--color-success-border);background:var(--color-success-subtle)}.chip.status-warn{color:var(--color-warning-text);border-color:var(--color-warning-border);background:var(--color-warning-subtle)}.chip.status-pub{color:var(--color-info-text);border-color:var(--color-info-border);background:var(--color-info-subtle)}.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-4)}.step{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-5)}.step .num{display:inline-flex;width:22px;height:22px;border-radius:50%;background:var(--color-primary-solid);color:var(--color-on-primary);align-items:center;justify-content:center;font-weight:var(--weight-bold);font-size:var(--text-sm);margin-right:var(--space-2)}.step .t{font-weight:var(--weight-bold);font-size:var(--text-base)}.step .d{color:var(--color-text-muted);font-size:var(--text-xs);margin-top:var(--space-2);line-height:var(--leading-normal)}.step .s{margin-top:var(--space-3);font-size:var(--text-xs);border:1px solid var(--color-border);border-radius:7px;padding:5px var(--space-3);background:var(--color-surface-sunken);color:var(--color-text-muted)}.step .s.ok{background:var(--color-success-subtle);border-color:var(--color-success-border);color:var(--color-success-text)}.tpl-chip{display:inline-flex;align-items:center;gap:var(--space-2);border:1.5px solid var(--color-border);border-radius:var(--radius-full);padding:5px var(--space-5);background:var(--color-surface);font-size:var(--text-sm);font-weight:var(--weight-semibold);cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--color-text)}.tpl-chip:hover{border-color:var(--color-border-strong)}.tpl-chip.active{border-color:var(--color-primary);background:var(--color-primary-subtle);box-shadow:0 0 0 2px var(--color-primary-subtle)}.tpl-chip .dot{width:9px;height:9px;border-radius:50%}.legend{display:flex;gap:var(--space-6);font-size:var(--text-xs);color:var(--color-text-muted);align-items:center;flex-wrap:wrap;padding:var(--space-2) 2px}.legend .sw{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:4px;vertical-align:-2px;border:1px solid var(--color-border)}.grid-wrap{overflow:auto;max-height:calc(100vh - 180px);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);outline:none}table.grid{border-collapse:separate;border-spacing:0;width:max-content;font-variant-numeric:var(--font-numeric)}table.grid th,table.grid td{border-right:1px solid var(--color-border);border-bottom:1px solid var(--color-border);padding:0;background:var(--color-surface)}table.grid thead th{position:sticky;top:0;z-index:3;background:var(--color-surface-sunken);font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--color-text-muted);padding:5px 4px;text-align:center;min-width:48px;cursor:pointer}table.grid thead th:hover{background:var(--color-surface-hover)}table.grid thead th.emp-col,table.grid tbody td.emp-col{position:sticky;left:0;z-index:2;min-width:148px;max-width:148px;background:var(--color-surface);cursor:default;text-align:left}table.grid thead th.emp-col{z-index:4;background:var(--color-surface-sunken)}table.grid thead th .dow{display:block;font-size:var(--text-2xs)}table.grid thead th.sun .dow,table.grid thead th.sun .dnum,table.grid thead th.holiday .dow,table.grid thead th.holiday .dnum{color:var(--color-sunday)}table.grid thead th.sat .dow,table.grid thead th.sat .dnum{color:var(--color-saturday)}table.grid thead th.sun,table.grid thead th.holiday{background:var(--color-sunday-bg)}table.grid thead th.sat{background:var(--color-saturday-bg)}.emp-cell{padding:7px var(--space-3)}.emp-cell .name{font-weight:var(--weight-bold);font-size:var(--text-sm)}.emp-cell .type{display:inline-block;font-size:var(--text-2xs);padding:1px var(--space-3);border-radius:var(--radius-full);margin:3px 0;background:var(--color-warning-subtle);color:var(--color-warning-text);border:1px solid var(--color-warning-border)}.emp-cell .type.t2{background:var(--color-info-subtle);color:var(--color-info-text);border-color:var(--color-info-border)}.emp-cell .type.t3{background:var(--color-success-subtle);color:var(--color-success-text);border-color:var(--color-success-border)}.emp-cell .sub{font-size:var(--text-2xs);color:var(--color-text-muted);display:flex;align-items:center;gap:5px}.emp-cell .reflect-btn{border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);border-radius:var(--radius-full);font-size:var(--text-2xs);padding:1px var(--space-3);cursor:pointer;font-weight:var(--weight-semibold)}.emp-cell .reflect-btn:hover:not(:disabled){border-color:var(--color-primary);color:var(--color-primary-text)}.emp-cell .reflect-btn:disabled{opacity:.5;cursor:not-allowed}td.day-cell{min-width:48px;height:58px;vertical-align:middle;text-align:center;cursor:pointer;position:relative;font-size:var(--text-xs);-webkit-user-select:none;user-select:none}td.day-cell.sun,td.day-cell.holiday{background:var(--color-sunday-bg)}td.day-cell.sat{background:var(--color-saturday-bg)}td.day-cell:hover{box-shadow:inset 0 0 0 2px var(--color-primary-border)}td.day-cell.selected{box-shadow:inset 0 0 0 2px var(--color-primary);background:var(--color-primary-subtle)}td.day-cell:focus{outline:none}td.day-cell:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--color-surface),inset 0 0 0 4px var(--color-text);z-index:1}td.day-cell.selected:focus-visible{box-shadow:inset 0 0 0 2px var(--color-surface),inset 0 0 0 4px var(--color-text);background:var(--color-primary-subtle)}td.day-cell.dirty:after{content:"";position:absolute;top:3px;right:3px;width:7px;height:7px;border-radius:50%;background:var(--color-warning)}td.day-cell.wish-diff{box-shadow:inset 0 0 0 2px var(--color-accent)}td.day-cell.selected.wish-diff{box-shadow:inset 0 0 0 2px var(--color-primary),inset 0 0 0 4px var(--color-accent)}.cell-badge{display:inline-block;padding:2px var(--space-2);border-radius:var(--radius-sm);font-weight:var(--weight-bold);font-size:var(--text-2xs)}.cell-badge.legal{background:var(--color-danger-subtle);color:var(--color-danger-text)}.cell-badge.scheduled{background:var(--color-accent-subtle);color:var(--color-accent-text)}.cell-badge.off{background:var(--color-surface-hover);color:var(--color-text-muted)}.cell-badge.paid{background:var(--color-success-subtle);color:var(--color-success-text)}.cell-badge.sub{background:var(--color-info-subtle);color:var(--color-info-text)}.cell-work{font-weight:var(--weight-bold);font-size:var(--text-2xs);line-height:var(--leading-tight)}.cell-work .tname{display:block;font-size:var(--text-2xs)}.cell-work .seg-line{display:block}td.emp-col[draggable=true]{cursor:grab}td.emp-col.drop-target{box-shadow:inset 0 3px 0 var(--color-primary)}.drag-grip{color:var(--color-text-faint);margin-right:4px;display:inline-flex;vertical-align:-2px;-webkit-user-select:none;user-select:none}.cell-wish{display:block;margin-top:2px;font-size:9px;color:var(--color-accent-text);background:var(--color-accent-subtle);border-radius:4px;padding:0 3px}td.total-col{min-width:62px;text-align:center;font-weight:var(--weight-bold);background:var(--color-surface-sunken)}td.total-col .total-days{font-size:var(--text-2xs);color:var(--color-text-muted);font-weight:var(--weight-semibold)}table.grid thead th.today{box-shadow:inset 0 3px 0 var(--color-primary);background:var(--color-primary-subtle)}td.day-cell.today{background:var(--color-primary-subtle)}table.grid thead th.wstart,td.day-cell.wstart{border-left:2px solid var(--color-border-strong)}table.grid thead th .dow.shortage{color:var(--color-danger);font-weight:var(--weight-bold)}.labor-warn{color:var(--color-danger);margin-left:4px;cursor:help;font-size:var(--text-sm)}.daily-wrap{overflow:auto;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}.daily-grid{position:relative;width:max-content;min-width:100%}.daily-row{display:flex;border-bottom:1px solid var(--color-border);position:relative;height:46px}.daily-row .emp{position:sticky;left:0;z-index:2;width:150px;min-width:150px;background:var(--color-surface);border-right:1px solid var(--color-border);padding:var(--space-2) var(--space-4);font-size:var(--text-sm)}.daily-row .emp .name{font-weight:var(--weight-bold)}.daily-row .emp .code{font-size:var(--text-2xs);color:var(--color-text-muted)}.daily-track{position:relative;flex:1;background:var(--color-surface-sunken)}.daily-track .gridline{position:absolute;top:0;bottom:0;width:1px;background:var(--color-border)}.daily-track .gridline.hour{background:var(--color-border-strong)}.daily-header{display:flex;border-bottom:1px solid var(--color-border);position:sticky;top:0;z-index:3;background:var(--color-surface);height:30px}.daily-header .emp{position:sticky;left:0;z-index:4;width:150px;min-width:150px;background:var(--color-surface);border-right:1px solid var(--color-border);padding:var(--space-2) var(--space-4);font-weight:var(--weight-bold);font-size:var(--text-sm)}.daily-header .htrack{position:relative;flex:1}.daily-header .hlabel{position:absolute;top:var(--space-2);font-size:var(--text-2xs);color:var(--color-text-muted);transform:translate(2px)}.coverage-row{display:flex;border-bottom:1px solid var(--color-border);position:sticky;top:30px;z-index:3;background:var(--color-surface);height:24px}.coverage-row .emp{position:sticky;left:0;z-index:4;width:150px;min-width:150px;background:var(--color-surface);border-right:1px solid var(--color-border);padding:4px var(--space-4);font-size:var(--text-2xs);color:var(--color-text-muted);font-weight:var(--weight-bold)}.coverage-row .ctrack{position:relative;flex:1}.coverage-row .cseg{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:var(--weight-bold);color:var(--color-primary-text);border-right:1px solid var(--color-border)}.coverage-row .cseg.outside{background:var(--color-surface-hover)}.coverage-row .cseg.empty{background:var(--color-danger-subtle)}.now-line{position:absolute;top:0;bottom:0;width:2px;background:var(--color-danger);z-index:2;pointer-events:none}.now-line:before{content:"";position:absolute;top:0;left:-3px;border:4px solid transparent;border-top-color:var(--color-danger)}.shift-bar{position:absolute;top:7px;height:32px;border-radius:7px;background:var(--color-primary-solid);color:var(--color-on-primary);font-size:var(--text-2xs);font-weight:var(--weight-bold);display:flex;align-items:center;justify-content:center;cursor:grab;overflow:hidden;white-space:nowrap;box-shadow:var(--shadow-sm);font-variant-numeric:var(--font-numeric)}.shift-bar.selected{outline:2px solid var(--color-text)}.shift-bar .handle{position:absolute;top:0;bottom:0;width:7px;cursor:ew-resize}.shift-bar .handle.l{left:0}.shift-bar .handle.r{right:0}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--color-overlay);display:flex;align-items:center;justify-content:center;z-index:50;padding:var(--space-7)}.modal{background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);max-height:90vh;overflow:auto;padding:var(--space-7) var(--space-7);min-width:420px;max-width:96vw}.modal h3{margin:0 0 var(--space-5);font-size:var(--text-lg)}.foot{display:flex;justify-content:flex-end;gap:var(--space-3);margin-top:var(--space-6)}table.form-table{border-collapse:collapse;width:100%;font-size:var(--text-sm);font-variant-numeric:var(--font-numeric)}table.form-table th,table.form-table td{border-bottom:1px solid var(--color-border);padding:var(--space-2) var(--space-3);text-align:left}table.form-table th{color:var(--color-text-muted);font-weight:var(--weight-semibold);font-size:var(--text-xs);background:var(--color-surface-sunken)}table.form-table tr:hover td{background:var(--color-surface-sunken)}.toast{position:fixed;bottom:var(--space-8);left:50%;transform:translate(-50%);background:var(--color-tooltip-bg);color:var(--color-tooltip-text);border-radius:var(--radius-md);padding:var(--space-4) var(--space-7);font-size:var(--text-base);z-index:100;box-shadow:var(--shadow-md);animation:toast-in .18s ease-out}.toast.error{background:var(--color-danger);color:#fff}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%)}}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--color-primary-subtle),var(--color-bg))}.login-card{background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-md);padding:34px 38px;width:360px}.login-card h1{font-size:22px;margin:0 0 4px}.login-card .sub{color:var(--color-text-muted);font-size:var(--text-sm);margin-bottom:var(--space-7)}.login-card .field{margin-bottom:var(--space-6)}.login-card .input{width:100%;padding:var(--space-4) var(--space-5)}.login-card .btn{width:100%;justify-content:center;padding:11px;font-size:var(--text-md)}.login-error{color:var(--color-danger-text);font-size:var(--text-sm);margin-bottom:var(--space-4)}.view-tabs{display:inline-flex;border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden;background:var(--color-surface)}.view-tabs button{border:none;background:var(--color-surface);padding:9px var(--space-7);font-weight:var(--weight-bold);font-size:var(--text-base);color:var(--color-text-muted)}.view-tabs button.active{background:var(--color-primary-solid);color:var(--color-on-primary)}.badge-num{display:inline-flex;align-items:center;justify-content:center;min-width:17px;height:17px;padding:0 4px;border-radius:var(--radius-full);background:var(--color-danger);color:#fff;font-size:var(--text-2xs);font-weight:var(--weight-bold)}.hint{font-size:var(--text-xs);color:var(--color-text-muted)}@media print{body{background:#fff}body.printing .no-print,body.printing .sidebar,body.printing .topbar,body.printing .savebar{display:none!important}body.printing .shell{display:block;height:auto;overflow:visible}body.printing .main{display:block;height:auto}body.printing .content,body.printing .content.fill{display:block;overflow:visible;padding:0;height:auto}body.printing .content.fill>.card:last-child{display:block}body.printing .card{border:none;box-shadow:none;padding:0;margin:0}body.printing .grid-wrap{max-height:none;overflow:visible;border:none;flex:none}body.printing table.grid{width:100%}body.printing table.grid thead th,body.printing td.day-cell{min-width:0}@page{size:A4 landscape;margin:8mm}}
