:root{--bg: #f4f6f8;--surface: #ffffff;--surface-2: #f8fafb;--text: #1c2430;--muted: #5f6b7a;--accent: #2f7d6d;--accent-soft: #e3f1ee;--accent-text: #ffffff;--border: #d8dee5;--error: #b3261e;--error-soft: #fbe9e7;--warn: #8a5a00;--warn-soft: #fdf1d8;font-family:system-ui,-apple-system,Segoe UI,Noto Sans Thai,sans-serif;color:var(--text);background:var(--bg);line-height:1.5}@media (prefers-color-scheme: dark){:root{--bg: #12161c;--surface: #1b2129;--surface-2: #161b22;--text: #e6eaef;--muted: #9aa5b3;--accent: #5bb8a5;--accent-soft: #1d3530;--accent-text: #0d1a17;--border: #2d3540;--error: #f2877f;--error-soft: #3a2120;--warn: #f0c060;--warn-soft: #3a3020}}*{box-sizing:border-box}body{margin:0;background:var(--bg)}h1,h2{margin:0;line-height:1.3}h1{font-size:1.35rem}h2{font-size:1.05rem}a{color:var(--accent)}.muted{color:var(--muted);margin:0}.error{color:var(--error);margin:0}.notice{margin:0;padding:8px 12px;border-radius:8px;background:var(--warn-soft);color:var(--warn);font-size:.9rem}.mono{font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:.92em}main.center{min-height:100vh;display:flex;align-items:flex-start;justify-content:center;padding:48px 16px}.card{width:100%;max-width:420px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:24px;display:flex;flex-direction:column;gap:14px}.card label{display:flex;flex-direction:column;gap:6px;font-size:.9rem}.app-header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:12px 16px;background:var(--surface);border-bottom:1px solid var(--border)}.brand{font-weight:700;color:var(--text);text-decoration:none}.header-user{display:flex;align-items:center;gap:12px;font-size:.85rem;min-width:0}.header-user .muted{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.container{max-width:1000px;margin:0 auto;padding:20px 16px 48px}.page,.stack{display:flex;flex-direction:column;gap:16px}.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.panel{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;display:flex;flex-direction:column;gap:16px}.subpanel{background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:12px}.actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}input,select,textarea{font:inherit;width:100%;padding:9px 11px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text)}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:-1px}[aria-invalid=true]{border-color:var(--error)}button,.button{font:inherit;display:inline-flex;align-items:center;justify-content:center;padding:9px 16px;border:1px solid transparent;border-radius:8px;background:var(--accent);color:var(--accent-text);cursor:pointer;text-decoration:none;white-space:nowrap}button:disabled{opacity:.6;cursor:default}button.secondary,.button.secondary{background:transparent;color:var(--text);border-color:var(--border)}button.link{background:none;border:none;padding:4px 6px;color:var(--accent)}button.danger{color:var(--error)}.search{padding:12px 14px;font-size:1rem}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px}.span-2{grid-column:1 / -1}.field{display:flex;flex-direction:column;gap:5px;font-size:.9rem}.field>span:first-child{color:var(--muted)}.field-error{color:var(--error);font-size:.82rem}.checkbox{display:flex;align-items:center;gap:8px;font-size:.9rem}.checkbox input{width:auto}@media (max-width: 640px){.form-grid{grid-template-columns:1fr}}.table-wrap{overflow-x:auto;background:var(--surface);border:1px solid var(--border);border-radius:12px}.table{width:100%;border-collapse:collapse;font-size:.92rem}.table th,.table td{padding:10px 14px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}.table th{color:var(--muted);font-weight:500;font-size:.82rem}.table tbody tr{cursor:pointer}.table tbody tr:hover{background:var(--surface-2)}.table tbody tr:last-child td{border-bottom:none}.empty{padding:32px 0;text-align:center}.badge{display:inline-block;padding:2px 10px;border-radius:999px;font-size:.78rem;background:var(--surface-2);color:var(--muted);border:1px solid var(--border);margin-left:6px;white-space:nowrap}.badge-active,.badge-primary{background:var(--accent-soft);color:var(--accent);border-color:transparent}.badge-deceased{background:var(--error-soft);color:var(--error);border-color:transparent}.patient-title{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.info-grid{display:grid;grid-template-columns:max-content 1fr;gap:8px 20px;margin:0;font-size:.92rem}.info-grid dt{color:var(--muted)}.info-grid dd{margin:0;white-space:pre-wrap}.info-grid dd.alert{color:var(--warn);background:var(--warn-soft);padding:2px 8px;border-radius:6px;justify-self:start}.guardian-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:12px 0;border-top:1px solid var(--border)}.guardian-row:first-of-type{border-top:none}.guardian-row p{margin:2px 0 0;font-size:.88rem}.row-actions{display:flex;gap:4px}.vitals-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:14px 16px}.bmi-output{padding:9px 11px;border:1px dashed var(--border);border-radius:8px;font-weight:600}.unsaved{color:var(--warn);font-weight:600}.vital-flag{display:inline-block;padding:2px 8px;border-radius:6px;font-size:.85rem;font-weight:600}.vital-flag-red{background:var(--error-soft);color:var(--error)}.vital-flag-yellow{background:var(--warn-soft);color:var(--warn)}.flag-row{display:flex;flex-wrap:wrap;gap:4px 16px}.bmi-label-wrap{display:flex;flex-direction:column;align-items:flex-start;gap:2px;margin-top:4px}.bmi-label{display:inline-block;padding:2px 8px;border-radius:6px;font-size:.85rem;font-weight:600}.bmi-label-obese{background:var(--error-soft);color:var(--error)}.bmi-label-overweight_or_more{background:var(--warn-soft);color:var(--warn);cursor:help}.bmi-label-unclassified{background:var(--surface-2);border:1px solid var(--border);color:var(--muted);font-weight:400}.diagnosis-grid{display:grid;grid-template-columns:160px 1fr 110px;gap:12px}.code-chip{padding:1px 6px;border-radius:6px;background:var(--surface-2);border:1px solid var(--border)}.inline-controls{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.inline-controls select{width:auto}.pending-vaccines{display:flex;flex-direction:column;gap:8px}.plain-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}.badge-visit-in_progress{background:var(--warn-soft);color:var(--warn);border-color:transparent}.badge-visit-completed{background:var(--accent-soft);color:var(--accent);border-color:transparent}@media (max-width: 640px){.diagnosis-grid{grid-template-columns:1fr}}.small{font-size:.82rem}.legend{display:flex;flex-wrap:wrap;gap:4px 14px}.summary-chips{display:flex;flex-wrap:wrap;gap:8px}.chip{padding:4px 12px;border-radius:999px;font-size:.88rem;white-space:nowrap}.chip-overdue{background:var(--error-soft);color:var(--error)}.chip-due{background:var(--warn-soft);color:var(--warn)}.series-row{display:grid;grid-template-columns:minmax(160px,220px) 1fr;gap:8px 16px;padding:14px 0;border-top:1px solid var(--border)}.series-row:first-of-type{border-top:none}.series-name p{margin:2px 0 0}.slots{display:flex;flex-wrap:wrap;gap:8px}.slot{font:inherit;display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:150px;max-width:240px;padding:8px 10px;border-radius:8px;border:1px solid var(--border);background:var(--surface-2);color:var(--text);text-align:left;white-space:normal;cursor:default}button.slot{cursor:pointer}button.slot:hover{border-color:var(--accent)}.slot-title{font-size:.85rem;font-weight:600}.slot-detail{font-size:.8rem;color:var(--muted)}.slot-given{background:var(--accent-soft);border-color:transparent}.slot-due{background:var(--warn-soft);border-color:var(--warn)}.slot-overdue{background:var(--error-soft);border-color:var(--error)}.slot-overdue .slot-title{color:var(--error)}.slot-missed,.slot-not_required{opacity:.6;border-style:dashed}button.slot-missed:hover{opacity:1}.slot-warn{border-color:var(--warn)}.extra-doses{grid-column:2;margin:0;padding-left:18px}.alert-inline{color:var(--warn);font-size:.82rem;white-space:normal}.table.static tbody tr{cursor:default}.segmented{display:inline-flex;flex-wrap:wrap;gap:4px;padding:4px;border:1px solid var(--border);border-radius:10px;align-self:flex-start}.segmented label{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:7px;font-size:.9rem;cursor:pointer}.segmented label.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.segmented input{width:auto;margin:0}@media (max-width: 640px){.series-row{grid-template-columns:1fr}.extra-doses{grid-column:1}.slot{min-width:0;flex:1 1 140px}}@media (max-width: 480px){.info-grid{grid-template-columns:1fr;gap:2px}.info-grid dd{margin-bottom:8px}}
