:root{--bg:#f7f8fa;--panel:#fff;--line:#e5e7eb;--line-soft:#eef0f3;--ink:#0f172a;--ink-2:#1f2937;--muted:#64748b;--muted-2:#94a3b8;--brand:#3d5aa0;--brand-strong:#2b447f;--brand-weak:#eef2f9;--brand-weak-2:#dbe4f2;--ok:#15803d;--ok-bg:#dcfce7;--warn:#a16207;--warn-bg:#fef3c7;--danger:#b91c1c;--danger-bg:#fee2e2;--gray:#475569;--gray-bg:#eef1f5;--nav-bg:#0f172a;--nav-fg:#cbd5e1;--nav-fg-active:#fff;--nav-hover:#1e293b;--nav-group:#64748b;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-4h:20px;--sp-5:24px;--sp-6:32px;--sp-7:40px;--r-sm:6px;--r-md:8px;--r-lg:12px;--r-full:999px;--fs-xs:12px;--fs-sm:13px;--fs-md:14px;--fs-lg:16px;--fs-xl:20px;--fs-2xl:24px;--shadow-sm:0 1px 2px #0f172a0a;--shadow-md:0 2px 4px #0f172a0d, 0 1px 2px #0f172a0a;--shadow-focus:0 0 0 3px #3d5aa038;--radius:var(--r-lg);--shadow:var(--shadow-md);color:var(--ink);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Hiragino Kaku Gothic ProN,Noto Sans JP,sans-serif;line-height:1.6;font-size:var(--fs-md);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}body{margin:0}h1{font-size:var(--fs-2xl);letter-spacing:.005em;margin:0;font-weight:700}:focus-visible{box-shadow:var(--shadow-focus);border-radius:var(--r-sm);outline:none}input:where(:not([type=checkbox]):not([type=radio])),select,textarea{border:1px solid var(--line);border-radius:var(--r-md);background:var(--panel);font:inherit;font-size:var(--fs-sm);color:var(--ink);box-sizing:border-box;min-height:36px;padding:8px 12px;transition:border-color .12s,box-shadow .12s}input:where(:not([type=checkbox]):not([type=radio])):focus,select:focus,textarea:focus{border-color:var(--brand);box-shadow:var(--shadow-focus);outline:none}input::placeholder,textarea::placeholder{color:var(--muted-2)}.app{max-width:640px;padding:96px var(--sp-5) var(--sp-6);margin:0 auto}.subtitle{color:var(--muted);margin-top:var(--sp-1);font-size:var(--fs-md)}.app .card{margin-top:var(--sp-5);padding:var(--sp-5);background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm)}.app .card h2{font-size:var(--fs-lg);margin-top:0;font-weight:600}.health{gap:var(--sp-1) var(--sp-4);grid-template-columns:8rem 1fr;margin:0;display:grid}.health dt{color:var(--muted);font-variant-numeric:tabular-nums}.health dd{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.error{color:var(--danger)}.shell{grid-template:"brand top"56px"side main"1fr/232px 1fr;min-height:100vh;display:grid}.brand{align-items:center;gap:var(--sp-3);padding:0 var(--sp-5);background:var(--nav-bg);color:#f8fafc;letter-spacing:.01em;grid-area:brand;font-weight:700;display:flex}.brand .logo{border-radius:var(--r-sm);color:#f8fafc;width:28px;height:28px;font-weight:700;font-size:var(--fs-sm);background:#ffffff14;border:1px solid #ffffff24;place-items:center;display:grid}.topbar{padding:0 var(--sp-5);background:var(--panel);border-bottom:1px solid var(--line);grid-area:top;justify-content:space-between;align-items:center;display:flex}.topbar .crumb{color:var(--muted);font-size:var(--fs-sm)}.topbar .crumb b{color:var(--ink-2);font-weight:600}.userchip{align-items:center;gap:var(--sp-3);display:flex}.userchip .username{font-weight:600;font-size:var(--fs-sm)}.avatar{border-radius:var(--r-full);background:var(--brand-weak-2);width:30px;height:30px;color:var(--brand-strong);font-weight:700;font-size:var(--fs-sm);place-items:center;display:grid}.sidebar{background:var(--nav-bg);color:var(--nav-fg);padding:var(--sp-4) var(--sp-3);grid-area:side;overflow-y:auto}.sidebar .navitem{align-items:center;gap:var(--sp-3);border-radius:var(--r-md);color:var(--nav-fg);font-weight:500;font-size:var(--fs-sm);margin-bottom:3px;padding:9px 12px;text-decoration:none;transition:background-color .12s,color .12s;display:flex}.sidebar a.navitem:hover{background:var(--nav-hover);color:var(--nav-fg-active)}.sidebar .navitem.active{color:var(--nav-fg-active);background:#94b2e01a;font-weight:600;box-shadow:inset 3px 0 #93b4dc}.sidebar .navitem.disabled{color:#526279;cursor:default}.sidebar .ico{text-align:center;width:18px;font-size:var(--fs-md)}.sidebar .group{letter-spacing:.08em;color:var(--nav-group);padding:var(--sp-5) var(--sp-3) var(--sp-2);text-transform:uppercase;font-size:11px}.main{padding:var(--sp-6) var(--sp-6);grid-area:main;overflow:auto}.page-head{justify-content:space-between;align-items:flex-end;gap:var(--sp-4);margin-bottom:var(--sp-6);display:flex}.page-head h2{font-size:var(--fs-xl);letter-spacing:.005em;color:var(--ink);margin:0;font-weight:700;line-height:1.25}.muted{color:var(--muted)}.back{margin-bottom:var(--sp-2);color:var(--muted);font-size:var(--fs-sm);text-decoration:none;display:inline-block}.back:hover{color:var(--brand)}.empty{color:var(--muted);padding:var(--sp-4) var(--sp-5)}.badge{border-radius:var(--r-full);font-size:var(--fs-xs);white-space:nowrap;border:1px solid #0000;align-items:center;padding:2px 8px;font-weight:600;line-height:1.6;display:inline-flex}.b-gray{background:var(--gray-bg);color:var(--gray);border-color:#e2e8ef}.b-blue{background:var(--brand-weak);color:var(--brand-strong);border-color:#dbe4ff}.b-green{background:var(--ok-bg);color:var(--ok);border-color:#bbf7d0}.b-warn{background:var(--warn-bg);color:var(--warn);border-color:#fde68a}.b-red{background:var(--danger-bg);color:var(--danger);border-color:#fecaca}.b-orange{color:#9a3412;background:#ffedd5;border-color:#fed7aa}.btn{border:1px solid var(--line);background:var(--panel);color:var(--ink-2);border-radius:var(--r-md);font-weight:600;font-size:var(--fs-sm);cursor:pointer;align-items:center;gap:6px;padding:8px 16px;line-height:1.4;text-decoration:none;transition:background-color .12s,border-color .12s,color .12s,box-shadow .12s;display:inline-flex}.btn:hover{background:#f3f5f9;border-color:#d5d9df}.btn:active{background:#e9ecf1}.btn:disabled,.btn.is-disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:0 1px 1px #0f172a14}.btn-primary:hover{background:var(--brand-strong);border-color:var(--brand-strong)}.btn-primary:active{background:#1f3568;border-color:#1f3568}.btn-sm{font-size:var(--fs-xs);padding:6px 12px}.btn-danger{color:var(--danger);background:var(--panel);border-color:#f1c1c1}.btn-danger:hover{background:#fdf1f1;border-color:#eaacac}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm)}.card+.card{margin-top:var(--sp-5)}.card-pad{padding:var(--sp-4h) var(--sp-5)}.card-header{padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--line-soft);font-weight:600;font-size:var(--fs-md);color:var(--ink-2);justify-content:space-between;align-items:center;gap:var(--sp-3);display:flex}.card-block{padding:var(--sp-4h) var(--sp-5)}.card-block>.filters{border-bottom:none;padding:0}.card>.error,.card>.empty{padding:var(--sp-4) var(--sp-5)}.filters{gap:var(--sp-3);padding:var(--sp-4) var(--sp-4h);border-bottom:1px solid var(--line-soft);flex-wrap:wrap;align-items:center;display:flex}.filters input[type=search],.filters select,.filters input[type=text]{border:1px solid var(--line);border-radius:var(--r-md);background:var(--panel);font:inherit;font-size:var(--fs-sm);color:var(--ink);padding:8px 12px;transition:border-color .12s,box-shadow .12s}.filters input[type=search]:focus,.filters select:focus,.filters input[type=text]:focus{border-color:var(--brand);box-shadow:var(--shadow-focus);outline:none}.filters input[type=search]{min-width:260px}.switch,.check{color:var(--muted);font-size:var(--fs-sm);align-items:center;gap:6px;display:inline-flex}.check input[type=month],.check input[type=date],.check input[type=text],.check select{border:1px solid var(--line);border-radius:var(--r-md);background:var(--panel);font:inherit;font-size:var(--fs-sm);color:var(--ink);margin-left:4px;padding:8px 12px}.check input:focus,.check select:focus{border-color:var(--brand);box-shadow:var(--shadow-focus);outline:none}table.grid{border-collapse:collapse;width:100%}table.grid th,table.grid td{text-align:left;border-bottom:1px solid var(--line-soft);vertical-align:middle;font-size:var(--fs-sm);padding:14px 20px}table.grid th{color:var(--muted);letter-spacing:.04em;text-transform:uppercase;border-bottom-color:var(--line);background:#f8fafc;font-size:11px;font-weight:600}table.grid tbody tr{transition:background-color .1s}table.grid tbody tr:hover{cursor:pointer;background:#f6f8fb}table.grid tbody tr:last-child td{border-bottom:none}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:var(--fs-sm);color:var(--ink-2);font-variant-numeric:tabular-nums}.rowact{align-items:center;gap:var(--sp-2);flex-wrap:wrap;justify-content:flex-end;display:flex}.detail-head{align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-2);flex-wrap:wrap;display:flex}.detail-head h2{font-size:var(--fs-2xl);letter-spacing:.005em;color:var(--ink);margin:0;font-weight:700}.detail-head .spacer{flex:1}.tabs{border-bottom:1px solid var(--line);margin:var(--sp-4) 0 var(--sp-4);gap:2px;display:flex}.tab{font-weight:600;font-size:var(--fs-sm);color:var(--muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;padding:10px 16px;transition:color .12s,border-color .12s;display:inline-flex}.tab:hover{color:var(--ink-2)}.tab.active{color:var(--brand);border-bottom-color:var(--brand)}dl.kv{grid-template-columns:minmax(140px,200px) 1fr;gap:0;margin:0;display:grid}dl.kv dt{color:var(--muted);font-size:var(--fs-sm);border-bottom:1px solid var(--line-soft);padding:12px 0;font-weight:500}dl.kv dd{border-bottom:1px solid var(--line-soft);color:var(--ink-2);margin:0;padding:12px 0}dl.kv dt:last-of-type,dl.kv dd:last-of-type{border-bottom:none}.timeline{margin:var(--sp-1) 0 0;padding-left:22px;position:relative}.timeline:before{content:"";background:var(--line);width:2px;position:absolute;top:6px;bottom:6px;left:6px}.tl-item{padding:0 0 var(--sp-4) 0;position:relative}.tl-item .dot{background:var(--panel);border:3px solid var(--brand);border-radius:50%;width:12px;height:12px;position:absolute;top:4px;left:-22px}.tl-item .when{font-size:var(--fs-xs);color:var(--muted);font-variant-numeric:tabular-nums}.tl-item .what{color:var(--ink-2);margin-top:2px;font-weight:600}.diff{font-size:var(--fs-sm);color:var(--ink-2);border:1px solid var(--line-soft);border-radius:var(--r-md);background:#f6f8fb;margin-top:6px;padding:8px 10px}.diff.muted{color:var(--muted)}.diff .old{color:var(--danger);text-decoration:line-through}.diff .new{color:var(--ok);font-weight:600}form.frm{gap:var(--sp-4) var(--sp-5);grid-template-columns:minmax(140px,180px) 1fr;align-items:start;max-width:720px;display:grid}form.frm label{color:var(--muted);font-size:var(--fs-sm);padding-top:9px;font-weight:500}form.frm .req:after{content:" *";color:var(--danger)}form.frm input,form.frm select,form.frm textarea{border:1px solid var(--line);border-radius:var(--r-md);font:inherit;font-size:var(--fs-sm);color:var(--ink);background:var(--panel);width:100%;padding:9px 12px;transition:border-color .12s,box-shadow .12s}form.frm input::placeholder,form.frm textarea::placeholder{color:var(--muted-2)}form.frm input:focus,form.frm select:focus,form.frm textarea:focus{border-color:var(--brand);box-shadow:var(--shadow-focus);outline:none}form.frm .full{grid-column:1/-1}form.frm input[readonly]{color:var(--muted);background:#f1f4f8}.form-actions{align-items:center;gap:var(--sp-3);margin-top:var(--sp-5);flex-wrap:wrap;display:flex}.card>.form-actions{padding:0 var(--sp-5) var(--sp-5)}.hint{color:var(--muted);font-size:var(--fs-xs);margin-top:4px}form.form-grid{gap:var(--sp-4);grid-template-columns:repeat(auto-fit,minmax(260px,1fr));max-width:960px;display:grid}form.form-grid>label{color:var(--muted);font-size:var(--fs-sm);flex-direction:column;gap:6px;font-weight:500;display:flex}form.form-grid>label input,form.form-grid>label select,form.form-grid>label textarea{border:1px solid var(--line);border-radius:var(--r-md);font:inherit;font-size:var(--fs-sm);color:var(--ink);background:var(--panel);padding:9px 12px;transition:border-color .12s,box-shadow .12s}form.form-grid>label input:focus,form.form-grid>label select:focus,form.form-grid>label textarea:focus{border-color:var(--brand);box-shadow:var(--shadow-focus);outline:none}form.form-grid>.full,form.form-grid .form-actions{grid-column:1/-1}.contract-head{margin-bottom:var(--sp-3);justify-content:space-between;align-items:center;display:flex}.contract-head h3{font-size:var(--fs-md);color:var(--ink);margin:0;font-weight:700}.contract-list{margin:0;padding:0;list-style:none}.contract-row{align-items:center;gap:var(--sp-4);padding:var(--sp-3) 2px;border-bottom:1px solid var(--line-soft);font-size:var(--fs-sm);display:flex}.contract-row:last-child{border-bottom:none}.contract-period{white-space:nowrap;color:var(--ink-2);font-variant-numeric:tabular-nums}.contract-doc{flex:1}.doc-link{color:var(--brand);text-decoration:none}.doc-link:hover{text-decoration:underline}.doc-text{color:var(--muted);font-size:var(--fs-sm)}.remain{font-weight:600;font-size:var(--fs-sm);font-variant-numeric:tabular-nums}.remain-expired,.remain-soon{color:var(--danger)}.remain-normal{color:var(--muted);font-weight:500}table.grid tbody tr.row-expired{background:var(--danger-bg)}table.grid tbody tr.row-soon{background:#fef3ee}table.grid tbody tr.row-expired:hover,table.grid tbody tr.row-soon:hover{background:#fbdcd7}.sort-label{font-size:var(--fs-sm);color:var(--muted)}.attendance-table .cell-input{border:1px solid var(--line);border-radius:var(--r-sm);font:inherit;font-size:var(--fs-sm);background:var(--panel);min-width:80px;min-height:0;color:var(--ink);padding:4px 6px}.attendance-table .cell-input:focus{border-color:var(--brand);box-shadow:var(--shadow-focus);outline:none}.attendance-table .cell-num{font-variant-numeric:tabular-nums;text-align:right;width:80px}.attendance-table select.cell-input{min-width:70px}.print-only{display:none}@media print{.no-print,.brand,.topbar,.sidebar{display:none!important}.shell{display:block}.main{margin:0;padding:0}.print-only{display:block}.attendance-print h2{margin-bottom:4px;font-size:18px}.attendance-print p{margin:0 0 12px}}
