.letter-layout{display:grid;gap:16px}@media(min-width:900px){.letter-layout{grid-template-columns:320px 1fr;align-items:start}}.letter-form .field textarea{min-height:72px;font-family:inherit}.letter-form .field textarea.letter-body-input{min-height:260px}.letter-preview{background:#fff;color:#111;border:1px solid #ddd;padding:48px 56px;font-family:Georgia,Times New Roman,serif;font-size:12pt;line-height:1.55;max-width:21cm;min-height:24cm;white-space:pre-wrap;overflow-wrap:break-word}.letter-preview .letter-sender{max-width:45%}.letter-preview .letter-recipient{margin:32px 0 32px auto;max-width:45%;text-align:left}.letter-preview .letter-meta{margin:24px 0}.letter-preview .letter-object{font-weight:700;margin:24px 0 16px}.letter-preview .letter-reference{margin:0 0 16px}.letter-preview .letter-body{text-align:justify}.letter-preview .letter-sign{margin-top:32px;text-align:right}@media print{body *{visibility:hidden}.letter-preview,.letter-preview *{visibility:visible}.letter-preview{position:absolute;inset:0;width:auto;max-width:none;min-height:auto;border:none;padding:0;margin:0}}@page{size:A4;margin:20mm 18mm}:root{--bg: #f7f8fa;--surface: #ffffff;--text: #1a1d24;--text-muted: #5c6470;--border: #dde1e7;--primary: #1a5fd7;--primary-hover: #1550b5;--danger: #c92a2a;--warn-bg: #fff4e0;--warn-text: #8a5a00;--ok-bg: #e6f4ea;--ok-text: #1e6b34;--expired-bg: #fde8e8;--expired-text: #a61e1e;--radius: 8px;--space: 8px;font-family:system-ui,-apple-system,Segoe UI,sans-serif}@media(prefers-color-scheme:dark){:root{--bg: #14171c;--surface: #1d2128;--text: #e8eaee;--text-muted: #9aa3af;--border: #333a45;--primary: #5b8def;--primary-hover: #7ba3f2;--warn-bg: #3a2e12;--warn-text: #f0c46c;--ok-bg: #16301f;--ok-text: #7fd99a;--expired-bg: #3a1a1a;--expired-text: #f08a8a}}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text)}a{color:var(--primary)}button{font:inherit;border-radius:var(--radius);border:1px solid var(--border);padding:calc(var(--space) * .75) var(--space);background:var(--surface);color:var(--text);cursor:pointer}button.primary{background:var(--primary);border-color:var(--primary);color:#fff}button.primary:hover{background:var(--primary-hover)}button.danger{color:var(--danger)}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--primary);outline-offset:2px}input,select,textarea{font:inherit;padding:calc(var(--space) * .75);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);max-width:100%}.app-header{display:flex;align-items:center;gap:var(--space);padding:var(--space) calc(var(--space) * 2);background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap}.app-header nav{display:flex;gap:var(--space);flex-wrap:wrap}.app-header nav a{text-decoration:none;padding:4px 8px;border-radius:var(--radius)}.app-header nav a.active{background:var(--primary);color:#fff}.app-header .spacer{flex:1}.app-main{padding:calc(var(--space) * 2);max-width:960px;margin:0 auto}.app-footer{padding:var(--space) calc(var(--space) * 2);border-top:1px solid var(--border);color:var(--text-muted);display:flex;gap:var(--space);font-size:.85rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:calc(var(--space) * 2);margin-bottom:var(--space)}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:.8rem;font-weight:600}.badge.expired,.badge.notice_passed{background:var(--expired-bg);color:var(--expired-text)}.badge.due_soon{background:var(--warn-bg);color:var(--warn-text)}.badge.valid{background:var(--ok-bg);color:var(--ok-text)}.badge.unscheduled{background:var(--border);color:var(--text-muted)}.badge.resolved{background:var(--ok-bg);color:var(--ok-text)}.field{display:flex;flex-direction:column;gap:4px;margin-bottom:var(--space)}.field label{font-weight:600;font-size:.9rem}.login-screen{min-height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--space) * 2);text-align:center;padding:calc(var(--space) * 2)}.error-text{color:var(--danger)}.muted{color:var(--text-muted)}.landing{min-height:100vh;display:flex;flex-direction:column}.landing-header{display:flex;align-items:center;gap:var(--space);padding:var(--space) calc(var(--space) * 2);background:var(--surface);border-bottom:1px solid var(--border)}.landing-header .spacer{flex:1}.landing-header a{text-decoration:none;font-weight:600}.landing-hero{text-align:center;padding:calc(var(--space) * 8) calc(var(--space) * 2) calc(var(--space) * 5);max-width:720px;margin:0 auto}.landing-hero h1{font-size:clamp(1.8rem,5vw,2.8rem);margin:0 0 var(--space)}.landing-hero>.muted{font-size:1.1rem}.landing-cta{margin-top:calc(var(--space) * 3)}.landing-cta button{font-size:1.05rem;padding:calc(var(--space) * 1.25) calc(var(--space) * 3)}.landing-cta-hint{font-size:.85rem;margin-top:var(--space)}.landing-features{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--space);padding:0 calc(var(--space) * 2) calc(var(--space) * 4);max-width:960px;margin:0 auto;width:100%}.landing-features h2{font-size:1.05rem;margin-top:0}.landing-features p{color:var(--text-muted);margin-bottom:0}.landing .app-footer{margin-top:auto;justify-content:center}.import-mapping,.import-preview,.report-table{width:100%;border-collapse:collapse;font-size:.9rem}.import-mapping th,.import-mapping td,.import-preview th,.import-preview td,.report-table th,.report-table td{text-align:left;padding:calc(var(--space) * .5) var(--space);border-bottom:1px solid var(--border)}.import-preview{display:block;overflow-x:auto}.import-preview tr.row-skipped td{color:var(--text-muted)}@media print{.no-print,nav.app-nav,.app-footer{display:none!important}.card{border:none;box-shadow:none;padding:var(--space) 0;break-inside:avoid}body{background:#fff}}.cal-nav{display:flex;align-items:center;gap:var(--space);margin-bottom:var(--space)}.cal-nav strong{font-size:1.05rem}.cal-grid{width:100%;border-collapse:collapse;table-layout:fixed}.cal-grid th{font-size:.75rem;color:var(--text-muted);text-transform:uppercase;padding:calc(var(--space) * .5);text-align:center}.cal-grid td{border:1px solid var(--border);vertical-align:top;height:88px;padding:calc(var(--space) * .5);font-size:.8rem}.cal-grid td.out{background:color-mix(in srgb,var(--border) 30%,transparent);color:var(--text-muted)}.cal-grid td.today{outline:2px solid var(--accent, #3b6fd4);outline-offset:-2px}.cal-daynum{font-weight:600;font-size:.8rem;display:block;margin-bottom:2px}.cal-entry{display:block;width:100%;text-align:left;font-size:.72rem;padding:1px 4px;margin-bottom:1px;border-radius:3px;border:none;background:var(--warn-bg);color:var(--warn-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.cal-entry.valid{background:var(--ok-bg);color:var(--ok-text)}.cal-entry.expired,.cal-entry.notice_passed{background:var(--expired-bg);color:var(--expired-text)}.cal-entry.unscheduled,.cal-entry.resolved{background:var(--border);color:var(--text-muted)}.cal-diamond{font-size:.65em}@media(max-width:480px){.cal-grid td{height:64px;padding:2px;font-size:.7rem}.cal-entry{font-size:.65rem}}.excerpt{margin:4px 0;padding:6px 10px;border-left:3px solid var(--border);color:var(--text-muted);font-size:.85em;font-style:italic;word-break:break-word}.landing-extractor{max-width:720px;margin:0 auto 24px}
