:root{font-family:Arial,Helvetica,sans-serif;color:#242622;background:#eeefec;font-synthesis:none;--orange:#f5894b;--muted:#73766e;--line:#d2d5ce}
*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,select{cursor:pointer}main{max-width:1432px;margin:auto;padding:0 40px 25px}.toolbar{display:flex;align-items:center;gap:30px;min-height:112px;border-bottom:1px solid #d8dad3}.brand{display:flex;align-items:center;gap:10px;color:inherit;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:2px}.brand svg{width:31px;height:34px;fill:none;stroke:currentColor;stroke-width:1.7}.settings{display:flex;gap:16px;margin-left:auto}.field{display:flex;flex-direction:column;gap:7px}.field label{font-size:12px;color:#565a52;font-weight:600}input,select{height:38px;border:1px solid #cdd0c7;border-radius:5px;background:#f9faf6;padding:0 11px;color:#242622}#year{width:91px}#identity{width:170px}#language{width:119px}.exports{display:flex;gap:9px;padding-top:21px}.button{height:39px;border-radius:5px;font-size:14px;font-weight:600;display:flex;align-items:center;justify-content:center;gap:8px;padding:0 14px;white-space:nowrap}.primary{background:#282d25;color:white;border:1px solid #282d25}.secondary{background:transparent;border:1px solid #c8cdc2;color:#30352a}.button svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.5}.button:hover{filter:brightness(.91)}.button:disabled{opacity:.45;cursor:not-allowed}input:focus-visible,select:focus-visible,button:focus-visible,a:focus-visible{outline:3px solid #b65522;outline-offset:3px}.above-sheet{display:flex;justify-content:space-between;align-items:center;margin:29px 0 13px;font-size:12px;letter-spacing:1.5px;color:#64695f;font-weight:600}.legend{display:flex;align-items:center;gap:8px;letter-spacing:0;font-size:13px;font-weight:400}.legend i,.key-line i{display:inline-block;width:9px;height:9px;background:var(--orange);border-radius:2px}.sheet{background:#fffefa;padding:32px 33px 17px;border:1px solid #d8d9d2;box-shadow:0 3px 9px #28302009}.sheet-heading{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:24px}.eyebrow{font-size:10px;letter-spacing:2px;font-weight:600;color:#7a7c72;margin:0 0 9px}h1{font-size:52px;line-height:1.1;letter-spacing:-2.3px;margin:0;font-weight:700}h1 span:not(.title-dot){font-weight:400}.title-dot{color:#eb793c}.sheet-key{display:flex;flex-direction:column;gap:9px;font-size:12px;padding-bottom:5px}.key-line{display:flex;align-items:center;gap:7px}.key-line .gray{background:#e2e5dc}.calendar{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));border-left:1px solid #adb2a6;border-top:1px solid #adb2a6}.month{border-right:1px solid #adb2a6;border-bottom:1px solid #adb2a6;min-width:0}.month-heading{margin:0;display:flex;align-items:center;justify-content:space-between;background:#f0f2ea;height:35px;padding:0 9px;border-bottom:1px solid #adb2a6;font-size:14px;font-weight:600}.month-heading span{font-size:10px;font-weight:400;color:#7b8072}.day{display:grid;grid-template-columns:21px 24px 1fr;align-items:center;height:19px;border-bottom:1px solid #e3e5de;padding:0 7px;font-size:12px;position:relative}.day:last-child{border-bottom:0}.day .weekday{font-size:10px;color:#777d70}.day .number{font-variant-numeric:tabular-nums;font-size:11px}.day .assignment{font-size:13px;font-weight:500;text-align:center;padding-right:24px}.day.weekend{background:#e5e8df}.day.weekend .weekday{font-weight:700;color:#505747}.day.sunday{color:#697060}.day.sunday .assignment{font-size:10px;color:#8e9586;font-weight:400}.day.mine{background:var(--orange);border-bottom-color:#e57f45}.day.mine .weekday{color:#6b3719}.day.mine .assignment{font-weight:700}.day.mine:after{content:'';position:absolute;right:7px;width:4px;height:4px;border-radius:50%;background:#613015}.day.empty{background:repeating-linear-gradient(-45deg,#f8f9f4,#f8f9f4 3px,#f0f2eb 3px,#f0f2eb 4px)}.residents{margin-top:22px}.residents-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:11px}.residents-heading h2{font-size:14px;font-weight:600;margin:0}.residents-heading>span{font-size:12px;color:#7a7e72}.names{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:repeat(3,40px);grid-auto-flow:column;border-top:1px solid #c5cabd;border-left:1px solid #c5cabd}.name-row{display:flex;align-items:center;border-right:1px solid #c5cabd;border-bottom:1px solid #c5cabd;padding:0 10px;gap:10px;min-width:0}.name-row.mine{background:#fff0e4;box-shadow:inset 3px 0 var(--orange)}.resident-number{font-size:18px;font-weight:500;width:22px;flex-shrink:0}.name-row input{width:100%;min-width:0;border:0;border-radius:0;background:transparent;padding:0;height:29px;font-size:14px;text-overflow:ellipsis}.name-row input::placeholder{color:#959a8c}.name-row input:focus{outline:0;box-shadow:0 1px #b65522}.sheet-footer{display:flex;justify-content:space-between;margin-top:16px;font-size:10px;color:#7d8275;letter-spacing:.2px}.below-sheet{display:flex;justify-content:space-between;font-size:12px;color:#73796b;gap:20px}.below-sheet p{margin-top:13px}#status{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);padding:13px 20px;border-radius:6px;background:#282d25;color:white;box-shadow:0 4px 20px #0002;font-size:14px;max-width:90vw;margin:0;z-index:5}#status:empty{display:none}
@media(min-width:1450px){main{max-width:1432px}.day{height:21px}}
@media(max-width:1120px){main{padding:0 22px 20px}.toolbar{flex-wrap:wrap;gap:18px;padding:22px 0}.settings{margin-left:auto}.exports{padding-top:0;margin-left:auto}.sheet{padding:25px 22px 17px}.day{padding:0 4px;grid-template-columns:18px 20px 1fr}.day .assignment{padding-right:15px}.month-heading{padding:0 6px;font-size:12px}}
@media(max-width:760px){main{padding:0 14px 20px}.toolbar{gap:19px}.brand{width:100%}.settings{width:100%;margin:0;gap:10px}.field.identity{flex:1}#identity{width:100%}#year{width:78px}#language{width:104px}.exports{margin:0;width:100%}.exports .button{flex:1}.above-sheet{font-size:10px;letter-spacing:.8px;margin-top:21px}.legend{font-size:11px;max-width:45%}.sheet{padding:20px 14px 14px}.eyebrow{font-size:8px;letter-spacing:1px}h1{font-size:37px;letter-spacing:-1.6px}.sheet-heading{align-items:flex-start;gap:16px;flex-direction:column;margin-bottom:18px}.sheet-key{flex-direction:row;flex-wrap:wrap;gap:12px;font-size:11px}.calendar{grid-template-columns:repeat(3,minmax(0,1fr))}.day{height:23px}.month-heading{height:34px;font-size:12px}.names{grid-template-columns:1fr;grid-template-rows:none;grid-auto-flow:row;grid-auto-rows:43px}.residents-heading>span{font-size:10px}.below-sheet{display:block}.below-sheet p{margin:12px 0 0}.sheet-footer{font-size:9px;gap:10px}}
@media(max-width:360px){.calendar{grid-template-columns:repeat(2,minmax(0,1fr))}.settings{flex-wrap:wrap}.sheet{padding:15px 8px}}
@page{size:A4 portrait;margin:9mm}
@media print{body{background:#fff}main{padding:0;max-width:none}.toolbar,.above-sheet,.below-sheet,#status,.residents-heading>span{display:none!important}.sheet{border:0;box-shadow:none;padding:0;print-color-adjust:exact;-webkit-print-color-adjust:exact}.sheet-heading{flex-direction:row;margin-bottom:12px;align-items:end}h1{font-size:32px}.eyebrow{font-size:8px}.sheet-key{flex-direction:column;font-size:9px;gap:5px}.calendar{grid-template-columns:repeat(6,minmax(0,1fr))}.month-heading{height:22px;font-size:10px}.day{height:10.6px;font-size:8px;grid-template-columns:13px 15px 1fr;padding:0 3px}.day .weekday,.day .number{font-size:7px}.day .assignment{font-size:9px}.day.sunday .assignment{font-size:7px}.residents{margin-top:13px}.residents-heading h2{font-size:11px}.names{grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:repeat(3,27px);grid-auto-flow:column}.name-row input{font-size:11px}.resident-number{font-size:13px}.sheet-footer{font-size:8px;margin-top:10px}.month,.residents{break-inside:avoid}}
/* Calendar controls and daily status. */
[hidden]{display:none!important}.toolbar{flex-wrap:wrap;gap:16px;padding:20px 0}.settings{margin-left:auto}.show-names{display:flex;align-items:center;gap:7px;font-size:14px;white-space:nowrap;padding-top:21px}.show-names input{width:17px;height:17px;margin:0;accent-color:#cf662b}.day.mine:after{display:none}.day .assignment{padding:0 2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.day{grid-template-columns:21px 24px minmax(0,1fr)}.residents{margin-bottom:8px}main{padding-bottom:calc(var(--footer-height,100px) + 35px + env(safe-area-inset-bottom))}#today-footer{position:fixed;bottom:0;left:0;right:0;z-index:4;display:flex;flex-direction:column;align-items:center;gap:6px;background:#282d25;color:#fffefa;padding:18px 24px calc(18px + env(safe-area-inset-bottom));text-align:center;box-shadow:0 -3px 16px #0001;overflow-wrap:anywhere}#today-footer strong{font-size:17px}#today-footer span{font-size:14px}#today-footer span:empty{display:none}#today-footer.is-mine{background:var(--orange);color:#282d25}#status{bottom:calc(var(--footer-height,100px) + 16px);width:max-content}#install{margin-top:21px}
@media screen{.past-month,.past-day{opacity:.15}.past-month:hover,.past-month:focus-within,.past-day:hover{opacity:1}}
@media(max-width:760px){.show-names{padding-top:0}#install{margin-top:0}.day{grid-template-columns:18px 20px minmax(0,1fr)}.day .assignment{font-size:11px}.exports{order:2}.toolbar{gap:14px}}
@media print{#today-footer,#install,.show-names{display:none!important}main{padding-bottom:0}.past-month,.past-day{opacity:1!important}.day{grid-template-columns:13px 15px minmax(0,1fr)}.day .assignment{font-size:8px}}
@media screen{
 .day:not(.empty):hover{box-shadow:inset 0 1px 0 #73796b,inset 0 -1px 0 #73796b;z-index:1}
 .month:hover{outline:1px solid #adb2a6;outline-offset:-1px}
}
.calendar.empty-year{display:block;border:0;padding:28px 0;color:#73766e}
.calendar.empty-year p{margin:0;line-height:1.5}

@media screen{
 .day.today{outline:2px solid #282d25;outline-offset:-2px;z-index:2}
 .day.today .number{font-weight:800;color:#fffefa;background:#282d25;border-radius:3px;text-align:left;position:relative;left:-3px;justify-self:start;padding:0 3px}
}

/* Wider screen columns; print keeps its independent six-column layout. */
@media screen {
 .calendar{grid-template-columns:minmax(0,1fr)}
}
@media screen and (min-width:480px) {
 .calendar{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media screen and (min-width:648px) {
 .calendar{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media screen and (min-width:960px) {
 .calendar{grid-template-columns:repeat(4,minmax(0,1fr))}
}
@media screen and (min-width:1440px) {
 .calendar{grid-template-columns:repeat(6,minmax(0,1fr))}
}

/* Keep install and export actions aligned, including wrapped mobile rows. */
.toolbar{align-items:flex-end}
.brand{align-self:center}
.exports{align-items:center;flex-wrap:wrap;padding-top:0;gap:9px}
#install{margin-top:0}
.button svg{flex-shrink:0}
select{appearance:none;-webkit-appearance:none;padding-right:34px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='m2 2 4 4 4-4' fill='none' stroke='%23565a52' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}
@media screen and (max-width:760px){
 .exports{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,150px),1fr));width:100%}
 .exports .button{min-height:39px;height:auto;padding:10px 12px;white-space:normal}
}

/* Own the current month's left edge independently of faded neighbours. */
.month.current-month{position:relative}
.month.current-month::before{content:'';position:absolute;top:0;bottom:0;left:0;width:1px;background:#adb2a6;z-index:3;pointer-events:none}

@media screen{.toolbar + .sheet{margin-top:24px}}

/* Match the checkbox row to the height of the adjacent controls. */
.show-names{padding-top:0;min-height:39px;align-items:center}

/* Keep mobile touch scrolling while disabling page zoom gestures. */
@media screen and (max-width:760px){
 html,body{touch-action:pan-x pan-y}
 input,select,.name-row input{font-size:16px}
}
