*{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:#5c6270;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}.page h1{font-size:20px;font-weight:700;margin:0}.page h2{font-size:16px;font-weight:600;margin:0}.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:#5c6270;font-size:13px}.center{text-align:center;margin-top:80px;color:#5c6270}.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:#5c6270;font-size:13px;white-space:nowrap}.entry .dur{font-variant-numeric:tabular-nums;font-weight:600}.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:#6b7183;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),repeating-linear-gradient(#f6f7fa 0 1px,transparent 1px 24px)}body.cal-dragging,body.cal-dragging *{cursor:grabbing!important}body.cal-resizing,body.cal-resizing *{cursor:ns-resize!important}.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.pending{opacity:.6;cursor:default}.cal-block.preview{opacity:.55;pointer-events:none;background:#4f46e5}.cal-tip{position:absolute;left:50%;transform:translate(-50%,calc(-100% - 4px));background:#1f2430;color:#fff;font-size:11px;font-weight:600;font-variant-numeric:tabular-nums;padding:2px 6px;border-radius:4px;white-space:nowrap;pointer-events:none;z-index:7;box-shadow:0 1px 4px #00000040}.cal-now{position:absolute;left:0;right:0;height:0;border-top:2px solid #e5484d;z-index:3;pointer-events:none}.cal-now:before{content:"";position:absolute;left:-3px;top:-4px;width:7px;height:7px;border-radius:50%;background:#e5484d}.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-handle:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:24px;height:3px;border-radius:2px;background:#ffffffbf;opacity:0;transition:opacity .12s}.cal-block:hover .cal-handle:after{opacity:1}.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:#5c6270}.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:#6b7183}.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}.table-scroll{overflow-x:auto}@media(max-width:640px){.layout{flex-direction:column}.page{grid-template-columns:minmax(0,1fr);margin:16px auto}.sidebar{width:auto;flex-direction:row;align-items:center;flex-wrap:wrap;gap:4px 6px;padding:8px 12px;border-right:none;border-bottom:1px solid #e3e6ec}.sidebar .brand{margin-bottom:0;padding:6px 8px}.sidebar a{padding:10px 12px}.sidebar .who{padding:4px 8px}.sidebar .btn.link{padding:10px 12px}.btn{min-height:40px}.btn.link{min-height:40px;padding:8px}.entry,.toggle{flex-wrap:wrap}.cal{overflow-x:auto}.cal-head,.cal-body{min-width:640px}.cal-scroll{max-height:none;overflow:visible}}.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}}
