:root{color-scheme:light;font-family:system-ui,-apple-system,Segoe UI,Hiragino Sans,Yu Gothic UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;--bg: #f5f7fa;--surface: #ffffff;--border: #e3e7ee;--text: #1a2332;--text-sub: #5b6776;--primary: #2563eb;--primary-hover: #1d4ed8;--primary-soft: #eff4ff;--accent: #0891b2;--success: #16a34a;--warning: #d97706;--danger: #dc2626;--shadow-sm: 0 1px 2px rgba(15, 23, 42, .06);--shadow-md: 0 4px 12px rgba(15, 23, 42, .08);--radius: 10px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-size:14px;line-height:1.5}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{margin:0;font-weight:600}button{font:inherit;cursor:pointer}input,select,textarea{font:inherit;color:inherit}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 16px;border:1px solid transparent;border-radius:8px;background:var(--surface);color:var(--text);font-weight:500;transition:background .15s,border-color .15s}.btn:hover{background:#f1f4f9}.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-hover);border-color:var(--primary-hover)}.btn-primary:disabled{background:#94a3b8;border-color:#94a3b8;cursor:not-allowed}.btn-ghost{background:transparent;border-color:var(--border);color:var(--text-sub)}.btn-ghost:hover{background:var(--primary-soft);border-color:var(--primary);color:var(--primary)}.app-shell{min-height:100%;display:flex;flex-direction:column}.app-main{flex:1;width:100%;max-width:1280px;margin:0 auto;padding:24px 20px 48px}.navbar{background:var(--surface);border-bottom:1px solid var(--border);box-shadow:var(--shadow-sm);position:sticky;top:0;z-index:10}.navbar-inner{max-width:1280px;margin:0 auto;padding:12px 20px;display:flex;align-items:center;gap:16px}.navbar-brand{display:flex;align-items:center;gap:10px;font-size:16px;font-weight:700;color:var(--text);text-decoration:none;padding:4px 6px;border-radius:8px;transition:background .15s}.navbar-brand:hover{background:var(--primary-soft);text-decoration:none}.brand-mark{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;background:linear-gradient(135deg,var(--primary),var(--accent));color:#fff;font-weight:700;font-size:16px}.navbar-toggle{display:none;margin-left:auto;background:none;border:1px solid var(--border);border-radius:8px;width:36px;height:36px;font-size:20px;color:var(--text)}.navbar-menu{display:flex;align-items:center;gap:4px;flex:1}.navbar-spacer{flex:1}.nav-link{padding:8px 12px;border-radius:8px;color:var(--text-sub);font-weight:500}.nav-link:hover{background:var(--primary-soft);color:var(--primary);text-decoration:none}.nav-link.active{background:var(--primary-soft);color:var(--primary)}.navbar-user{display:flex;flex-direction:column;text-align:right;line-height:1.2;padding-right:8px}.user-name{font-weight:600;font-size:13px}.user-role{font-size:11px;color:var(--text-sub)}@media (max-width: 720px){.navbar-toggle{display:inline-flex}.navbar-menu{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;align-items:stretch;background:var(--surface);border-bottom:1px solid var(--border);padding:8px 16px 16px;gap:4px}.navbar-menu.open{display:flex}.navbar-user{text-align:left;padding:8px 4px;border-top:1px solid var(--border);margin-top:8px}}.page{display:flex;flex-direction:column;gap:20px}.page-header h1{font-size:24px}.page-sub{margin:4px 0 0;color:var(--text-sub)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow-sm)}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.card-header h2{font-size:16px}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}.stat-card{display:flex;flex-direction:column;gap:6px;padding:16px}.stat-label{color:var(--text-sub);font-size:12px}.stat-value{font-size:24px;font-weight:700}.stat-value small{font-size:13px;font-weight:500;color:var(--text-sub);margin-left:4px}.placeholder{color:var(--text-sub);margin:0}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#eff4ff,#f5f7fa 60%,#ecfeff);padding:24px}.login-card{width:100%;max-width:380px;background:var(--surface);border-radius:14px;border:1px solid var(--border);padding:28px;box-shadow:var(--shadow-md);display:flex;flex-direction:column;gap:14px}.login-brand{display:flex;align-items:center;gap:12px}.login-brand h1{font-size:22px}.login-sub{margin:-10px 0 8px;color:var(--text-sub)}.field{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--text-sub)}.field input,.field select,.field textarea{padding:9px 12px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);font-size:14px;outline:none;transition:border-color .15s,box-shadow .15s}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px #2563eb2e}.form-error{background:#fee2e2;color:var(--danger);border-radius:8px;padding:8px 12px;font-size:13px}.calendar-month{display:flex;flex-direction:column;gap:8px}.cal-row,.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.cal-headers .cal-header{text-align:center;font-size:12px;font-weight:600;color:var(--text-sub);padding:4px 0}.cal-header.is-sun{color:#dc2626}.cal-header.is-sat{color:#2563eb}.cal-cell{position:relative;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:8px 6px;min-height:64px;display:flex;flex-direction:column;align-items:flex-start;gap:2px;cursor:pointer;transition:transform .1s,box-shadow .1s;text-align:left;font:inherit;color:var(--text)}.cal-cell:hover{transform:translateY(-1px);box-shadow:var(--shadow-md)}.cal-cell.is-pad{background:transparent;border:none;cursor:default}.cal-cell.is-pad:hover{transform:none;box-shadow:none}.cal-cell.is-today{border-color:var(--primary);border-width:2px;box-shadow:0 0 0 2px #2563eb26}.cal-cell.tone-filled{background:#f0fdf4;border-color:#86efac}.cal-cell.tone-missing{background:#fef9c3;border-color:#fde68a}.cal-cell.tone-holiday-red{background:#fee2e2;border-color:#fca5a5}.cal-cell.tone-future{background:var(--surface);border-color:var(--border);opacity:.85}.cal-day{font-weight:700;font-size:14px}.cal-status{font-size:11px;font-weight:600;color:var(--text)}.cal-times{font-size:10px;color:var(--text-sub)}.cal-legend{display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--text-sub);padding-top:4px}.legend-item{display:inline-flex;align-items:center;gap:6px}.legend-item:before{content:"";display:inline-block;width:14px;height:14px;border-radius:4px;border:1px solid var(--border)}.legend-filled:before{background:#f0fdf4;border-color:#86efac}.legend-missing:before{background:#fef9c3;border-color:#fde68a}.legend-holiday:before{background:#fee2e2;border-color:#fca5a5}.legend-today:before{background:var(--surface);border-color:var(--primary);border-width:2px}.reminder-result{display:flex;flex-direction:column;gap:6px;margin-top:12px;padding:12px;background:#f8fafc;border-radius:8px;font-size:13px}.notification-banner{background:#fffbeb;border-color:#fde68a}.notification-banner h2{font-size:16px;margin-bottom:12px}.notification-banner ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}.notification-banner li{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--surface);border:1px solid #fde68a;border-radius:8px;padding:10px 14px;flex-wrap:wrap}.today-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}.today-card{border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:6px;border:1px solid var(--border);background:var(--surface)}.today-card.tone-empty{background:#f1f5f9;border-color:#e2e8f0}.today-card.tone-work{background:#f0fdf4;border-color:#bbf7d0}.today-card.tone-absent{background:#fef2f2;border-color:#fecaca}.today-card.tone-paid{background:#f5f3ff;border-color:#ddd6fe}.today-card.tone-half{background:#fffbeb;border-color:#fde68a}.today-card.tone-special{background:#fdf2f8;border-color:#fbcfe8}.today-card.tone-holiday{background:#f0f9ff;border-color:#bae6fd}.today-name{font-weight:600;display:flex;align-items:center}.today-status{font-size:18px;font-weight:700}.today-times{font-size:13px;color:var(--text-sub)}.today-comment{font-size:12px;color:var(--text-sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;display:flex;align-items:center;justify-content:center;padding:16px;z-index:100}.modal{background:var(--surface);border-radius:12px;width:100%;max-width:560px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-md)}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.modal-header h2{font-size:16px}.modal-body{padding:20px}.btn-icon{background:none;border:none;font-size:22px;color:var(--text-sub);width:32px;height:32px;border-radius:6px}.btn-icon:hover{background:var(--primary-soft);color:var(--primary)}.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.month-picker{display:inline-flex;align-items:center;gap:6px;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:4px}.month-picker input{border:none;background:transparent;padding:4px 8px;font-size:14px;color:var(--text);outline:none}.seg-control{display:inline-flex;background:var(--surface);border:1px solid var(--border);border-radius:8px;overflow:hidden}.seg{border:none;background:transparent;padding:8px 16px;color:var(--text-sub);font-weight:500}.seg.active{background:var(--primary-soft);color:var(--primary)}.seg+.seg{border-left:1px solid var(--border)}.toolbar-spacer{flex:1}.date-input{border:1px solid var(--border);border-radius:8px;padding:7px 12px;font-size:14px;outline:none;background:var(--surface);color:var(--text)}.date-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #2563eb2e}.user-select{border:1px solid var(--border);border-radius:8px;padding:7px 12px;font-size:14px;background:var(--surface);color:var(--text);outline:none;min-width:180px}.user-select:focus{border-color:var(--primary)}.header-actions{display:inline-flex;align-items:center;gap:8px}.table-scroll{overflow-x:auto}.data-table{width:100%;border-collapse:collapse;min-width:760px;font-size:13px}.data-table th,.data-table td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border);vertical-align:middle}.data-table th{background:#f9fbfd;font-weight:600;color:var(--text-sub);font-size:12px}.data-table tr:hover{background:#f7faff}.comment-cell{max-width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-pill{display:inline-block;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:600;background:#e5e7eb;color:#374151}.status-pill.status-work{background:#dcfce7;color:#15803d}.status-pill.status-absent{background:#fee2e2;color:#b91c1c}.status-pill.status-paid{background:#ede9fe;color:#6d28d9}.status-pill.status-half{background:#fef3c7;color:#b45309}.status-pill.status-special{background:#fce7f3;color:#be185d}.status-pill.status-holiday{background:#e0f2fe;color:#0369a1}.badge{display:inline-block;margin-left:8px;padding:2px 8px;border-radius:999px;font-size:11px;background:var(--primary-soft);color:var(--primary);font-weight:600}.user-groups{display:flex;flex-direction:column;gap:16px}.break-block{display:flex;flex-direction:column;gap:8px;padding:12px 14px;background:#f8fafc;border-radius:8px;border:1px solid var(--border)}.break-row{display:grid;grid-template-columns:minmax(60px,max-content) 1fr auto 1fr;align-items:center;gap:8px}.break-label{font-size:13px;font-weight:500;color:var(--text-sub);white-space:nowrap}.break-row input[type=time]{padding:8px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;outline:none;background:var(--surface)}.break-row input[type=time]:focus{border-color:var(--primary)}.break-sep{color:var(--text-sub)}.break-cell{font-size:12px;white-space:nowrap}.stamp-form{display:flex;flex-direction:column;gap:16px}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.checkbox-row{display:flex;flex-direction:row;gap:24px}.checkbox{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox input{width:18px;height:18px;accent-color:var(--primary)}.field span small{color:var(--text-sub);font-weight:400}.form-actions{display:flex;justify-content:flex-end;gap:8px}.overtime-summary{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:12px 16px;background:var(--primary-soft);border-radius:8px}.overtime-summary>div{display:flex;flex-direction:column;gap:4px}.overtime-summary span{font-size:12px;color:var(--text-sub)}.overtime-summary strong{font-size:18px;color:var(--primary)}.print-page{background:#f1f5f9;min-height:100vh;padding:24px 16px}.print-toolbar{max-width:210mm;margin:0 auto 16px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}.print-hint{color:var(--text-sub);font-size:12px}.print-sheet{background:#fff;width:210mm;min-height:297mm;margin:0 auto 24px;padding:18mm 16mm;box-shadow:0 4px 20px #0000001a;color:#000;font-size:11px}.print-sheet-break{page-break-after:always;break-after:page}.print-header{border-bottom:2px solid #1f2937;padding-bottom:12px;margin-bottom:18px}.print-header h1{font-size:24px;margin:0 0 10px;letter-spacing:6px}.print-meta{display:grid;grid-template-columns:1.5fr 1fr;gap:12px;font-size:12px}.print-meta .meta-label{display:inline-block;width:4em;color:#4b5563;font-size:10px}.print-meta .meta-value{border-bottom:1px solid #94a3b8;display:inline-block;min-width:80px;padding-bottom:2px;font-weight:600}.print-meta .email{font-weight:400;font-size:10px}.print-table{width:100%;border-collapse:collapse;font-size:10.5px;table-layout:fixed}.print-table col.col-day,.print-table col.col-wday{width:4%}.print-table col.col-status,.print-table col.col-time{width:7%}.print-table col.col-break{width:9%}.print-table col.col-hours{width:7%}.print-table col.col-flag{width:4%}.print-table col.col-comment{width:auto}.print-table th,.print-table td{border:1px solid #475569;padding:5px 6px;text-align:left;vertical-align:middle;height:22px}.print-table th{background:#e5e7eb;font-weight:700;text-align:center;font-size:10px}.print-table td.num{text-align:center;font-variant-numeric:tabular-nums}.print-table td.small{font-size:9.5px}.print-table td.wday{text-align:center;font-weight:600}.print-table td.sun{color:#b91c1c}.print-table td.sat{color:#1d4ed8}.print-table tr.weekend td{background:#fafafa}.print-table tr.missing td{background:#fffaf2}.print-table .comment{font-size:9.5px;white-space:normal;word-break:break-word;line-height:1.35}.print-summary{margin-top:18px;border:1.5px solid #1f2937;padding:14px 16px}.print-summary h2{font-size:13px;margin:0 0 10px;letter-spacing:2px}.summary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px 24px;font-size:11px}.summary-grid>div{display:flex;justify-content:space-between;align-items:baseline;border-bottom:1px dotted #94a3b8;padding:5px 2px}.summary-grid>div.wide{grid-column:span 2}.summary-grid span{color:#475569}.summary-grid strong{font-weight:700}.print-footer{display:flex;justify-content:flex-end;gap:32px;margin-top:32px}.signature{display:flex;align-items:center;gap:8px}.signature span{font-size:11px;color:#4b5563}.signature-line{width:120px;height:28px;border:1px solid #475569}@page{size:A4 portrait;margin:0}@media print{body,html,#root{background:#fff}.no-print{display:none!important}.print-page{background:#fff;padding:0}.print-sheet{width:210mm;min-height:0;padding:14mm 12mm;margin:0;box-shadow:none}.print-table tr,.print-summary{page-break-inside:avoid}}.loading-screen,.forbidden{display:flex;align-items:center;justify-content:center;min-height:100vh;color:var(--text-sub)}.forbidden{color:var(--danger);font-weight:600}
