:root{font-family:Segoe UI,Arial,sans-serif;color:#243933;background:#f5f6f2;font-size:14px}*{box-sizing:border-box}body{margin:0}header{padding:22px 4%;border-bottom:1px solid #dee3dc;background:#fff;display:flex;align-items:center;justify-content:space-between}.brand{display:flex;gap:13px;align-items:center;font-weight:700;letter-spacing:1px}.logo{background:#264b40;color:white;border-radius:11px;padding:12px;letter-spacing:-1px;font-size:22px}.muted{color:#78857e;font-weight:400}.actions{display:flex;gap:8px;flex-wrap:wrap}button,select,input,textarea{font:inherit}button,select{border:1px solid #dce2da;background:#fff;color:inherit;padding:10px 15px;border-radius:8px;cursor:pointer}button:hover{background:#e9eee7}button:focus-visible,select:focus-visible,input:focus-visible,textarea:focus-visible{outline:3px solid #83ac9a;outline-offset:2px}button:disabled{opacity:.35;cursor:default}main{max-width:1440px;margin:auto;padding:36px 4%}.intro{display:flex;justify-content:space-between;align-items:center;margin:5px 0 28px}.eyebrow{font-size:11px;letter-spacing:2px;font-weight:700;color:#6a8072}h1{font-size:36px;font-weight:600;letter-spacing:-1.4px;margin:12px 0}h1 span{color:#89978a}p{line-height:1.6;color:#748078}.intro p{margin:8px 0}.save{font-size:12px;color:#6d7e72;display:flex;align-items:center;gap:8px}.save i{width:7px;height:7px;background:#739579;border-radius:50%}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:20px 0 28px}.stat{padding:22px;background:white;border:1px solid #e1e6dd;border-radius:12px}.stat:first-child{background:#284c40;color:#fff;border-color:#284c40}.stat small{font-size:12px;opacity:.7}.value{font-size:32px;margin:12px 0 7px;letter-spacing:-1px}.value em{font-size:15px;font-style:normal;opacity:.6}.stat p{font-size:12px;margin:0;color:inherit;opacity:.7}.toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:20px 0}.switch{background:#e6ebe3;padding:4px;border-radius:9px;display:flex}.switch button{background:transparent;border:0}.switch .active{background:#fff;box-shadow:0 1px 4px #0001}nav{display:flex;gap:8px}nav select{min-width:160px;font-weight:600}.fund{font-size:12px;display:flex;gap:8px;align-items:center}.fund input{width:65px;border:1px solid #dce2da;border-radius:6px;padding:8px}.legend{display:flex;gap:20px;flex-wrap:wrap;padding:18px 0;border-top:1px solid #dfe5dc}.legend span{display:flex;align-items:center;gap:7px;font-size:12px}.badge{padding:4px 9px;border-radius:5px;font-weight:700;display:inline-block;background:#ecefe9;color:#526259}.badge.D{background:#e6edda;color:#52663e}.badge.N{background:#dfe4f1;color:#4d5c84}.badge.B{background:#f5e6ce;color:#94632b}.badge.DV{background:#d9ebe3;color:#346e57}.badge.NV{background:#eadfed;color:#805787}.key{display:flex;gap:18px;flex-wrap:wrap;font-size:11px;color:#889185;margin:0 0 16px}.key span:last-child{margin-left:auto}.blue{color:#708ba8}.red{color:#b3746e}.monthcard{background:white;border:1px solid #dde3d9;border-radius:12px;overflow:hidden;margin-bottom:20px}.monthtitle{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid #e1e6df}.monthtitle h2{font-size:19px;margin:0}.monthtitle small{color:#788579}.grid{display:grid;grid-template-columns:32px repeat(7,minmax(0,1fr))}.weekday{font-size:11px;text-transform:uppercase;letter-spacing:1px;padding:14px 6px;text-align:center;color:#849081;border-bottom:1px solid #e1e6df}.week{font-size:10px;color:#919c8c;background:#fafbf8;display:flex;align-items:center;justify-content:center;border-bottom:1px solid #e7ebe3}.day{border:0;border-radius:0;border-right:1px solid #e7ebe3;border-bottom:1px solid #e7ebe3;text-align:left;min-height:106px;display:flex;flex-direction:column;align-items:flex-start;padding:12px 14px;gap:9px;background:#fff;position:relative}.day:hover{box-shadow:inset 0 0 0 2px #90aa94;z-index:1}.day.weekend{background:#f0f4f8}.day.holiday{background:#fbefeb}.day.weekend.holiday{border-top:3px solid #93abc0;padding-top:9px}.date{font-size:14px;font-weight:600}.day .hours{font-size:10px;color:#77827a;margin-left:5px}.day small{font-size:10px;color:#a1665d;line-height:1.3}.day .note{color:#697d70;overflow:hidden;text-overflow:ellipsis;max-width:100%;white-space:nowrap}.edited{position:absolute;right:9px;top:9px;font-size:11px;color:#82917d}.empty{background:#fafbf8;border-bottom:1px solid #e7ebe3}.yeargrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.yeargrid .grid{grid-template-columns:20px repeat(7,minmax(0,1fr))}.yeargrid .day{padding:6px 3px;min-height:60px;gap:4px;align-items:center}.yeargrid .day small,.yeargrid .hours{display:none}.yeargrid .badge{font-size:10px;padding:3px 5px}.yeargrid .date{font-size:11px}.yeargrid .edited{font-size:8px;right:1px;top:1px}.yeargrid .monthtitle{padding:13px}.yeargrid .monthtitle h2{font-size:16px}.yeargrid .weekday{font-size:9px;letter-spacing:0}.yeargrid .monthcard{margin:0}.summary{margin-top:34px}.sectiontitle{display:flex;align-items:center;justify-content:space-between;gap:10px}.sectiontitle h2{font-size:20px}.sectiontitle span{font-size:12px;color:#7c8a7d}.tablewrap{overflow:auto;border:1px solid #e0e5dc;border-radius:10px;background:white}table{width:100%;border-collapse:collapse;font-size:12px;white-space:nowrap}td,th{text-align:right;padding:13px 12px;border-bottom:1px solid #edf0e9}th{background:#edf1e9;color:#74816e;font-weight:500}td:first-child,th:first-child{text-align:left}tr:last-child{font-weight:700;background:#e8eee4}footer{margin-top:24px;font-size:11px;max-width:980px}a{color:#4d7362}dialog{border:0;border-radius:15px;width:460px;max-width:95vw;padding:26px;box-shadow:0 20px 100px #18372944}dialog::backdrop{background:#132a2466;backdrop-filter:blur(3px)}dialog label{display:block;margin:18px 0;font-size:13px}dialog select,textarea{display:block;width:100%;margin-top:8px}textarea{border:1px solid #dce2da;border-radius:8px;padding:12px;resize:vertical}.primary{background:#284c40;color:white}.primary:hover{background:#3a6454}@media(max-width:950px){.yeargrid{grid-template-columns:repeat(2,minmax(0,1fr))}.intro{display:block}.save{margin-top:15px}.stats{gap:8px}.stat{padding:15px}.brand .muted{display:none}}@media(max-width:600px){header{padding:15px;align-items:flex-start}.actions{gap:5px}header button{padding:8px;font-size:11px}main{padding:20px 12px}h1{font-size:27px}.stats{grid-template-columns:repeat(2,1fr)}.toolbar{flex-wrap:wrap}.fund{margin-left:auto}.legend{gap:10px}.key span:last-child{margin-left:0}.day{padding:8px 4px;min-height:95px;gap:7px}.day .hours{display:none}.grid{grid-template-columns:22px repeat(7,minmax(0,1fr))}.day small{font-size:9px}.badge{padding:4px 6px}.yeargrid{grid-template-columns:1fr}.sectiontitle span{display:none}.value{font-size:28px}}@media print{@page{size:A4 landscape;margin:10mm}header,.intro,.toolbar,.legend,.key,footer,.save,dialog{display:none!important}body,main{background:white;padding:0;margin:0;max-width:none}.stats{margin:0 0 10px;gap:8px}.stat{padding:10px}.value{font-size:22px;margin:5px 0}.day{min-height:80px}.yeargrid{display:block}.yeargrid .monthcard{break-after:page;break-inside:avoid;margin-bottom:10px}.yeargrid .day{min-height:76px;align-items:flex-start;padding:8px}.yeargrid .day small,.yeargrid .hours{display:inline}.summary{break-before:page}.monthcard{break-inside:avoid}.stat,.day,.badge,th{-webkit-print-color-adjust:exact;print-color-adjust:exact}}

.badge.DP{background:#e6edda;color:#52663e;border:1px solid #a38a4b}.badge.NP{background:#dfe4f1;color:#4d5c84;border:1px solid #a38a4b}.badge.NVP{background:#eadfed;color:#805787;border:1px solid #a38a4b}.stat:last-child{border-color:#d5b879;background:#fbf5e9}.stats{grid-template-columns:repeat(5,minmax(0,1fr))}@media(max-width:1100px){.stats{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:600px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.stat:last-child{grid-column:1/-1}}@media print{.stats{grid-template-columns:repeat(5,minmax(0,1fr))}table{font-size:9px}td,th{padding:9px 5px}}

.pwahelp{padding:16px 20px;background:#eaf0e5;border:1px solid #d9e2d3;border-radius:10px;margin-bottom:12px}.pwahelp summary{cursor:pointer;font-weight:600}.pwahelp p{font-size:13px;color:#425e4c}#pwaStatus{font-size:12px}body{padding-bottom:env(safe-area-inset-bottom)}@media(max-width:600px){input,select,textarea{font-size:16px}button{touch-action:manipulation}}@media print{.pwahelp,#pwaStatus{display:none}}