*{box-sizing:border-box}body{margin:0;font-family:system-ui,sans-serif;color:#1f2430;background:#f5f6f8}button{font:inherit;cursor:pointer}input,select,textarea{font:inherit;padding:6px 8px;border:1px solid #cdd2dc;border-radius:6px;background:#fff}.layout{display:flex;min-height:100vh}.sidebar{width:210px;flex:none;display:flex;flex-direction:column;gap:4px;padding:16px 12px;background:#fff;border-right:1px solid #e3e6ec}.sidebar .brand{font-weight:700;font-size:18px;padding:6px 10px;margin-bottom:10px}.sidebar a{display:block;color:#4a5060;text-decoration:none;padding:8px 10px;border-radius:6px}.sidebar a:hover{background:#f5f6f8}.sidebar a.active{background:#eef0fb;color:#4f46e5;font-weight:600}.sidebar .spacer{flex:1}.sidebar .who{color:#7a8093;font-size:13px;padding:6px 10px;word-break:break-all}.sidebar .btn.link{text-align:left;padding:8px 10px}.content{flex:1;min-width:0}.page{max-width:960px;margin:24px auto;padding:0 16px;display:grid;gap:16px}.card{background:#fff;border:1px solid #e3e6ec;border-radius:10px;padding:16px}.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.grow{flex:1;min-width:160px}.muted{color:#7a8093;font-size:13px}.center{text-align:center;margin-top:80px;color:#7a8093}.error{color:#b3261e;font-size:13px}.btn{border:1px solid #cdd2dc;border-radius:6px;background:#fff;padding:6px 12px}.btn.primary{background:#4f46e5;border-color:#4f46e5;color:#fff}.btn.danger{color:#b3261e;border-color:#e5c0bd}.btn.link{border:none;background:none;color:#4f46e5;padding:2px}.day-head{display:flex;justify-content:space-between;color:#4a5060;font-weight:600;font-size:13px;padding:6px 0;border-bottom:1px solid #e3e6ec}.entry{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid #f0f1f5}.entry:last-child{border-bottom:none}.entry .desc{flex:1}.entry .dot{width:10px;height:10px;border-radius:50%;flex:none}.entry .times{color:#7a8093;font-size:13px;white-space:nowrap}.entry .dur{font-variant-numeric:tabular-nums;font-weight:600}.entry .actions{visibility:hidden}.entry:hover .actions{visibility:visible}.chip{border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600}.chip.pending{background:#fdf3d7;color:#8a6d1a}.chip.approved{background:#ddf3e4;color:#1e7a45}.chip.rejected{background:#fbe0de;color:#b3261e}.chip.cancelled{background:#e9eaf0;color:#6b7183}.timer-dur{font-size:22px;font-variant-numeric:tabular-nums;font-weight:700;min-width:110px;text-align:right}.toggle{display:inline-flex}.toggle .btn{border-radius:0}.toggle .btn:first-child{border-radius:6px 0 0 6px}.toggle .btn:last-child{border-radius:0 6px 6px 0;border-left:none}.toggle .btn.active{background:#eef0fb;color:#4f46e5;border-color:#c7ccf5}.cal{border:1px solid #e3e6ec;border-radius:8px;overflow:hidden;margin-top:12px}.cal-head{display:flex;border-bottom:1px solid #e3e6ec;background:#fafbfc}.cal-gutter{width:48px;flex:none}.cal-col-head{flex:1;text-align:center;padding:6px 0;font-size:12px;font-weight:600;color:#4a5060;border-left:1px solid #eceef3}.cal-col-head.today{color:#4f46e5}.cal-scroll{max-height:560px;overflow-y:auto}.cal-body{display:flex}.cal-body .cal-gutter{position:relative}.cal-hour{font-size:11px;color:#9aa0b0;text-align:right;padding-right:6px;box-sizing:border-box}.cal-grid{position:relative;flex:1;display:flex;-webkit-user-select:none;user-select:none;touch-action:none;background-image:repeating-linear-gradient(#f0f1f5 0 1px,transparent 1px 48px)}.cal-day{flex:1;position:relative;border-left:1px solid #eceef3}.cal-block{position:absolute;box-sizing:border-box;border-radius:4px;padding:1px 5px;font-size:11px;line-height:1.25;color:#fff;overflow:hidden;cursor:grab;box-shadow:inset 3px 0 #0000002e;text-shadow:0 1px 1px rgba(0,0,0,.25)}.cal-block.dragging{visibility:hidden}.cal-block.preview{opacity:.55;pointer-events:none;background:#4f46e5}.cal-desc{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cal-t{opacity:.9;font-size:10px}.cal-handle{position:absolute;left:0;right:0;height:6px;cursor:ns-resize}.cal-handle.top{top:0}.cal-handle.bottom{bottom:0}.cal-modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#14182459;display:flex;align-items:center;justify-content:center;z-index:10}.cal-editor{width:min(440px,92vw);display:grid;gap:10px}.mc-head{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin:10px 0 4px}.mc-head span{text-align:center;font-size:12px;font-weight:600;color:#7a8093}.mc-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.mc-cell{min-height:68px;border:1px solid #e3e6ec;border-radius:6px;background:#fff;text-align:left;padding:4px;display:flex;flex-direction:column;gap:2px;cursor:pointer}.mc-cell:hover{border-color:#c7ccf5}.mc-cell.out{background:#fafbfc;color:#b6bcca}.mc-cell.sel{background:#eef0fb;border-color:#4f46e5}.mc-cell.today .mc-num{color:#4f46e5;font-weight:700}.mc-num{font-size:12px;font-weight:600}.mc-bar{font-size:10px;line-height:1.3;padding:1px 4px;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mc-bar.pending{background:#fdf3d7;color:#8a6d1a}.mc-bar.approved{background:#ddf3e4;color:#1e7a45}.mc-bar.rejected{background:#fbe0de;color:#b3261e}.mc-bar.cancelled{background:#e9eaf0;color:#6b7183}.mc-submit{margin-top:12px;border-top:1px solid #eceef3;padding-top:12px}.balances{display:flex;gap:12px;flex-wrap:wrap}.balance{border:1px solid #e3e6ec;border-radius:10px;padding:10px 16px;min-width:150px}.balance b{font-size:20px;display:block}table.plain{width:100%;border-collapse:collapse}table.plain td,table.plain th{text-align:left;padding:8px 6px;border-bottom:1px solid #f0f1f5;font-size:14px}.timesheet-print{display:none}@page{margin:15mm}@media print{body{background:#fff;color:#000}.layout{display:none}.timesheet-print{display:block;font-size:12px}.timesheet-print h1{font-size:18px;margin:0 0 4px}.timesheet-print .ts-subject{margin:0 0 16px;color:#333}.timesheet-print table{width:100%;border-collapse:collapse}.timesheet-print th,.timesheet-print td{text-align:left;padding:4px 8px;border-bottom:1px solid #ddd}.timesheet-print th:last-child,.timesheet-print td:last-child{text-align:right;white-space:nowrap}.timesheet-print .ts-day td{font-weight:600;background:#f2f2f2}.timesheet-print .ts-total{text-align:right;font-weight:700;margin-top:12px}}
