.print-toolbar{display:flex;gap:.75rem;align-items:center;flex-wrap:wrap;padding:.75rem 1rem;background:#fff;border-bottom:1px solid #e4e7ec;position:sticky;top:0;z-index:5}.print-page{position:relative;max-width:210mm;margin:1rem auto;background:#fff;padding:12mm;color:#000;font-size:12px;line-height:1.45;box-shadow:0 0 0 1px #e4e7ec}.print-head{display:flex;justify-content:space-between;gap:1rem;border-bottom:2px solid #000;padding-bottom:.6rem;margin-bottom:.8rem}.print-head h1{font-size:18px;margin:0 0 .15rem}.print-doc{text-align:right}.print-doc h2{font-size:16px;margin:0 0 .15rem;letter-spacing:.04em}.print-page table{width:100%;border-collapse:collapse;margin:.4rem 0}.print-page th,.print-page td{border:1px solid #444;padding:3px 6px;text-align:left;vertical-align:top;font-size:11.5px}.print-page th{background:#eee;text-transform:none;letter-spacing:0;font-size:11px;color:#000}.print-page .num{text-align:right;white-space:nowrap}.print-page .info{width:100%;margin:.2rem 0 .6rem}.print-page .info td{border:0;padding:1px 4px}.print-page .info td:first-child{width:110px;color:#333}.print-totals{margin-left:auto;width:60%}.print-totals td{border:0!important;padding:2px 6px}.print-totals tr.grand td{border-top:2px solid #000!important;font-weight:700;font-size:13px}.print-stamp{position:absolute;top:42%;left:50%;transform:translate(-50%,-50%) rotate(-24deg);font-size:46px;font-weight:800;letter-spacing:.08em;color:#b4231838;border:6px solid rgba(180,35,24,.22);padding:.1em .4em;pointer-events:none;text-align:center;white-space:nowrap}.print-sign{display:flex;justify-content:space-around;gap:1rem;margin-top:1.4rem;text-align:center}.print-sign div{width:42%}.print-sign .line{border-bottom:1px solid #000;height:56px;margin-bottom:3px}.print-box{border:1px solid #444;padding:.4rem .6rem;margin:.5rem 0}.print-small{font-size:10.5px;color:#333}.print-big{font-size:20px;font-weight:800}.check-box{display:inline-block;width:12px;height:12px;border:1.5px solid #000;vertical-align:middle;margin-right:6px}@media print{body{background:#fff!important}.no-print{display:none!important}.print-page{margin:0;box-shadow:none;max-width:none;padding:0}@page{size:A4;margin:12mm}.print-page tr{break-inside:avoid}}:root{--bg:#f4f6f8;--card:#fff;--ink:#1b2430;--muted:#667085;--line:#e4e7ec;--brand:#1d4ed8;--side:#111827;--ok:#067647;--bad:#b42318}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--ink);font-size:15px}h1,h2,h3,h4{margin:0 0 .5rem}h2{font-size:1.35rem}h3{font-size:1.05rem}.muted{color:var(--muted)}.small{font-size:.85rem}.app{display:flex;min-height:100vh}.sidebar{width:240px;background:var(--side);color:#cbd5e1;padding:1rem 0;flex-shrink:0}.brand{font-weight:700;font-size:1.2rem;color:#fff;padding:0 1.25rem 1rem}.nav-link{display:flex;justify-content:space-between;align-items:center;padding:.6rem 1.25rem;color:inherit;text-decoration:none}.nav-link:hover{background:#1f2937}.nav-link.active{background:var(--brand);color:#fff}.pending-tag{font-size:.65rem;background:#374151;color:#9ca3af;border-radius:999px;padding:.1rem .5rem}.main{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:.75rem;padding:.6rem 1rem;background:var(--card);border-bottom:1px solid var(--line)}.spacer{flex:1}.menu-btn{display:none}.user-chip{color:var(--ink);text-decoration:none;font-size:.9rem}.content{padding:1.25rem;max-width:1200px;width:100%}.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:1rem 1.25rem;margin-bottom:1rem}.narrow{max-width:460px}.page-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.btn{border:1px solid var(--line);background:#fff;padding:.5rem .9rem;border-radius:8px;cursor:pointer;font:inherit}.btn:hover:not(:disabled){background:#f2f4f7}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--brand);color:#fff;border-color:var(--brand)}.btn-primary:hover:not(:disabled){background:#1e40af}.btn-ghost{border-color:transparent;background:transparent}input,select{font:inherit;padding:.5rem .65rem;border:1px solid #cfd4dc;border-radius:8px;width:100%;background:#fff}input[type=checkbox]{width:auto}.field{display:flex;flex-direction:column;gap:.25rem}.field-label{font-weight:600;font-size:.88rem}.field-error{color:var(--bad);font-size:.82rem}.stack{display:flex;flex-direction:column;gap:.75rem}.bare{border:0;padding:0;margin:0;min-width:0}.row{display:flex;gap:.75rem;align-items:center}.check{display:flex;gap:.5rem;align-items:center}.checks{display:flex;flex-wrap:wrap;gap:.5rem 1.25rem}.alert{padding:.6rem .85rem;border-radius:8px;margin-bottom:.5rem;font-size:.9rem}.alert-error{background:#fef3f2;color:var(--bad);border:1px solid #fecdca}.alert-success{background:#ecfdf3;color:var(--ok);border:1px solid #abefc6}.alert-info{background:#eff8ff;color:#175cd3;border:1px solid #b2ddff}.badge{display:inline-block;font-size:.72rem;padding:.1rem .55rem;border-radius:999px;font-weight:600}.badge-ok{background:#dcfae6;color:var(--ok)}.badge-bad{background:#fee4e2;color:var(--bad)}.badge-neutral{background:#eaecf0;color:#475467}.table-wrap{overflow-x:auto;padding:0}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.65rem .9rem;border-bottom:1px solid var(--line);vertical-align:top}th{font-size:.8rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}pre{background:#f8fafc;padding:.5rem;border-radius:6px;overflow:auto;max-width:480px;font-size:.78rem}.filters{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:.6rem;align-items:end}.pager{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:1rem;align-items:start}.status-list{list-style:none;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:.5rem}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:1rem}.login-card{width:100%;max-width:360px;display:flex;flex-direction:column;gap:.75rem}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#10182880;display:grid;place-items:center;padding:1rem;z-index:50}.modal{background:#fff;border-radius:12px;padding:1.25rem;width:100%;max-width:480px;max-height:90vh;overflow:auto}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}hr{border:0;border-top:1px solid var(--line);margin:1rem 0}@media(max-width:800px){.sidebar{position:fixed;inset:0 auto 0 0;transform:translate(-100%);transition:transform .15s;z-index:40}.sidebar.open{transform:none}.menu-btn{display:inline-block}.content{padding:.75rem}}.badge-info{background:#dbeafe;color:#1d4ed8}.badge-warn{background:#fef0c7;color:#b54708}.picker{position:relative}.picker-list{list-style:none;margin:.25rem 0 0;padding:0;border:1px solid var(--line);border-radius:8px;max-height:220px;overflow:auto;background:#fff}.picker-list button{width:100%;text-align:left;background:none;border:0;padding:.55rem .75rem;cursor:pointer;font:inherit}.picker-list button:hover{background:#f2f4f7}.pad{padding:.5rem}.toolbar{display:flex;gap:.6rem;flex-wrap:wrap;align-items:center;margin-bottom:.75rem}.toolbar input,.toolbar select{width:auto;min-width:150px}.toolbar .grow{flex:1;min-width:200px}a.link{color:var(--brand);text-decoration:none}a.link:hover{text-decoration:underline}.kv{display:grid;grid-template-columns:150px 1fr;gap:.35rem .75rem;margin:0}.kv dt{color:var(--muted)}.kv dd{margin:0;white-space:pre-wrap}.photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.75rem}.photo{border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff}.photo img{width:100%;height:120px;object-fit:cover;display:block;cursor:zoom-in}.photo .meta{padding:.4rem .5rem;font-size:.78rem}.photo .meta .btn{padding:.15rem .5rem;font-size:.75rem;margin-top:.25rem}.right{text-align:right}.nowrap{white-space:nowrap}.history{max-height:200px;overflow:auto;font-size:.85rem}.line-edit{border:1px solid var(--line);border-radius:8px;padding:.6rem .75rem;background:#fafbfc;display:flex;flex-direction:column;gap:.5rem}.line-head{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}.line-head .btn{margin-left:auto}.row.wrap{flex-wrap:wrap}.row.wrap>*{flex:1;min-width:150px}.totals{max-width:340px;margin-left:auto}.totals dd{text-align:right}.tabs{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:.75rem}.tab{padding:.35rem .8rem;border:1px solid var(--line);border-radius:999px;background:#fff;cursor:pointer;font:inherit}.tab.active{background:var(--brand);color:#fff;border-color:var(--brand)}.timeline{list-style:none;margin:0;padding:0;font-size:.88rem}.timeline li{padding:.35rem 0;border-bottom:1px solid var(--line)}.actions{display:flex;gap:.5rem;flex-wrap:wrap}.sub-card{border:1px solid var(--line);border-radius:8px;padding:.75rem;margin-bottom:.75rem;background:#fff}.btn-danger{color:var(--bad);border-color:#fecdca}select.inline{width:auto;padding:.25rem .4rem}.badge-lg{font-size:.85rem;padding:.2rem .75rem}.stat{display:flex;gap:2rem;flex-wrap:wrap}.stat div{display:flex;flex-direction:column}.stat strong{font-size:1.15rem}.day-grid{display:grid;grid-template-columns:110px 70px 1fr 1fr 110px;gap:.4rem .6rem;align-items:center}.day-grid input{padding:.3rem .45rem}.mini{font-size:.78rem;color:var(--muted)}.rec{display:flex;gap:.4rem;align-items:center;flex-wrap:wrap;font-size:.82rem}@media(max-width:700px){.day-grid{grid-template-columns:90px 60px 1fr 1fr}.day-grid .brk{display:none}}.badge-sick{background:#ede9fe;color:#6d28d9}.badge-izin{background:#ccfbf1;color:#0f766e}.cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}.cal-head{text-align:center;font-size:.78rem;color:var(--muted);padding:.2rem 0;text-transform:uppercase;letter-spacing:.04em}.cal-cell{min-height:78px;border:1px solid var(--line);border-radius:8px;padding:.3rem .4rem;text-align:left;background:#fff;cursor:pointer;font:inherit;display:flex;flex-direction:column;gap:2px;overflow:hidden}.cal-cell:hover:not(:disabled){outline:2px solid var(--brand)}.cal-cell:disabled{cursor:default;opacity:.45}.cal-cell .n{font-weight:700;font-size:.9rem}.cal-cell .t{font-size:.72rem;line-height:1.25}.cal-cell .w{font-size:.68rem}.cal-blank{visibility:hidden}.k-present{background:#dcfae6;border-color:#75e0a7}.k-late{background:#fef0c7;border-color:#fec84b}.k-incomplete{background:#ffead5;border-color:#fdb022;border-style:dashed}.k-sick{background:#ede9fe;border-color:#b692f6}.k-izin{background:#ccfbf1;border-color:#5fe9d0}.k-norecord{background:#fef3f2;border-color:#fda29b;border-style:dashed}.k-absent{background:#fee4e2;border-color:#f97066}.k-off{background:#f2f4f7;color:#667085}.k-none{background:#fff;border-style:dashed;color:#98a2b3}.legend{display:flex;gap:.4rem .9rem;flex-wrap:wrap;font-size:.78rem;margin:.5rem 0}.legend span{display:inline-flex;align-items:center;gap:.3rem}.legend i{width:14px;height:14px;border-radius:4px;border:1px solid var(--line);display:inline-block}.seg{display:flex;gap:.4rem;flex-wrap:wrap}.seg label{border:1px solid var(--line);border-radius:8px;padding:.4rem .8rem;cursor:pointer;display:flex;gap:.4rem;align-items:center;background:#fff}.seg label.on{border-color:var(--brand);background:#eff4ff;font-weight:600}.seg label.dis{opacity:.5;cursor:not-allowed}@media(max-width:700px){.cal-cell{min-height:62px;padding:.2rem .25rem}.cal-cell .t{display:none}}.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:.6rem;margin-bottom:1rem}.tile{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:.7rem .9rem;display:flex;flex-direction:column;gap:.15rem;color:inherit;text-decoration:none}a.tile:hover{outline:2px solid var(--brand)}.tile .n{font-size:1.55rem;font-weight:700;line-height:1.15}.tile .l{font-size:.82rem;color:var(--muted)}.tile .s{font-size:.74rem;color:var(--muted)}.tile.hot{border-color:#fdb022;background:#fffaeb}.tile.big .n{font-size:1.35rem}.section-title{margin:1.2rem 0 .5rem;font-size:1.02rem}.rangebar{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center;margin-bottom:.75rem}.rangebar input,.rangebar select{width:auto}.feed{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem}.feed li{font-size:.88rem;display:flex;flex-direction:column}.feed .when{font-size:.74rem;color:var(--muted)}.total-row td{font-weight:700;border-top:2px solid var(--line)}
