:root{
  --paper:#F5F7F5;
  --card:#FFFFFF;
  --ink:#12302E;
  --ink-soft:#4B615E;
  --teal:#1F6F6A;
  --teal-deep:#123F3C;
  --teal-pale:#E4EEEC;
  --amber:#C97A2E;
  --amber-pale:#FBEBD6;
  --line:#DCE6E2;
  --danger:#B54A3F;
  --danger-pale:#F6E4E1;
  --r-lg:16px;
  --r-md:10px;
  --r-sm:7px;
}
*{box-sizing:border-box;}
body{margin:0;background:var(--paper);color:var(--ink);font-family:'Public Sans',sans-serif;font-size:14px;}
::selection{background:var(--teal-pale);}
button{font-family:inherit;cursor:pointer;}
input, select, textarea{font-family:inherit;}
a{color:inherit;}

.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  padding:10px 16px;border-radius:var(--r-sm);border:none;font-size:13.5px;font-weight:600;
}
.btn-primary{background:var(--teal);color:#fff;}
.btn-primary:hover{background:var(--teal-deep);}
.btn-secondary{background:var(--teal-pale);color:var(--teal-deep);}
.btn-secondary:hover{background:#d6e8e5;}
.btn-amber{background:var(--amber);color:#fff;}
.btn-amber:hover{background:#a9631f;}
.btn-ghost{background:transparent;color:var(--ink-soft);border:1px solid var(--line);}
.btn-ghost:hover{background:var(--paper);}
.btn-block{width:100%;}
.btn-sm{padding:6px 11px;font-size:12.5px;border-radius:7px;}
.btn:disabled{opacity:.5;cursor:not-allowed;}

.field{margin-bottom:14px;}
.field label{display:block;font-size:12px;font-weight:600;color:var(--ink-soft);margin-bottom:5px;}
.field input, .field select, .field textarea{
  width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:var(--r-sm);
  font-size:13.5px;color:var(--ink);background:#FCFDFD;
}
.field input:focus, .field select:focus, .field textarea:focus{
  outline:none;border-color:var(--teal);box-shadow:0 0 0 3px var(--teal-pale);
}
.field textarea{resize:vertical;min-height:64px;}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px;}

/* ================= LOGIN PAGE ================= */
.login-body{display:flex;align-items:center;justify-content:center;min-height:100vh;}
.login-wrap{width:100%;max-width:400px;padding:20px;}
.login-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:30px 28px;box-shadow:0 20px 45px -22px rgba(18,48,46,.25);}
.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:22px;}
.login-title{font-family:'Source Serif 4',serif;font-size:18px;font-weight:700;color:var(--ink);}
.login-sub{font-size:12px;color:var(--ink-soft);margin-top:2px;}
.login-error{background:var(--danger-pale);color:var(--danger);border-radius:8px;padding:9px 12px;font-size:12.5px;margin-bottom:14px;font-weight:600;}
.login-foot{font-size:11px;color:var(--ink-soft);text-align:center;margin-top:16px;line-height:1.5;}

/* ================= APP SHELL ================= */
#app{display:flex;min-height:100vh;}
.sidebar{
  width:216px;flex-shrink:0;background:var(--teal-deep);color:#EAF3F1;
  display:flex;flex-direction:column;padding:22px 14px;position:sticky;top:0;height:100vh;
}
.brand{display:flex;align-items:center;gap:9px;padding:0 6px 22px 6px;}
.brand svg{flex-shrink:0;}
.brand-name{font-family:'Source Serif 4',serif;font-size:16.5px;line-height:1.15;font-weight:600;}
.brand-sub{font-size:10.5px;color:#9FC3BE;letter-spacing:.04em;}
nav.navlist{display:flex;flex-direction:column;gap:3px;margin-top:6px;}
.navitem{
  display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:var(--r-md);
  color:#CFE6E2;background:transparent;border:none;text-align:left;font-size:13.5px;font-weight:500;
  transition:background .15s ease;
}
.navitem svg{flex-shrink:0;opacity:.9;}
.navitem:hover{background:rgba(255,255,255,.06);}
.navitem.active{background:#EAF3F1;color:var(--teal-deep);}
.navitem.active svg{opacity:1;}
.navitem .badge{
  margin-left:auto;background:var(--amber);color:#fff;border-radius:20px;font-size:10.5px;
  padding:1px 7px;font-weight:700;
}
.sidebar-foot{margin-top:auto;padding-top:14px;border-top:1px solid rgba(255,255,255,.12);}
.user-chip{display:flex;align-items:center;gap:9px;padding:7px 11px;margin-bottom:4px;}
.user-chip .avatar{width:26px;height:26px;border-radius:50%;background:rgba(255,255,255,.14);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0;}
.user-chip .uname{font-size:12.5px;font-weight:600;line-height:1.2;}
.user-chip .urole{font-size:10px;color:#9FC3BE;}
.settings-btn{
  display:flex;align-items:center;gap:9px;padding:8px 11px;border-radius:var(--r-md);width:100%;
  background:transparent;border:none;color:#CFE6E2;font-size:13px;font-weight:500;
}
.settings-btn:hover{background:rgba(255,255,255,.06);}

main{flex:1;min-width:0;padding:32px 40px 60px;max-width:1180px;}
.page-head{margin-bottom:24px;}
.eyebrow{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.09em;color:var(--teal);text-transform:uppercase;font-weight:500;}
h1.page-title{font-family:'Source Serif 4',serif;font-size:26px;margin:4px 0 6px;font-weight:600;}
.page-desc{color:var(--ink-soft);font-size:13.5px;max-width:560px;}

.grid2{display:grid;grid-template-columns:1fr 1fr;gap:26px;align-items:start;}
@media(max-width:920px){.grid2{grid-template-columns:1fr;}}

.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:22px;}
.card h3{margin:0 0 14px;font-size:14px;font-weight:600;color:var(--ink);}

/* ================= LETTER ================= */
.letter-wrap{position:sticky;top:24px;}
.letter{
  background:#fff;border:1px solid var(--line);border-radius:12px;padding:34px 34px 26px;
  box-shadow:0 1px 2px rgba(18,48,46,.04), 0 10px 24px -14px rgba(18,48,46,.18);
  font-family:'Source Serif 4',serif;color:var(--ink);
}
.letter-head{display:flex;align-items:center;gap:14px;border-bottom:2.5px solid var(--teal-deep);padding-bottom:14px;margin-bottom:18px;}
.letter-head .mark{
  width:44px;height:44px;border-radius:50%;background:var(--teal-pale);color:var(--teal-deep);
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;flex-shrink:0;
}
.letter-head .clinic-name{font-size:17px;font-weight:700;line-height:1.2;}
.letter-head .clinic-meta{font-family:'Public Sans',sans-serif;font-size:11px;color:var(--ink-soft);margin-top:2px;}
.letter-title{text-align:center;margin:4px 0 20px;}
.letter-title .t1{font-size:15.5px;font-weight:700;text-decoration:underline;text-underline-offset:4px;}
.letter-title .t2{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--ink-soft);margin-top:3px;}
.letter-body{font-size:13.5px;line-height:1.75;}
.letter-body .kv{display:grid;grid-template-columns:118px auto;gap:4px 8px;margin:14px 0;font-family:'Public Sans',sans-serif;font-size:13px;}
.letter-body .kv div:nth-child(odd){color:var(--ink-soft);}
.letter-body .highlight{
  background:var(--amber-pale);border:1px dashed var(--amber);border-radius:8px;padding:10px 13px;margin:14px 0;
  font-family:'Public Sans',sans-serif;font-size:13px;
}
.letter-body .highlight b{color:#8a4c1c;}

.sign-area{display:flex;justify-content:flex-end;margin-top:26px;}
.sign-block{text-align:center;font-family:'Public Sans',sans-serif;width:190px;}
.sign-block .place-date{font-size:12px;color:var(--ink-soft);margin-bottom:6px;}

.stamp{position:relative;width:118px;height:118px;margin:6px auto 8px;}
.stamp svg.ring{position:absolute;inset:0;width:118px;height:118px;}
.stamp-qr{
  position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:52px;height:52px;background:#fff;display:flex;align-items:center;justify-content:center;
  border-radius:4px;
}
.stamp-qr img, .stamp-qr canvas{width:100% !important;height:100% !important;}

.sign-name{font-family:'Dancing Script',cursive;font-size:23px;color:var(--teal-deep);font-weight:700;margin-top:2px;line-height:1;}
.sign-doctor{font-size:12.5px;font-weight:700;margin-top:5px;border-top:1px solid var(--ink);display:inline-block;padding-top:3px;}
.sign-sip{font-size:10.5px;color:var(--ink-soft);}

.letter-note{
  margin-top:20px;padding-top:12px;border-top:1px dashed var(--line);font-family:'Public Sans',sans-serif;
  font-size:10.5px;color:var(--ink-soft);text-align:center;
}
.letter-actions{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap;}
.empty-hint{color:var(--ink-soft);font-size:13px;text-align:center;padding:60px 20px;}

/* ================= CALENDAR ================= */
.cal-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;}
.cal-toolbar .month-label{font-family:'Source Serif 4',serif;font-size:18px;font-weight:600;}
.cal-nav{display:flex;gap:6px;}
.cal-nav button{width:30px;height:30px;border-radius:8px;border:1px solid var(--line);background:#fff;color:var(--ink);}
.cal-nav button:hover{background:var(--teal-pale);}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;}
.cal-dow{text-align:center;font-size:11px;font-weight:700;color:var(--ink-soft);padding:4px 0 8px;}
.cal-cell{
  min-height:74px;border:1px solid var(--line);border-radius:9px;padding:6px 7px;background:#fff;
  display:flex;flex-direction:column;gap:4px;
}
.cal-cell.pad{background:transparent;border-color:transparent;}
.cal-cell.today{border-color:var(--teal);box-shadow:0 0 0 1px var(--teal);}
.cal-cell .d-num{font-size:12px;font-weight:600;color:var(--ink-soft);}
.cal-cell.today .d-num{color:var(--teal);}
.cal-dot-row{display:flex;flex-wrap:wrap;gap:3px;}
.cal-pill{
  font-size:9.5px;background:var(--teal-pale);color:var(--teal-deep);border-radius:5px;padding:1px 5px;
  max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;font-weight:600;
}
.cal-pill:hover{background:var(--teal);color:#fff;}
.cal-pill.overdue{background:var(--danger-pale);color:var(--danger);}
.cal-more{font-size:9.5px;color:var(--ink-soft);}

.list-table{width:100%;border-collapse:collapse;margin-top:22px;}
.list-table th{
  text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft);
  padding:8px 10px;border-bottom:1.5px solid var(--line);font-weight:700;
}
.list-table td{padding:11px 10px;border-bottom:1px solid var(--line);font-size:13px;vertical-align:middle;}
.list-table tr:hover td{background:var(--paper);}
.pill-status{border-radius:20px;padding:2px 10px;font-size:11px;font-weight:700;display:inline-block;}
.pill-status.upcoming{background:var(--teal-pale);color:var(--teal-deep);}
.pill-status.today{background:var(--amber-pale);color:#8a4c1c;}
.pill-status.overdue{background:var(--danger-pale);color:var(--danger);}
.pill-status.done{background:#EBEDEC;color:var(--ink-soft);}
.row-actions{display:flex;gap:6px;}
.icon-btn{
  width:29px;height:29px;border-radius:7px;border:1px solid var(--line);background:#fff;
  display:flex;align-items:center;justify-content:center;color:var(--ink-soft);
}
.icon-btn:hover{background:var(--teal-pale);color:var(--teal-deep);}

/* ================= REMINDERS ================= */
.reminder-card{
  display:flex;align-items:center;gap:14px;background:#fff;border:1px solid var(--line);
  border-radius:12px;padding:14px 16px;margin-bottom:10px;
}
.reminder-card .r-date{
  width:52px;height:52px;border-radius:10px;background:var(--teal-pale);color:var(--teal-deep);
  display:flex;flex-direction:column;align-items:center;justify-content:center;flex-shrink:0;
}
.reminder-card.overdue .r-date{background:var(--danger-pale);color:var(--danger);}
.reminder-card.today .r-date{background:var(--amber-pale);color:#8a4c1c;}
.r-date .dd{font-size:16px;font-weight:700;line-height:1;}
.r-date .mm{font-size:9.5px;text-transform:uppercase;font-weight:700;}
.reminder-info{flex:1;min-width:0;}
.reminder-info .r-name{font-weight:700;font-size:13.5px;}
.reminder-info .r-meta{font-size:12px;color:var(--ink-soft);margin-top:1px;}
.r-status-tag{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:20px;margin-left:6px;}
.r-status-tag.overdue{background:var(--danger-pale);color:var(--danger);}
.r-status-tag.today{background:var(--amber-pale);color:#8a4c1c;}
.r-status-tag.soon{background:var(--teal-pale);color:var(--teal-deep);}

/* ================= MODAL ================= */
.modal-overlay{
  position:fixed;inset:0;background:rgba(18,48,46,.45);display:flex;align-items:center;justify-content:center;
  z-index:50;padding:24px;
}
.modal{background:#fff;border-radius:16px;max-width:600px;width:100%;max-height:88vh;overflow:auto;padding:26px;}
.modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;}
.modal-head h3{margin:0;font-family:'Source Serif 4',serif;font-size:18px;}
.modal-close{background:transparent;border:none;color:var(--ink-soft);font-size:20px;line-height:1;padding:2px 6px;}
.modal-close:hover{color:var(--ink);}
.doctor-row{display:flex;align-items:center;gap:10px;padding:10px;border:1px solid var(--line);border-radius:10px;margin-bottom:8px;}
.doctor-row .di{flex:1;}
.doctor-row .di b{font-size:13px;}
.doctor-row .di div{font-size:11.5px;color:var(--ink-soft);}
.section-divider{border-top:1px solid var(--line);padding-top:16px;margin-top:16px;}

.toast{
  position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:var(--teal-deep);color:#fff;
  padding:11px 20px;border-radius:30px;font-size:13px;font-weight:600;box-shadow:0 8px 20px rgba(0,0,0,.18);
  z-index:100;opacity:0;transition:opacity .25s ease;pointer-events:none;
}
.toast.show{opacity:1;}
.disclaimer{
  font-size:11.5px;color:var(--ink-soft);background:var(--teal-pale);border-radius:10px;padding:10px 14px;
  margin-bottom:20px;line-height:1.5;
}

/* #print-root is a direct child of <body>, kept empty & hidden on screen.
   Right before printing, JS fills it with a clean copy of the letter and
   calls window.print() - this keeps the printed page fully isolated from
   the app's sidebar/two-column layout, which previously caused the letter
   to render too narrow (and therefore too tall) and split across 2 pages. */
#print-root{display:none;}

@media print{
  @page{ size:A4; margin:12mm; }
  body > *:not(#print-root){display:none !important;}
  #print-root{
    display:block !important;
    width:100%;
  }
  #print-root .letter{
    box-shadow:none;border:none;padding:0;
    width:100%;max-width:186mm;margin:0 auto;
    page-break-inside:avoid;
  }
  #print-root .sign-area{page-break-inside:avoid;}
  #print-root .letter-head{page-break-after:avoid;}
}
