@font-face{font-family:Noto Sans Thai;src:url(/NotoSansThai.ttf) format("truetype");font-weight:100 900;font-display:swap}:root{font-family:Noto Sans Thai,system-ui,sans-serif;color:#18333a;background:#f3f7f7;font-synthesis:none;--teal:#087781;--teal-dark:#07515a;--teal-pale:#e7f5f4;--navy:#14364a;--line:#dce8e8;--muted:#688087;--shadow:0 12px 32px rgba(25,66,73,.08)}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}button,input,select,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a{color:var(--teal);text-decoration:none}h1,h2,h3,p{margin-top:0}button{cursor:pointer}.loading-screen{min-height:100vh;display:grid;place-content:center;justify-items:center;gap:14px;color:var(--muted)}.healthplus-logo{display:inline-flex;align-items:center;gap:9px;color:#18333a;line-height:1}.healthplus-logo-mark{width:42px;height:42px;flex:none;display:inline-block;background-image:url(/logo.png);background-size:200%;background-position:center;background-repeat:no-repeat}.healthplus-logo-copy{display:flex;flex-direction:column;align-items:flex-start;white-space:nowrap}.healthplus-logo-copy>span{font-size:18px;font-weight:700;letter-spacing:-.025em}.healthplus-logo-copy b{color:#1aa3c8;font-style:normal}.healthplus-logo-copy em{color:#ed1570;font-style:normal}.healthplus-logo-copy small{margin-top:4px;color:#2994ba;font-size:8.5px;font-weight:700;letter-spacing:.21em}.healthplus-logo-copy i{margin-top:7px;color:#9fc9d1;font-size:11px;font-style:normal;font-weight:500;letter-spacing:.02em}.healthplus-logo.inverse .healthplus-logo-copy small{color:#8fd2e4}.healthplus-logo.compact{gap:7px}.healthplus-logo.compact .healthplus-logo-mark{width:34px;height:34px}.healthplus-logo.compact .healthplus-logo-copy>span{font-size:14px}.healthplus-logo.compact .healthplus-logo-copy small{font-size:6.5px}.sidebar-brand .healthplus-logo-copy{display:flex;color:inherit;font-size:inherit}.eyebrow{display:block;font-size:11px;font-weight:700;letter-spacing:.16em;color:#9fdadc;margin-bottom:12px}.eyebrow.teal{color:var(--teal)}.public-layout{min-height:100vh;display:grid;grid-template-columns:minmax(410px,1.05fr) minmax(430px,.95fr);background:#f7fbfb}.public-brand{position:relative;overflow:hidden;display:flex;flex-direction:column;min-height:100vh;padding:46px clamp(42px,6vw,96px);color:#fff;background:linear-gradient(145deg,#053645fa,#06767ff0),radial-gradient(circle at 70% 30%,#1fb3a1,#0a3c50)}.public-brand:before,.public-brand:after{content:"";position:absolute;border:1px solid rgba(255,255,255,.13);border-radius:50%;width:500px;height:500px;right:-210px;top:90px}.public-brand:after{width:350px;height:350px;right:-135px;top:165px;background:#ffffff09}.brand-lockup{position:relative;z-index:1;display:flex;align-items:center;width:max-content;padding:10px 14px;border-radius:14px;background:#fffffff5;box-shadow:0 10px 28px #00233029}.brand-lockup strong{display:block;font-size:18px}.brand-lockup span{display:block;opacity:.65;font-size:12px}.brand-lockup .healthplus-logo{display:inline-flex;opacity:1;font-size:inherit}.brand-lockup .healthplus-logo-mark{display:inline-block;opacity:1;font-size:inherit}.brand-lockup .healthplus-logo-copy{display:flex;opacity:1;font-size:inherit}.brand-lockup .healthplus-logo-copy>span{display:block;opacity:1;font-size:18px}.brand-lockup .healthplus-logo-copy small{display:block;opacity:1;font-size:8.5px}.brand-lockup .healthplus-logo-copy i{display:block;opacity:1;color:#5f7d85}.brand-copy{position:relative;z-index:1;margin:auto 0;max-width:640px}.brand-copy h1{font-size:clamp(38px,4.4vw,64px);line-height:1.18;letter-spacing:-.04em;margin-bottom:25px}.brand-copy p{max-width:580px;line-height:1.85;font-size:17px;color:#c9e5e5}.trust-row{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:23px;font-size:12px;color:#cae5e7}.trust-row span{display:flex;align-items:center;gap:7px}.trust-row svg{width:17px}.auth-panel{display:flex;justify-content:center;align-items:center;padding:45px;overflow:auto}.auth-card{width:min(100%,470px)}.auth-card h2{font-size:34px;margin-bottom:8px;color:var(--navy)}.auth-card>p,.card-head p,.page-header p{color:var(--muted)}.auth-card>p{margin-bottom:30px}.auth-footer{text-align:center;margin-top:22px;font-size:14px;color:var(--muted)}.register-card{width:min(100%,720px)}.public-layout.register{grid-template-columns:minmax(340px,.8fr) minmax(600px,1.2fr)}.success-state{text-align:center;padding:30px 0}.success-state>svg{width:64px;height:64px;color:#23936b}.success-state p{color:var(--muted);max-width:500px;margin:0 auto 25px;line-height:1.7}.field{display:flex;flex-direction:column;gap:7px;min-width:0}.field>span{font-size:12px;font-weight:600;color:#587078}.field input,.field select,.field textarea,.input-icon{width:100%;border:1px solid #cfdddd;border-radius:10px;background:#fff;color:#17343b;padding:11px 12px;outline:none;transition:.18s ease}.field textarea{min-height:78px;resize:vertical}.field input:focus,.field select:focus,.field textarea:focus,.input-icon:focus-within{border-color:#47a8ab;box-shadow:0 0 0 3px #1b8e951a}.auth-card>.field{margin-bottom:18px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:17px}.form-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.input-icon{display:flex;align-items:center;padding:0 11px}.input-icon svg{width:17px;color:#81979b}.input-icon input{border:0;box-shadow:none!important;padding:10px 8px}.field>.password-input{position:relative;display:block;width:100%;font-size:inherit;font-weight:inherit;color:inherit}.password-input input{padding-right:46px}.password-input button{position:absolute;right:5px;top:50%;transform:translateY(-50%);width:36px;height:36px;border:0;border-radius:8px;display:grid;place-items:center;background:transparent;color:#607c82;cursor:pointer}.password-input button:hover,.password-input button:focus-visible{background:#e8f5f5;color:#087b84;outline:none}.password-input svg{width:18px;height:18px}.button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:8px 16px;border-radius:10px;border:1px solid transparent;font-weight:600;font-size:13px;transition:.18s ease}.button svg{width:17px;height:17px}.button:hover{transform:translateY(-1px)}.button:disabled{opacity:.45;cursor:not-allowed;transform:none}.button.primary{color:#fff;background:linear-gradient(135deg,#09828b,#076a77);box-shadow:0 6px 15px #076f7829}.button.secondary{background:#fff;color:#22545d;border-color:#d1e1e1}.button.ghost{background:transparent;color:#567078}.button.danger{background:#fff0f0;color:#a13b3b;border-color:#f3cccc}.button.full{width:100%;margin-top:24px}.button.small{min-height:34px;padding:5px 11px;font-size:12px}.form-error{background:#fff0f0;color:#a33737;border:1px solid #f4d0d0;border-radius:10px;padding:10px 13px;font-size:13px;margin-bottom:15px}.app-shell{min-height:100vh;display:flex}.sidebar{width:245px;position:fixed;inset:0 auto 0 0;display:flex;flex-direction:column;color:#d9eaeb;background:linear-gradient(180deg,#113e4a,#0b2935);z-index:30}.sidebar-brand{height:82px;display:flex;align-items:center;gap:11px;padding:0 22px;border-bottom:1px solid rgba(255,255,255,.08)}.sidebar-brand strong,.sidebar-brand span{display:block}.sidebar-brand strong{color:#fff;font-size:15px}.sidebar-brand span{color:#81a7ab;font-size:11px}.sidebar-brand .logo-mark{width:39px;height:39px;font-size:13px}.sidebar nav{display:flex;flex-direction:column;gap:5px;padding:21px 13px}.sidebar nav a{display:flex;gap:12px;align-items:center;height:44px;padding:0 13px;border-radius:9px;color:#aac4c7;font-size:13px;font-weight:500}.sidebar nav a:hover{color:#fff;background:#ffffff0f}.sidebar nav a.active{color:#fff;background:linear-gradient(90deg,#19aeae40,#19aeae17);box-shadow:inset 3px 0 #32c2b6}.sidebar-note{margin:auto 14px 18px;padding:14px;border-radius:11px;display:flex;gap:10px;align-items:flex-start;color:#9dc6c8;background:#ffffff0d;font-size:11px}.sidebar-note svg{width:18px;flex:none}.sidebar-note small{opacity:.6}.sidebar-close{display:none;margin-left:auto;border:0;color:#fff;background:transparent}.app-main{width:calc(100% - 245px);margin-left:245px}.topbar{height:82px;position:sticky;top:0;z-index:20;display:flex;align-items:center;padding:0 clamp(20px,3.2vw,48px);background:#ffffffed;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid #e1ebeb}.topbar-title strong,.topbar-title span,.user-menu strong,.user-menu span{display:block}.topbar-title strong{font-size:14px}.topbar-title span{color:#8aa0a4;font-size:10px}.user-menu{margin-left:auto;display:flex;gap:10px;align-items:center}.user-menu strong{font-size:12px}.user-menu span{font-size:10px;color:#819599}.avatar{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;background:var(--teal-pale);color:var(--teal);font-weight:700}.icon-button,.menu-button{width:38px;height:38px;display:grid;place-items:center;border:0;border-radius:9px;color:#627b80;background:transparent}.icon-button:hover,.menu-button:hover{background:#eef5f5}.menu-button{display:none;margin-right:8px}.content{padding:35px clamp(20px,3.2vw,48px) 55px;max-width:1700px;margin:auto}.page-header{display:flex;justify-content:space-between;gap:25px;align-items:flex-end;margin-bottom:25px}.page-header h1{margin:0 0 7px;color:var(--navy);font-size:29px;letter-spacing:-.025em}.page-header p{margin:0;font-size:13px}.page-actions{display:flex;gap:8px;flex-wrap:wrap}.notice{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:17px;padding:11px 14px;border:1px solid #bee6d7;background:#eaf8f1;color:#247354;border-radius:10px;font-size:13px}.notice.error{border-color:#f1cbcb;background:#fff0f0;color:#9b3636}.notice.warning{border-color:#efdba8;background:#fff9e8;color:#896615}.notice button{border:0;background:transparent;color:inherit}.filter-bar{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;background:#fff;border:1px solid var(--line);border-radius:13px;padding:14px;margin-bottom:17px;box-shadow:0 5px 20px #20515709}.filter-bar .field{flex:1 1 135px}.filter-bar .field:first-child{flex-grow:1.5}.filter-bar .button{margin-bottom:0}.stat-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:13px;margin-bottom:17px}.stat{display:flex;gap:13px;align-items:center;padding:18px;min-height:100px;border-radius:14px;background:#fff;border:1px solid var(--line);box-shadow:0 8px 22px #2051570b}.stat>span{width:42px;height:42px;flex:none;display:grid;place-items:center;border-radius:11px}.stat>span svg{width:21px}.stat small,.stat strong{display:block}.stat small{color:var(--muted);font-size:11px}.stat strong{font-size:26px;color:var(--navy);margin-top:2px}.stat.blue>span{background:#e7f1fb;color:#387cb2}.stat.green>span{background:#e7f7ef;color:#24865d}.stat.orange>span{background:#fff0e7;color:#d77234}.stat.purple>span{background:#f0eafa;color:#8053ad}.stat.teal>span{background:#e3f5f4;color:#087b80}.card{background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow)}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(320px,.8fr);gap:17px}.card-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;padding-bottom:17px}.card-head.pad{padding:20px}.card-head h3{margin:0 0 4px;font-size:15px}.card-head p{margin:0;font-size:11px}.card-head>svg{color:#7ca0a4;width:20px}.chart-card{padding:21px}.chart{height:320px;font-size:11px}.customer-summary{padding:0 20px 12px}.customer-summary>div{display:flex;align-items:center;gap:10px;padding:13px 0;border-bottom:1px solid #edf2f2}.customer-summary>div:last-child{border-bottom:0}.customer-summary>div>div{flex:1;min-width:0}.customer-summary strong,.customer-summary small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.customer-summary strong{font-size:12px}.customer-summary small{color:var(--muted);font-size:10px}.customer-summary b{font-size:12px}.customer-code{display:inline-grid;place-items:center;width:max-content;min-width:45px;padding:4px 8px;border-radius:7px;background:var(--teal-pale);color:var(--teal);font-size:11px;font-weight:700}.selection-bar{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin:8px 0 12px;font-size:12px;color:var(--muted)}.selection-bar span{margin-right:auto}.table-card{overflow:hidden}.table-scroll{width:100%;overflow:auto}table{width:100%;border-collapse:collapse;font-size:12px}th{position:sticky;top:0;text-align:left;padding:12px 13px;background:#f3f8f8;color:#587279;font-size:10px;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}td{padding:13px;border-top:1px solid #e8efef;vertical-align:middle;min-width:95px}td strong,td small{display:block}td small{margin-top:4px;color:#7d9296;font-size:10px;max-width:260px}.lab-no{color:#0a7580;letter-spacing:.02em}.row-actions{display:flex;gap:3px}.row-actions button{width:31px;height:31px;border:1px solid #dbe7e7;border-radius:8px;display:grid;place-items:center;color:#35666d;background:#fff}.row-actions button:hover{color:#fff;border-color:var(--teal);background:var(--teal)}.row-actions button:disabled{opacity:.38;cursor:not-allowed}.row-actions button:disabled:hover{color:#35666d;border-color:#dbe7e7;background:#fff}.row-actions svg{width:15px}.badge{display:inline-flex;padding:4px 8px;border-radius:99px;background:#eef3f3;color:#60767a;font-size:10px;font-weight:600;white-space:nowrap}.badge.not_detected,.badge.released,.badge.approved,.badge.sent,.badge.active{background:#e5f6ed;color:#247553}.badge.detected,.badge.awaiting_approval,.badge.pending,.badge.queued,.badge.completed_with_errors{background:#fff0e3;color:#a65d28}.badge.invalid,.badge.inactive,.badge.no_call,.badge.qc_failed,.badge.rejected,.badge.failed{background:#ffebeb;color:#9d3b3b}.badge.reporter{background:#e8f3ff;color:#3873a6}.badge.approver{background:#f0eafb;color:#7750a0}.badge.completed,.badge.created,.badge.matched{background:#e5f6ed;color:#247553}.empty{display:grid;justify-items:center;gap:5px;padding:42px 20px;color:#91a4a7}.empty p{margin:0;font-size:12px}.modal-backdrop{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:20px;background:#071d258c;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.modal{width:min(100%,560px);max-height:92vh;overflow:auto;padding:22px;background:#fff;border-radius:16px;box-shadow:0 30px 80px #03191f4d}.modal.wide{width:min(100%,880px)}.modal>header{display:flex;justify-content:space-between;align-items:center;padding-bottom:20px}.modal>header h2{margin:0;font-size:19px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;padding-top:23px;margin-top:20px;border-top:1px solid #e8eeee}.genotype-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:15px}.genotype-grid label{display:flex;gap:6px;padding:8px;border:1px solid #dce7e7;border-radius:8px;font-size:12px}.genotype-grid.with-ct{grid-template-columns:repeat(2,minmax(0,1fr))}.genotype-grid.with-ct label{align-items:center;justify-content:space-between}.genotype-grid.with-ct label span{display:flex;align-items:center;gap:5px;white-space:nowrap}.genotype-grid.with-ct input[type=number]{width:76px;padding:6px 7px;border:1px solid #cfdddd;border-radius:7px}.genotype-grid.with-ct input[type=number]:disabled{background:#f1f5f5;opacity:.55}.genotype-card{margin-top:17px}.chart.compact{height:250px}.modal-help{color:var(--muted);font-size:13px;line-height:1.65}.modal form>.field{margin-bottom:14px}.password-rule{display:block;color:#71878c;line-height:1.5}.application-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.application{padding:20px}.application-head{display:flex;justify-content:space-between}.application h3{margin:14px 0;font-size:16px}.application dl{margin:0}.application dl>div{padding:9px 0;border-top:1px solid #edf2f2}.application dt{font-size:10px;color:#82969a}.application dd{margin:3px 0 0;font-size:12px;line-height:1.5}.application-actions{display:flex;justify-content:flex-end;gap:7px;padding-top:17px}.signatory-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.signatory{display:grid;grid-template-columns:auto 1fr auto;gap:15px;align-items:center;padding:20px}.signatory h3{margin:8px 0 2px;font-size:15px}.signatory p{margin:0;font-size:12px;color:#547279}.signatory small{color:#819599;font-size:10px}.sign-icon{width:45px;height:45px;display:grid;place-items:center;border-radius:12px;background:#e8f3ff;color:#3f7dab}.sign-icon.approver{background:#f0eafb;color:#7854a0}.signature-state{display:flex;flex-direction:column;align-items:flex-end;gap:9px;font-size:10px;color:#9a5656}.signature-state span{display:flex;align-items:center;gap:4px}.signature-state svg{width:15px}.signature-state .ready{color:#287655}.lab-prep-note{display:flex;align-items:flex-start;gap:12px;margin-bottom:17px;padding:14px 16px;border:1px solid #b9e4df;border-radius:13px;background:#ecfbf8;color:#0a6870}.lab-prep-note svg{flex:0 0 auto;margin-top:2px}.lab-prep-note div{display:flex;flex-direction:column;gap:3px}.lab-prep-note strong{font-size:14px}.lab-prep-note span{color:#52777b;font-size:12px;line-height:1.5}.import-panel{padding:20px;margin-bottom:17px}.import-panel form{display:grid;grid-template-columns:1fr 1fr;gap:20px}.upload-zone{position:relative;min-height:180px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:5px;border:1.5px dashed #a9caca;border-radius:13px;color:#5f8589;background:#f4fbfa}.upload-zone input{position:absolute;inset:0;opacity:0;cursor:pointer}.upload-zone strong{font-size:14px}.upload-zone span{font-size:10px}.upload-zone b{max-width:80%;margin-top:8px;font-size:11px;color:#08737b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.import-settings{display:flex;flex-direction:column;gap:13px;justify-content:center}.audit-action{font-family:ui-monospace,monospace;font-size:10px;color:#356a73}@media(max-width:1180px){.stat-grid{grid-template-columns:repeat(3,1fr)}.application-grid,.form-grid.three{grid-template-columns:repeat(2,1fr)}}@media(max-width:900px){.public-layout,.public-layout.register{grid-template-columns:1fr}.public-brand{min-height:330px;padding:32px}.brand-copy{margin:55px 0 35px}.brand-copy h1{font-size:38px}.trust-row{display:none}.auth-panel{padding:38px 22px}.sidebar{transform:translate(-100%);transition:.25s ease;box-shadow:15px 0 35px #00000026}.sidebar.open{transform:none}.sidebar-close,.menu-button{display:grid}.app-main{width:100%;margin:0}.dashboard-grid,.signatory-grid{grid-template-columns:1fr}}@media(max-width:650px){.content{padding:25px 14px 40px}.topbar{padding:0 13px}.topbar-title{display:none}.user-menu strong{max-width:110px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.page-header{align-items:flex-start;flex-direction:column}.page-header h1{font-size:24px}.page-actions,.page-actions .button{width:100%}.stat-grid{grid-template-columns:repeat(2,1fr)}.stat{padding:13px;min-height:88px}.stat:last-child{grid-column:1/-1}.form-grid,.form-grid.three,.application-grid{grid-template-columns:1fr}.signatory{grid-template-columns:auto 1fr}.signature-state{grid-column:1/-1;flex-direction:row;align-items:center;justify-content:space-between}.import-panel form{grid-template-columns:1fr}.filter-bar .field{flex-basis:100%}.filter-bar .button{width:100%}.genotype-grid{grid-template-columns:repeat(2,1fr)}}@media print{.sidebar,.topbar,.no-print,.page-actions,.filter-bar,.selection-bar{display:none!important}.app-main{width:100%;margin:0}.content{padding:10px}.card,.stat{box-shadow:none;break-inside:avoid}.page-header{margin-bottom:15px}}
