/* Hallmark · shape: app screen · genre: editorial · theme: Vellum (deal 2/3) · nav: top bar · signature: calendar ledger · states: empty/full/error/disabled · vellum: light paper, system type · posture: restrained · surface: absolute · contrast: to verify · v2.0.0 */
/* Hallmark · waive 7b · surface: absolute, print media only · paper output is white; print-only ink avoids printer background fills */
/* Hallmark · waive 24b · app calendar at 320px with seven touch columns · dense calendar events use optical gaps to preserve legibility */
/* Hallmark · pre-emit critique: task first; weakest: seven-column density on mobile; use single-month full width and progressive details. */
@import url('./tokens.css');
*{box-sizing:border-box}html,body{margin:0;overflow-x:clip}body{font-family:var(--font);color:var(--ink);background:var(--paper);font-size:16px;line-height:1.6;font-variant-numeric:tabular-nums}::selection{background:var(--tint);color:var(--ink)}[hidden]{display:none!important}a{color:var(--accent);text-underline-offset:4px}button,input,select,textarea{font:inherit;color:inherit}button,a,input,select,summary,textarea{touch-action:manipulation}button,input,select{min-height:44px}button{cursor:pointer;border:1px solid var(--field);border-radius:var(--radius);padding:var(--space-sm) var(--space-md);background:var(--surface)}button:active{transform:translateY(1px)}button:disabled,select:disabled{opacity:.55;cursor:not-allowed}button[aria-busy=true]{cursor:progress}:focus-visible{outline:3px solid var(--focus);outline-offset:3px}input:focus-visible,select:focus-visible,textarea:focus-visible{outline-offset:-3px}input,select,textarea{background:var(--surface);border:1px solid var(--field);border-radius:var(--radius);padding:var(--space-sm) 12px;min-width:0;max-width:100%;caret-color:var(--accent)}input[aria-invalid=true]{border-color:var(--error)}input[type=checkbox]{accent-color:var(--accent);width:18px;height:18px;min-height:0}select{appearance:none;width:100%;padding-right:44px}.select-wrap{position:relative;display:block}.select-wrap:after{content:"";position:absolute;right:16px;top:18px;width:7px;height:7px;border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);transform:rotate(45deg);pointer-events:none}label{display:block;font-size:14px}.container{max-width:var(--container);padding-inline:var(--space-xl);margin-inline:auto}.site-header{border-bottom:1px solid var(--line);background:var(--surface)}.header-inner{display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg);min-height:80px}.brand{font-size:24px;font-weight:700;color:var(--ink);text-decoration:none}.brand small{font-size:14px;color:var(--muted);font-weight:400;margin-left:var(--space-md)}nav{display:flex;gap:var(--space-lg)}nav a{display:inline-flex;align-items:center;min-height:44px;font-size:14px;text-decoration:none}nav a[aria-current=page]{color:var(--ink);text-decoration:underline}.skip{position:absolute;top:-100px;left:16px;background:var(--surface);padding:12px;z-index:10}.skip:focus-visible{top:8px}.intro{display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg);padding:var(--space-xl) 0 var(--space-lg)}.intro h1{margin:0;font-size:36px;line-height:1.25;font-weight:700;overflow-wrap:break-word;min-width:0;text-wrap:balance}.intro p{margin:10px 0 0;color:var(--muted);max-width:65ch}.year-note{font-size:14px;color:var(--muted);white-space:nowrap;border-left:1px solid var(--line);padding-left:var(--space-lg)}.year-note strong{display:block;color:var(--ink);font-size:20px}.toolbar{display:flex;flex-wrap:wrap;align-items:end;gap:var(--space-md);padding:20px 0;border-top:2px solid var(--ink);border-bottom:1px solid var(--line)}.seg{display:flex;align-self:end}.seg button{border-color:var(--line);border-radius:0;padding-inline:20px}.seg button[aria-pressed=true]{background:var(--ink);color:var(--surface);border-color:var(--ink)}.field{width:166px}.field label{margin-bottom:var(--space-xs)}.check{display:flex;align-items:center;gap:var(--space-sm);min-height:44px;font-size:16px}.primary{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.print-action{margin-left:auto}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:var(--space-xl);padding-top:var(--space-lg)}.calendar-panel{min-width:0}.calendar-nav{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md)}.calendar-nav h2{font-size:16px;margin:0 auto 0 0}.helper{color:var(--muted);font-size:14px;margin:var(--space-sm) 0 var(--space-md)}.calendar{background:var(--surface)}.month h2{display:flex;align-items:baseline;gap:12px;margin:0;padding:12px var(--space-xs) 18px;font-size:28px;line-height:1.25}.month h2 span{font-size:14px;font-weight:inherit;color:inherit}.weekdays,.days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.weekdays{border-block:1px solid var(--line);text-align:center;font-size:14px}.weekdays span{padding:var(--space-sm) 0}.day{border:0;border-radius:0;border-bottom:1px solid var(--line);border-right:1px solid var(--line);min-height:98px;min-width:0;padding:var(--space-sm) 6px;text-align:left;display:flex;flex-direction:column;align-items:flex-start;background:var(--surface);line-height:1.4}.day:nth-child(7n){border-right:0}.date-number{font-size:24px;font-weight:500}.lunar{font-size:12px;color:var(--muted);margin-top:3px}.rest .date-number,.weekdays .rest{color:var(--rest)}.events{display:flex;flex-wrap:wrap;gap:3px;margin-top:var(--space-xs);max-width:100%}.event{display:block;font-size:12px;padding:1px 3px;overflow-wrap:anywhere;border-radius:2px}.holiday{background:var(--holiday-bg);color:var(--rest)}.substitute{background:var(--sub-bg);color:var(--sub-ink)}.festival{background:var(--festival-bg);color:var(--festival-ink)}.term{background:var(--term-bg);color:var(--term-ink)}.day.selected{box-shadow:inset 0 0 0 2px var(--accent);background:var(--tint)}.blank{border-bottom:1px solid var(--line)}.detail{border-left:1px solid var(--line);padding-left:var(--space-lg);min-width:0}.detail h2{font-size:16px;margin:12px 0 var(--space-md)}.chosen{font-size:30px;font-weight:500;line-height:1.4;margin:0 0 var(--space-md)}.chosen span{font-size:16px;white-space:nowrap}.empty{color:var(--muted);margin-bottom:var(--space-lg)}.day-status{border-block:1px solid var(--line);padding:var(--space-md) 0}.day-status small{display:block;color:var(--muted);font-size:12px}.detail-events{padding:0;list-style:none}.detail-events li{margin-bottom:12px;font-size:14px;overflow-wrap:anywhere}.kind{display:inline-block;padding:2px 5px;margin-right:var(--space-sm);font-size:12px}.detail button{width:100%}.detail details{border-top:1px solid var(--line);margin-top:var(--space-lg);padding-top:var(--space-md)}.detail summary{cursor:pointer;min-height:44px}.detail input{width:100%}.detail form button{margin-top:var(--space-sm)}.error{color:var(--error);font-size:14px;min-height:1.6em}textarea{width:100%;min-height:170px;resize:vertical}.muted{color:var(--muted)}.message{font-size:14px;min-height:24px;margin:12px 0}.legend{display:flex;flex-wrap:wrap;gap:var(--space-md);font-size:12px;color:var(--muted);margin:var(--space-md) 0}.legend span{padding:2px 5px}.scope{font-size:14px;color:var(--muted);max-width:75ch}.year-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-lg)}.year-grid .day{min-height:76px;padding:var(--space-xs) 2px}.year-grid .date-number{font-size:18px}.year-grid .event{font-size:11px;padding-inline:1px}.year-grid .month h2{font-size:22px}.month-links{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin-top:var(--space-lg)}.month-links a{white-space:nowrap;padding:var(--space-sm) 12px;min-width:44px;min-height:44px;text-align:center;text-decoration:none;border:1px solid var(--line)}.month-links a[aria-current=true]{background:var(--tint);border-color:var(--accent)}.section{margin-top:var(--space-2xl);padding-top:var(--space-lg);border-top:1px solid var(--line)}.section h2{font-size:24px;margin:0 0 var(--space-md)}.holiday-table{width:100%;border-collapse:collapse;text-align:left}.holiday-table caption{text-align:left;font-size:24px;font-weight:700;padding-bottom:var(--space-md)}.holiday-table th{font-size:14px;color:var(--muted);font-weight:500}.holiday-table td,.holiday-table th{padding:12px var(--space-md) 12px 0;border-bottom:1px solid var(--line)}.holiday-table td:first-child{white-space:nowrap;width:150px}.holiday-table td:last-child{white-space:nowrap;width:120px}.site-footer{margin-top:var(--space-2xl);padding-block:var(--space-lg);border-top:1px solid var(--line);font-size:14px;color:var(--muted)}.site-footer .container{display:flex;justify-content:space-between;gap:var(--space-lg);flex-wrap:wrap}.prose{max-width:75ch;padding-top:var(--space-xl);min-height:65vh}.prose h1{font-size:32px}.prose h2{font-size:22px;margin-top:var(--space-xl)}.prose p{max-width:70ch}#print-area{display:none}.ad-slot{border-top:1px solid var(--line);padding:20px 0;margin-top:var(--space-lg)}.ad-slot a{overflow-wrap:anywhere}
@media(hover:hover){button:not(:disabled):hover{background:var(--tint);color:var(--ink)}.primary:not(:disabled):hover{background:var(--accent-deep);color:var(--on-accent)}a:hover{text-decoration:underline}.day:not(:disabled):hover{background:var(--tint)}}
@media(max-width:950px){.workspace{grid-template-columns:minmax(0,1fr) 240px;gap:20px}.container{padding-inline:var(--space-lg)}.year-grid{grid-template-columns:minmax(0,1fr)}.day{min-height:90px}.toolbar{gap:12px}.field{width:150px}}
@media(max-width:720px){.container{padding-inline:var(--space-md)}.header-inner{flex-wrap:wrap;gap:0;padding-block:12px}.brand small{margin-left:10px}nav{gap:var(--space-md);width:100%;justify-content:space-between}.intro{align-items:flex-start;padding-block:var(--space-lg)}.intro h1{font-size:28px}.intro p{font-size:14px}.year-note{display:none}.workspace{grid-template-columns:minmax(0,1fr);gap:var(--space-lg)}.detail{border-left:0;border-top:1px solid var(--line);padding:var(--space-md) 0 0}.detail .chosen{font-size:28px}.detail button{width:auto}.detail form button{width:100%}.field{flex:1;min-width:135px}.seg{width:100%}.seg button{flex:1}.print-action{margin-left:auto}.calendar{margin-inline:-var(--space-md)}.month h2{padding-inline:var(--space-md)}.day{min-height:92px;padding:6px 3px}.date-number{font-size:20px}.lunar{font-size:12px}.event{font-size:11px;padding:1px 2px}.calendar-nav{flex-wrap:wrap}.calendar-nav h2{width:100%}.legend{gap:var(--space-sm)}.year-grid{gap:var(--space-xl)}.year-grid .day{min-height:80px}.year-grid .date-number{font-size:20px}.holiday-table td,.holiday-table th{padding-right:var(--space-sm);font-size:14px}.holiday-table td:first-child{width:90px}.holiday-table td:last-child{width:62px}.section{margin-top:var(--space-xl)}.site-footer .container{gap:12px}.month-links{gap:var(--space-xs)}.month-links a{flex:1 0 14%}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@media(forced-colors:active){select{appearance:auto}.select-wrap:after{display:none}.day.selected{outline:2px solid var(--ink)}}
@page{size:A4 portrait;margin:10mm}
@media print{body{background:var(--print-paper);color:var(--print-ink)}body>*{display:none!important}#print-area{display:block!important}#print-area h1{font-size:20pt;margin:0 0 4mm}#print-area h1 small{font-size:11pt;font-weight:400}.print-calendar .month h2{font-size:17pt;padding:2mm 0}.print-calendar .day{min-height:27mm;padding:2mm}.print-calendar .date-number{font-size:16pt}.print-calendar .lunar,.print-calendar .event{font-size:8pt}.print-calendar .weekdays{font-size:10pt}.print-year{line-height:1.2;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:2mm}.print-year .month{break-inside:avoid}.print-year .month h2{font-size:11pt;padding:1mm 0}.print-year .month h2 span{font-size:7pt}.print-year .day{min-height:6mm;padding:.4mm .2mm}.print-year .date-number{font-size:8pt}.print-year .lunar,.print-year .event{font-size:5.7pt;line-height:1.1;margin:0;padding:0}.print-year .events{margin:0;gap:0}.print-year .weekdays{font-size:7pt}.print-year .weekdays span{padding:.5mm 0}.print-note{font-size:7pt;line-height:1.2;margin:2mm 0 0}.print-calendar .day{background:var(--print-paper);color:var(--print-ink)}.print-calendar .event{background:var(--clear);color:var(--print-ink)}.print-calendar .holiday,.print-calendar .substitute{text-decoration:underline}.print-calendar .blank{min-height:0}.month h2{break-after:avoid}}

/* Export actions follow the current calendar settings. */
.export-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding-block:var(--space-md);border-bottom:1px solid var(--line)}.export-bar p{margin:0}.export-bar .helper{font-size:12px;margin-top:var(--space-xs)}.export-actions{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.export-actions button{white-space:nowrap}.export-status{margin:0;font-size:14px;overflow-wrap:anywhere}.export-status:not(:empty){margin-top:var(--space-sm)}.export-link{display:inline-flex;align-items:center;min-height:44px;margin-top:var(--space-xs)}
@media(max-width:720px){.export-bar{align-items:stretch;flex-direction:column;gap:var(--space-sm)}.export-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.export-actions button{padding-inline:var(--space-xs);font-size:14px}}
