:root{--ink:#183c35;--sub:#687d76;--green:#08745c;--mint:#e7f4ed;--paper:#f4f7f3;--line:#dbe5df;--amber:#ac623d}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:15px/1.7 system-ui,-apple-system,"Microsoft YaHei","Noto Sans Thai",sans-serif}header{background:white;border-bottom:1px solid var(--line);padding:18px 5vw;display:flex;align-items:center;justify-content:space-between;gap:20px}.brand{font-size:20px;font-weight:800;text-decoration:none;color:var(--ink)}.brand b{color:var(--green);margin-right:10px}.tools,.actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.actions{margin:18px 0}.language{display:flex;gap:8px;align-items:center;font-size:13px}h1{font-size:clamp(27px,4vw,43px);line-height:1.3;margin:0 0 16px}h2{font-size:22px;line-height:1.4;margin:0 0 18px}h3{font-size:17px}.hero{padding:50px 6vw;background:linear-gradient(115deg,#123e35,#08745c);color:white}.hero>div{max-width:1100px;margin:auto}.hero p{max-width:760px;opacity:.9}.eyebrow{letter-spacing:.15em;font-size:12px;font-weight:700}.steps{display:flex;gap:25px;flex-wrap:wrap;margin-top:26px;font-size:14px}main{max-width:1180px;margin:30px auto 70px;padding:0 24px}.card{background:white;border:1px solid var(--line);border-radius:15px;padding:26px;margin:20px 0;box-shadow:0 4px 16px #183c3505}.card-title{display:flex;gap:14px;align-items:center}.section-no{font-size:12px;background:var(--mint);color:var(--green);padding:4px 10px;border-radius:6px}.grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:17px}.wide{grid-column:1/-1}label{display:grid;gap:6px;font-size:13px;font-weight:650}input,select,textarea{font:inherit;color:var(--ink);background:white;border:1px solid #b9cec3;border-radius:7px;padding:10px 12px;min-width:0;width:100%}input:focus,select:focus,textarea:focus{outline:2px solid #81c6ac;outline-offset:2px}textarea{min-height:85px;resize:vertical}select{cursor:pointer}.language select{width:auto;padding:6px 10px}button,.button{font:inherit;cursor:pointer;border:1px solid var(--green);border-radius:8px;padding:9px 16px;background:var(--green);color:white;display:inline-block;text-decoration:none;font-weight:650}button:hover,.button:hover{filter:brightness(.94)}button:disabled{opacity:.5;cursor:wait}.secondary{background:white;color:var(--green)}.danger{background:#fff5f4;color:#a43e32;border-color:#e3beb9}.small{font-size:12px;padding:5px 10px}.row{border:1px solid var(--line);background:#fafcf9;border-radius:10px;padding:18px;margin-bottom:12px}.row-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px;color:var(--sub)}.muted{color:var(--sub);font-size:13px}.notice{padding:14px 18px;background:var(--mint);border-left:3px solid var(--green);border-radius:6px}.warning{background:#fff5df;border-color:#dca943;color:#765120}.error{background:#fff0ef;color:#a33128;border:1px solid #e4b5ad;padding:12px 16px;border-radius:8px}.feedback:empty{display:none}.feedback{position:sticky;top:8px;z-index:5;box-shadow:0 4px 15px #0001}.sticky-actions{position:sticky;bottom:0;background:#ffffffef;border:1px solid var(--line);border-radius:12px;padding:16px;backdrop-filter:blur(10px)}.check{display:flex;align-items:flex-start;gap:10px;font-size:14px}.check input{width:20px;height:20px;flex-shrink:0;margin:3px 0}.tag{display:inline-block;background:var(--mint);color:var(--green);padding:3px 10px;border-radius:18px;font-size:12px}.review-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 25px}.review-item{padding:9px 0;border-bottom:1px solid #e9eee9;display:grid;grid-template-columns:minmax(100px,45%) 1fr;gap:12px;overflow-wrap:anywhere}.review-item dt{color:var(--sub);font-size:13px}.review-item dd{margin:0;white-space:pre-wrap}.missing{color:#a08c64}.file-list{padding:0;list-style:none}.file-list li{display:flex;justify-content:space-between;align-items:center;gap:12px;border-bottom:1px solid var(--line);padding:10px 0;overflow-wrap:anywhere}.hidden-file{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.project-link{font-size:12px}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:22px 0}.metric{padding:18px;border:1px solid var(--line);border-radius:10px;background:white}.metric strong{display:block;font-size:25px;line-height:1.5}.metric span{font-size:12px;color:var(--sub)}.report{background:white;padding:40px;border:1px solid var(--line);border-radius:12px}.report h1{font-size:29px}.report h2{margin:32px 0 14px;border-bottom:2px solid #eaded4;padding-bottom:8px;color:var(--amber);font-size:21px}.report .notice{font-size:13px}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;vertical-align:top;padding:10px;border:1px solid var(--line);overflow-wrap:anywhere;white-space:pre-wrap}th{background:#f4f6f1;font-weight:650}.chart{background:#0c2025;border-radius:14px;padding:20px;color:#d7e9e5;margin-top:24px}.chart svg{display:block;width:100%;height:auto;min-height:180px}.legend{display:flex;flex-wrap:wrap;gap:18px;font-size:12px}.legend i{display:inline-block;width:20px;height:3px;margin:0 6px 3px 0}.chart .muted{color:#bed2cb}.chart .actions button{border-color:#547a71}.chart-status{font-size:13px}.chart text{font:12px system-ui,"Noto Sans Thai",sans-serif}.report-head{border-bottom:1px solid var(--line);padding-bottom:20px}.report-foot{font-size:12px;color:var(--sub);margin-top:30px}footer{text-align:center;background:#133b32;color:#d5e8de;padding:25px;font-size:13px}.login-shell{max-width:480px;margin:60px auto}.login-shell label{margin:16px 0}.project-card h2{margin:0}.project-card .top{display:flex;justify-content:space-between;gap:20px}details summary{cursor:pointer;color:var(--green);padding:10px 0}@media(max-width:780px){.grid,.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.review-grid{grid-template-columns:1fr}header{padding:14px 18px;align-items:flex-start}.brand{font-size:17px}.language{display:grid;gap:2px}.hero{padding:32px 24px}main{padding:0 14px}.card{padding:20px}.report{padding:20px}.steps{gap:15px}}@media(max-width:480px){.grid{grid-template-columns:1fr}.metrics{grid-template-columns:1fr 1fr}.metric{padding:12px}.metric strong{font-size:20px}.review-item{grid-template-columns:1fr;gap:2px}.steps{font-size:12px}.brand b{display:block}.sticky-actions{position:static}.report{padding:15px}}
@media print{body{background:white;color:#222;font-size:11px}header,.hero,footer,.no-print,.feedback,.project-overview,#editor,#engineer-panel,#history-panel{display:none!important}main{max-width:none;margin:0;padding:0}.report{border:0;padding:0;border-radius:0}.report h2{break-after:avoid}.metric,table tr,.notice{break-inside:avoid}.metrics{grid-template-columns:repeat(4,1fr)}.chart{break-inside:avoid;print-color-adjust:exact;-webkit-print-color-adjust:exact}.table-wrap{overflow:visible}th{background:#eee;print-color-adjust:exact}a{color:inherit}}@page{size:A4;margin:15mm}

.password-card{border-left:4px solid var(--green);scroll-margin-top:20px}.password-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.password-card h2{margin-bottom:4px}@media(max-width:780px){.password-grid{grid-template-columns:1fr}}
.password-input{position:relative;display:block}.password-input input{padding-right:48px}.password-toggle{position:absolute;right:5px;top:50%;transform:translateY(-50%);width:38px;height:38px;padding:0;border:0;background:transparent;color:var(--green);font-size:22px}.password-toggle:hover{background:var(--mint)}.remember-option{display:flex!important;grid-template-columns:20px 1fr;align-items:center;gap:9px!important;margin:12px 0!important;font-weight:500}.remember-option input{width:18px;height:18px;margin:0}

/* Clear module entry points on the administrator landing page. */
.admin-tools{margin:24px 0 38px;padding:24px;background:#edf4ef;border:1px solid var(--line);border-radius:16px}.admin-tools-heading h2,.dashboard-section-heading h2{margin:0}.admin-tools-heading p{margin:4px 0 18px}.admin-tool-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.admin-tool{position:relative;display:flex;min-height:128px;flex-direction:column;justify-content:flex-end;padding:22px 54px 20px 20px;background:#fff;border:1px solid #cfddd5;border-radius:12px;color:var(--ink);text-decoration:none;transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease}.admin-tool:hover{transform:translateY(-2px);border-color:#8ab7a7;box-shadow:0 8px 24px #183c3512}.admin-tool:focus-visible{outline:3px solid #81c6ac;outline-offset:2px}.admin-tool strong{font-size:18px}.admin-tool small{display:block;margin-top:5px;color:var(--sub);line-height:1.5}.admin-tool-arrow{position:absolute;right:20px;top:20px;color:var(--green);font-size:24px}.admin-tool.primary{background:linear-gradient(135deg,#0a755e,#125646);border-color:#0a755e;color:#fff}.admin-tool.primary small,.admin-tool.primary .admin-tool-arrow{color:#d9f1e7}.dashboard-section-heading{display:flex;align-items:center;justify-content:space-between;margin:0 0 12px;padding-bottom:12px;border-bottom:1px solid var(--line)}
@media(max-width:680px){.admin-tool-grid{grid-template-columns:1fr}.admin-tools{padding:18px}.admin-tool{min-height:110px}}

/* Customer report presentation, based on the supplied EK-AI four-curve reference. */
.report.report-dashboard { --report-blue:#38bdf8; --report-green:#4ade80; background:radial-gradient(ellipse at 15% 0%,#102237 0,transparent 38%),#05080f; color:#dce6f5; border:1px solid #23334a; border-radius:18px; padding:28px; font-size:14px; }
.report-dashboard .report-head { border-bottom:0; padding:0 0 16px; position:relative; }
.report-dashboard .eyebrow { color:#91a8c5; font-size:10px; letter-spacing:2px; }
.report-dashboard h1 { margin:12px 0 6px; font-size:clamp(22px,2.5vw,32px); line-height:1.35; color:#83d9ff; }
.report-dashboard .report-project { color:#a8bed9; margin:4px 0; font-size:14px; }
.report-dashboard .muted,.report-dashboard .report-foot { color:#91a8c5; }
.report-dashboard .tag { color:#052017; background:linear-gradient(100deg,#4ade80,#16c99e); padding:5px 14px; box-shadow:0 0 20px #4ade8022; }
.report-dashboard .notice { background:#102033; border:1px solid #30435b; color:#b4c6db; border-radius:10px; font-size:12px; }
.report-dashboard .metrics { gap:12px; margin:18px 0; }
.report-dashboard .metric { background:#0c1422; border:1px solid #24344c; border-radius:12px; padding:18px; display:flex; flex-direction:column-reverse; justify-content:space-between; gap:10px; position:relative; overflow:hidden; }
.report-dashboard .metric::before { content:''; position:absolute; left:0; top:0; bottom:0; width:3px; background:currentColor; }
.report-dashboard .metric:nth-child(1) { color:#8ea3c8; }.report-dashboard .metric:nth-child(2) { color:#ffa94d; }.report-dashboard .metric:nth-child(3) { color:#38bdf8; }.report-dashboard .metric:nth-child(4) { color:#4ade80; }
.report-dashboard .metric strong { color:inherit; font-family:Bahnschrift,'SF Mono',monospace; font-size:clamp(17px,1.8vw,25px); font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }
.report-dashboard .metric span { color:#a0b4cf; font-size:12px; }
.report-dashboard .report-panel { position:relative; padding:20px; background:#0b1220e8; border:1px solid #263850; border-radius:15px; margin:16px 0; box-shadow:0 12px 35px #0003; }
.report-dashboard .report-panel::before { content:''; position:absolute; width:24px; height:24px; top:-1px; left:-1px; border-top:2px solid #38bdf8a0; border-left:2px solid #38bdf8a0; border-radius:15px 0 0; pointer-events:none; }
.report-dashboard h2,.report-dashboard h3 { color:#dce6f5; border:0; }
.report-dashboard .report-panel h2 { margin:0 0 4px; padding:0; font-size:17px; }
.report-dashboard .report-panel .muted { font-size:12px; margin:0 0 14px; }
.report-dashboard button { background:linear-gradient(110deg,#2fc5ed,#246be8); color:#03182b; border:1px solid #369bc9; border-radius:9px; font-size:12px; font-weight:650; padding:9px 14px; box-shadow:none; }
.report-dashboard button.secondary { background:#172238; color:#d5e3f5; border-color:#2c4262; }
.report-dashboard .report-toolbar { display:flex; flex-wrap:wrap; gap:9px; margin:12px 0; }
.report-dashboard .legend { justify-content:flex-end; gap:8px; margin:14px 0; }
.report-dashboard .legend button { background:#101a2c; border:1px solid #25374f; border-radius:20px; color:#dce6f5; padding:5px 10px; font-size:12px; }
.report-dashboard .legend button[aria-pressed=false] { opacity:.4; text-decoration:line-through; }
.report-dashboard .legend i { display:inline-block; width:8px; height:8px; border-radius:50%; margin-right:7px; box-shadow:0 0 8px currentColor; }
.report-dashboard .chart svg { width:100%; height:auto; min-height:0; overflow:visible; }
.report-dashboard .chart text { fill:#91a8c5; font:11px system-ui,sans-serif; }
.report-dashboard [data-curve] { filter:drop-shadow(0 0 3px currentColor); vector-effect:non-scaling-stroke; }
.report-dashboard [data-hover-month]:focus { outline:none; fill:#38bdf812; }
.report-dashboard .report-readout { display:flex; justify-content:space-between; align-items:center; gap:12px; margin:12px 0 0; }
.report-dashboard .report-readout b { font:700 28px Bahnschrift,monospace; color:#d7e7ff; white-space:nowrap; }
.report-dashboard .report-readout span { font-size:12px; color:#9fb1c9; text-align:right; }
.report-dashboard .report-readout strong { color:#4ade80; }
.report-dashboard .report-track { height:4px; background:#1b2c41; border-radius:4px; overflow:hidden; }
.report-dashboard [data-track] { height:100%; width:100%; background:linear-gradient(90deg,#38bdf8,#4ade80); }
.report-dashboard #chart-status { color:#7895b6; font-size:10px; }
.report-dashboard .report-month-values { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:10px; }
.report-dashboard .report-month-values>div { background:#101b2d; border:1px solid #273b58; padding:12px; border-radius:9px; }
.report-dashboard .report-month-values span { color:#a0b4cf; display:block; font-size:11px; }
.report-dashboard .report-month-values strong { color:var(--value-color); font:600 18px Bahnschrift,monospace; display:block; margin-top:8px; overflow-wrap:anywhere; }
.report-dashboard .report-gaps { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; margin-top:14px; }
.report-dashboard .report-gaps>div { background:#101c2e; padding:16px; border:1px solid #293d58; border-left:3px solid #8ea3c8; border-radius:10px; }
.report-dashboard .report-gaps>div:nth-child(2) { border-left-color:#ffa94d; }.report-dashboard .report-gaps>div:nth-child(3) { border-left-color:#4ade80; }
.report-dashboard .report-gaps h3 { font-size:13px; margin:0 0 9px; }
.report-dashboard .report-gaps strong { font:600 22px Bahnschrift,monospace; }
.report-dashboard .report-gaps p { font-size:12px; color:#adc0d8; margin:12px 0 0; }
.report-dashboard .report-details { background:#0c1422; border:1px solid #263850; border-radius:12px; padding:18px; margin:16px 0; }
.report-dashboard .report-details>summary { color:#72d4ff; font-size:15px; }
.report-dashboard .report-details h2 { border-bottom:1px solid #294059; padding-bottom:9px; color:#7dd7fb; }
.report-dashboard table { color:#c9d7e8; }.report-dashboard th { background:#152238; color:#dce6f5; }.report-dashboard th,.report-dashboard td { border-color:#293e58; }
.report-dashboard .missing { color:#90a6c0; }
.report-dashboard:fullscreen { overflow:auto; padding:30px max(20px,calc((100vw - 1280px)/2)); }
.report-export { background:#05080f; padding:20px; }.report-export main { max-width:1280px; margin:auto; padding:0; }.report-export .report-dashboard { border:0; }
.report-export .no-print { display:none!important; }.report-export .report-toolbar { display:flex!important; }.report-export #chart-status { display:inline!important; }
@media(max-width:780px){.report.report-dashboard{padding:16px}.report-dashboard .report-month-values{grid-template-columns:repeat(2,minmax(0,1fr))}.report-dashboard .report-gaps{grid-template-columns:1fr}.report-dashboard .report-panel{padding:14px}.report-dashboard .legend{justify-content:flex-start}.report-dashboard .report-readout{align-items:flex-start}.report-dashboard .metric{padding:12px}.report-export{padding:0}}
@media print{.report.report-dashboard{print-color-adjust:exact;-webkit-print-color-adjust:exact;background:white;color:#182b3d;border:0;padding:0}.report-dashboard h1,.report-dashboard h2,.report-dashboard h3,.report-dashboard .report-gaps strong{color:#123d56}.report-dashboard .report-head .muted,.report-dashboard .report-project,.report-dashboard .report-foot{color:#456079}.report-dashboard .report-details{background:white;border:0;padding:0}.report-dashboard table{color:#182b3d}.report-dashboard th{background:#e7eef4;color:#182b3d}.report-dashboard .report-panel{break-inside:avoid}.report-dashboard .metrics{grid-template-columns:repeat(4,1fr)}.report-dashboard .report-gaps{grid-template-columns:repeat(3,1fr)}.report-dashboard .report-panel h2,.report-dashboard .report-panel h3,.report-dashboard .report-gaps strong{color:#dce6f5}.report-export .report-toolbar{display:none!important}.report-export{padding:0;background:white}}
