:root{--blue:#0874c9;--navy:#074b83;--bg:#f4f8fb;--line:#d8e3ec;--text:#183247;--muted:#6b7d8c;--danger:#b42318;--ok:#087a44}
*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Tahoma,sans-serif;background:var(--bg);color:var(--text)}a{color:inherit;text-decoration:none}.top{background:linear-gradient(110deg,var(--navy),var(--blue));color:#fff;padding:14px 22px;display:flex;justify-content:space-between;align-items:center}.top h1{font-size:19px;margin:0}.nav{background:#fff;border-bottom:1px solid var(--line);padding:10px 22px;display:flex;gap:8px;flex-wrap:wrap}.nav a{padding:8px 12px;border-radius:8px}.nav a:hover{background:#eaf4fc;color:var(--navy)}.wrap{max-width:1380px;margin:20px auto;padding:0 18px}.card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px;margin-bottom:16px;box-shadow:0 3px 12px rgba(26,65,96,.05)}.grid{display:grid;grid-template-columns:repeat(12,1fr);gap:12px}.c3{grid-column:span 3}.c4{grid-column:span 4}.c6{grid-column:span 6}.c8{grid-column:span 8}.c12{grid-column:span 12}label{display:block;font-weight:600;font-size:13px;margin-bottom:5px}input,select,textarea{width:100%;border:1px solid #bdcedb;border-radius:8px;padding:9px 10px;background:#fff;font-size:14px}textarea{min-height:70px}.btn{display:inline-block;border:0;border-radius:8px;padding:9px 14px;cursor:pointer;font-weight:600}.primary{background:var(--blue);color:#fff}.secondary{background:#eaf2f8;color:var(--navy)}.danger{background:#fdecea;color:var(--danger)}table{width:100%;border-collapse:collapse}th,td{border-bottom:1px solid #e1e9ef;padding:8px 7px;text-align:left;vertical-align:top}th{font-size:13px;background:#f3f8fc}.right{text-align:right}.center{text-align:center}.muted{color:var(--muted)}.badge{padding:3px 8px;border-radius:99px;background:#eaf4fc;color:var(--navy);font-size:12px}.alert{padding:10px 12px;border-radius:8px;background:#fff6e5;border:1px solid #f4cf84}.kpi{font-size:26px;font-weight:700;color:var(--navy)}.row-actions{display:flex;gap:6px;flex-wrap:wrap}.autocomplete{position:relative}.results{position:absolute;background:#fff;border:1px solid #bdd0df;z-index:20;width:100%;max-height:260px;overflow:auto;box-shadow:0 8px 20px rgba(0,0,0,.12)}.results div{padding:8px;cursor:pointer;border-bottom:1px solid #edf2f6}.results div:hover{background:#eef7ff}
@media(max-width:900px){.c3,.c4,.c6,.c8{grid-column:span 12}.wrap{padding:0 10px}.top{align-items:flex-start;gap:10px;flex-direction:column}}
.print-page{background:#fff;color:#000;font-family:"TH Sarabun New","TH SarabunPSK",sans-serif;font-size:16pt;line-height:1.18;max-width:210mm;min-height:297mm;margin:0 auto;padding:15mm 18mm}.print-page table{font-size:14pt}.print-page th,.print-page td{border:1px solid #000;padding:2px 4px}.print-page .no-border td{border:0}.print-page h2{font-size:18pt;text-align:center;margin:0 0 8px}.print-page p{margin:5px 0}.signature{margin-top:18px;text-align:center}.screen-only{display:block}@media print{body{background:#fff}.top,.nav,.screen-only{display:none!important}.wrap{max-width:none;margin:0;padding:0}.card{border:0;box-shadow:none;padding:0;margin:0}.print-page{padding:10mm 12mm;min-height:auto}.page-break{page-break-before:always}}
.c2{grid-column:span 2}.drawing-page{padding:9mm 12mm;font-size:14pt}.drawing-page h1{font-size:20pt;text-align:center;margin:3px 0}.drawing-page h2{font-size:16pt;text-align:center;margin:0 0 5px}.drawing-logo{text-align:center;border:1px solid #000;width:44mm;margin:0 auto 4px;padding:3px;font-weight:700;border-radius:50%}.drawing-head td{font-size:14pt;border-bottom:1px solid #000!important;padding:2px 4px}.drawing-grid{display:grid;grid-template-columns:2fr 1fr;gap:8mm;margin-top:5mm;min-height:92mm}.plan-box{border:1px solid #000;display:flex;align-items:center;justify-content:center;overflow:hidden;min-height:88mm}.plan-box img{max-width:100%;max-height:96mm;object-fit:contain}.pdf-placeholder{padding:14px;text-align:center;color:#555}.drawing-materials{font-size:12.5pt;line-height:1.2}.drawing-materials ol{margin:5px 0;padding-left:20px}.drawing-materials li{margin-bottom:3px}.small{font-size:10.5pt}.schematic-title{text-align:center;font-weight:700;margin:4mm 0 1mm}.meter-svg{width:100%;height:78mm;border:1px solid #000}.drawing-note{font-size:12pt;margin-top:2mm}.drawing-sign{margin-top:7mm}.drawing-sign td{width:50%;padding-top:3mm!important}.material-picker .mat-meta{margin-top:4px;font-size:12px}
@media(max-width:900px){.c2{grid-column:span 12}.drawing-grid{grid-template-columns:1fr}}
@media print{.drawing-page{padding:6mm 8mm}.drawing-grid{min-height:82mm}.plan-box{min-height:78mm}.plan-box img{max-height:86mm}.meter-svg{height:72mm}}

/* WYSIWYG installation drawing editor */
.drawing-editor-toolbar{max-width:1180px;margin:0 auto 12px;display:flex;justify-content:space-between;gap:16px;align-items:center}.wys-paper{width:min(100%,210mm);min-height:297mm;margin:0 auto 100px;background:#fff;color:#000;padding:10mm 12mm;border:1px solid #cfd8df;box-shadow:0 12px 35px rgba(20,48,70,.14);font-family:"TH Sarabun New","TH SarabunPSK",Tahoma,sans-serif;font-size:15pt;line-height:1.12}.wys-paper h1{font-size:21pt;text-align:center;margin:2mm 0 0}.wys-paper h2{font-size:16pt;text-align:center;margin:0 0 4mm}.wys-head{display:grid;grid-template-columns:1.2fr 1fr;gap:2mm 7mm;border-bottom:1px solid #000;padding-bottom:2mm}.wys-head>div{display:flex;align-items:end;gap:4px;min-width:0}.wys-head input{border:0;border-radius:0;border-bottom:1px dotted #333;padding:0 4px;height:28px;background:transparent;font-family:inherit;font-size:14pt;color:#000}.wys-head input.short{max-width:60px}.paper-static{flex:1;border-bottom:1px dotted #333;padding:0 6px;min-height:25px}.wys-body{display:grid;grid-template-columns:2fr 1fr;gap:7mm;margin-top:4mm;min-height:100mm}.wys-plan{border:1px solid #000;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;min-height:96mm}.wys-plan img{max-width:100%;max-height:105mm;object-fit:contain}.plan-upload{position:absolute;z-index:3;left:8px;top:8px;background:rgba(255,255,255,.94);border:1px solid #b9c9d5;border-radius:8px;padding:6px 8px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:12px;color:#183247;cursor:pointer}.plan-upload input{display:block;font-size:11px;margin-top:4px}.plan-empty{text-align:center;color:#73808a;padding:20px}.wys-side h3{font-size:14pt;margin:0 0 3mm}.wys-component{position:relative;margin:0 0 3mm;padding:2mm;border:1px dashed transparent;border-radius:5px}.wys-component:focus-within,.wys-component:hover{border-color:#9bc4e2;background:#f7fbff}.wys-label{font-weight:700;font-size:12.5pt}.wys-mat-input{border:0!important;border-radius:0!important;border-bottom:1px dotted #333!important;padding:2px 2px!important;font-family:inherit!important;font-size:12pt!important;color:#000!important;background:transparent!important}.wys-link-state{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:10px;color:#a23b2a;margin-top:2px}.wys-link-state.linked{color:#087a44}.wys-admin{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-top:5px;padding:6px;background:#eef6fb;border-radius:6px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}.wys-admin label{font-size:10px;margin:0}.wys-admin input,.wys-admin select{font-size:11px;padding:4px;height:29px}.wys-admin .inline-check{grid-column:1/-1;display:flex;gap:5px;align-items:center}.wys-admin .inline-check input{width:auto;height:auto}.coord{margin-top:5mm}.coord input{border:0;border-radius:0;border-bottom:1px dotted #333;padding:1px 2px;font-family:inherit;font-size:13pt}.wys-schematic{position:relative}.component-panel{display:grid;grid-template-columns:repeat(2,1fr);gap:2mm 5mm;margin-top:2mm}.component-panel .wys-component{margin:0}.inline-check{display:flex!important;gap:6px;align-items:center}.drawing-note textarea{border:0;border-bottom:1px dotted #333;border-radius:0;min-height:34px;font-family:inherit;font-size:13pt}.drawing-sign{display:grid;grid-template-columns:1fr 1fr;text-align:center;margin-top:8mm}.sticky-save{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);z-index:50;background:#fff;border:1px solid #c9d8e3;border-radius:12px;box-shadow:0 8px 30px rgba(0,0,0,.16);padding:10px 14px;display:flex;gap:12px;align-items:center;font-size:12px}.sync-card{max-width:210mm;margin:-82px auto 22px;background:#fff;border:1px solid #c9d8e3;border-radius:12px;padding:12px;display:flex;gap:10px;align-items:center}.wys-paper .results{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:12px;min-width:360px;left:0}.coord-print{margin-top:10px}
@media(max-width:900px){.wys-paper{width:100%;padding:12px;min-height:0}.wys-body{grid-template-columns:1fr}.wys-head{grid-template-columns:1fr}.component-panel{grid-template-columns:1fr}.sticky-save{position:sticky;transform:none;left:auto;bottom:8px;margin:10px}.sync-card{margin:10px}.drawing-editor-toolbar{flex-direction:column;align-items:flex-start}.wys-paper .results{min-width:100%}}
@media print{.wys-paper{width:210mm;min-height:297mm;margin:0;padding:8mm 10mm;border:0;box-shadow:none}.wys-admin,.wys-link-state,.plan-upload,.sticky-save,.sync-card{display:none!important}.wys-component{border:0!important;background:transparent!important;padding:0}.wys-mat-input{pointer-events:none}.wys-body{min-height:90mm}}
.nav{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.nav-logout{border:0;background:transparent;color:inherit;padding:10px 12px;cursor:pointer;font:inherit}.nav-logout:hover{background:rgba(255,255,255,.12)}.alert.success{border-left:4px solid currentColor}.top h1{margin:0}

/* v5 - official forms styled to closely follow supplied PWA samples */
.print-toolbar{max-width:210mm;margin:8px auto;text-align:right}.estimate-official,.official-letter,.contract-official,.drawing-official{font-family:"TH Sarabun New","TH SarabunPSK","Sarabun",Tahoma,sans-serif;color:#000;background:#fff}
.estimate-official{padding:7mm 8mm;font-size:13.2pt;line-height:1.05}.estimate-official h2{font-size:17pt;margin:0 0 2mm}.estimate-meta{display:grid;grid-template-columns:1.75fr .95fr;column-gap:8mm;row-gap:1mm;margin-bottom:2mm}.estimate-meta>div{min-height:7mm}.estimate-meta .request-line{color:#1a39a0}.indent-address{display:inline-block;margin-left:18mm}.estimate-grid{table-layout:fixed;font-size:10.7pt!important;line-height:1.0}.estimate-grid th,.estimate-grid td{border:1px dotted #e55353!important;padding:1.2px 2px!important;height:5.2mm}.estimate-grid th{text-align:center;font-weight:700;background:#fff}.estimate-grid th:nth-child(1){width:14mm}.estimate-grid th:nth-child(2){width:7mm}.estimate-grid .item-col{width:59mm}.estimate-grid th:nth-child(4){width:11mm}.estimate-grid th:nth-child(5){width:11mm}.estimate-grid th:nth-child(6){width:4mm}.estimate-grid th:nth-child(7),.estimate-grid th:nth-child(8),.estimate-grid th:nth-child(9),.estimate-grid th:nth-child(10){width:15mm}.estimate-grid th:nth-child(11){width:20mm}.estimate-grid .section td{font-weight:700;background:#fff}.estimate-grid .subtotal td{font-weight:700}.estimate-grid .grand td{font-weight:700}

.official-letter{position:relative;padding:17mm 23mm 15mm;font-size:16.5pt;line-height:1.22}.official-emblem{position:absolute;top:8mm;left:50%;transform:translateX(-50%);width:26mm;height:26mm;object-fit:contain;filter:grayscale(1)}.letter-head{display:grid;grid-template-columns:1fr 1fr;gap:25mm;margin-top:6mm;min-height:34mm}.letter-head>div:last-child{padding-left:7mm}.letter-date{text-align:center;margin:1mm 0 5mm}.letter-line{display:grid;grid-template-columns:18mm 1fr;margin:2mm 0}.letter-cost{margin:2mm 0 3mm 15mm;width:calc(100% - 15mm)!important}.letter-cost td{font-size:16.2pt!important;padding:0 2mm!important}.letter-cost td:nth-child(2){width:22mm;text-align:center}.letter-cost td:nth-child(3){width:30mm}.letter-cost td:nth-child(4){width:15mm}.letter-total{font-weight:700}.thai-indent{text-indent:25mm;text-align:justify;margin:2.5mm 0!important}.letter-sign{width:72mm;margin:8mm 0 0 auto;text-align:center;line-height:1.15}

.contract-official{padding:10mm 14mm;font-size:14.5pt;line-height:1.08}.memo-title{font-size:20pt;font-weight:700;border-bottom:2px solid #000;padding-bottom:1mm;margin-bottom:2mm}.memo-row{display:flex;gap:3mm;border-bottom:1px solid #000;padding:1mm 0}.memo-row>b{min-width:19mm}.memo-row span{flex:1}.memo-row.split{justify-content:space-between}.contract-grid{font-size:12.2pt!important;margin:2mm 0}.contract-grid th,.contract-grid td{border:1px solid #000!important;padding:1.5px 3px!important}.contract-grid th{text-align:center}.contract-grid th:nth-child(1){width:12mm}.contract-grid th:nth-child(2){width:65mm}.contract-grid th:nth-child(n+3){width:26mm}.committee-title{font-weight:700;margin-top:2mm}.contract-signs{display:grid;grid-template-columns:1fr 1fr;gap:7mm 18mm;text-align:center;margin-top:5mm}.contract-signs>div{min-height:25mm}.contract-signs .approval{grid-row:1 / span 2;grid-column:2;align-self:start}

.drawing-official{padding:5mm 6mm;font-size:13pt;line-height:1.05;border:1px solid #000}.drawing-emblem{display:block;width:27mm;height:27mm;object-fit:contain;filter:grayscale(1);margin:0 auto 1mm}.drawing-official h1{font-size:19pt;text-align:center;margin:0}.drawing-official h2{font-size:14.5pt;text-align:center;margin:0 0 2mm}.drawing-info{display:grid;grid-template-columns:1.5fr 1fr;gap:1mm 6mm;border-bottom:1px solid #000;padding-bottom:1mm}.drawing-info>div{display:flex;gap:2mm;align-items:end}.drawing-info span{flex:1;border-bottom:1px solid #000;min-height:5mm;padding:0 2mm}.drawing-top{display:grid;grid-template-columns:2fr .9fr;gap:5mm;min-height:98mm;margin-top:3mm}.drawing-plan{display:flex;align-items:center;justify-content:center;overflow:hidden}.drawing-plan img{max-width:100%;max-height:105mm;object-fit:contain}.drawing-list{font-size:11.8pt;padding-top:4mm}.drawing-list ol{margin:2mm 0 0;padding-left:6mm}.drawing-list li{margin-bottom:1mm}.latlng{margin-top:20mm;font-size:12.5pt;line-height:1.4}.drawing-official .meter-svg{border:0;height:70mm}.drawing-sign-official{display:grid;grid-template-columns:1fr 1fr;text-align:center;margin-top:4mm}.drawing-sign-official>div{min-height:23mm}

.workflow-strip{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:10px 0}.workflow-step{padding:8px 11px;border-radius:9px;background:#eef4f8;border:1px solid #d4e1ea;font-weight:700}.workflow-step.active{background:#dff2ff;border-color:#7bbce7;color:#064b7b}.workflow-arrow{color:#8093a3}

@media print{
  @page{size:A4 portrait;margin:0}
  .estimate-official{padding:5mm 6mm}.official-letter{padding:16mm 22mm 12mm}.contract-official{padding:8mm 12mm}.drawing-official{padding:4mm 5mm;margin:4mm auto;border:1px solid #000}
  .print-page{width:210mm;max-width:210mm;min-height:297mm;margin:0;box-shadow:none}
}
.drawing-editor-emblem{display:block;width:27mm;height:27mm;object-fit:contain;filter:grayscale(1);margin:0 auto 1mm}

/* v5.1 - official meter cut + PWA memorandum */
.official-meter-cut{border:0!important;height:auto!important;min-height:0;background:#fff}.official-meter-cut .schematic-pick{cursor:pointer}.official-meter-cut .schematic-pick:hover{fill:#0b6fc2;text-decoration:underline}.schematic-help{font-weight:400;font-size:11px;color:#65727d;margin-left:6px}.compact-pickers{margin-top:3mm;padding-top:2mm;border-top:1px dotted #aaa}.compact-pickers .wys-component{padding:1.5mm;margin:0}.compact-pickers .wys-label{font-size:11.7pt}.compact-pickers .wys-admin{margin-top:3px;padding:4px}.wys-schematic{border:1px solid #d5d5d5;padding:2mm;background:#fff}.drawing-official .official-meter-cut{width:100%;height:auto!important;max-height:76mm;overflow:visible}.drawing-official .schematic-title{margin-top:1mm}

.official-memo{padding:9mm 15mm 11mm;font-size:15pt;line-height:1.12}.memo-brand{display:flex;align-items:center;gap:4mm;margin-bottom:1mm}.memo-brand img{width:22mm;height:22mm;object-fit:contain}.memo-brand-name{font-size:16.5pt;font-weight:700}.memo-brand-slogan{font-size:12.5pt;letter-spacing:.3px}.memo-title-official{text-align:center;font-size:25pt;font-weight:700;margin:-14mm 0 3mm 0}.memo-field{display:flex;align-items:flex-end;gap:3mm;margin:.5mm 0;font-size:15.5pt}.memo-field>b{min-width:20mm;font-weight:700}.memo-field>span{flex:1;border-bottom:1px solid #000;min-height:6mm;padding:0 1mm}.memo-field.memo-two{display:grid;grid-template-columns:1fr 1fr;gap:16mm}.memo-field.memo-two>div{display:flex;align-items:flex-end;gap:3mm}.memo-field.memo-two b{min-width:8mm}.memo-field.memo-two span{flex:1;border-bottom:1px solid #000;min-height:6mm;padding:0 1mm}.memo-divider{border-bottom:2px solid #000;margin:1.5mm 0 2mm}.memo-to{margin-top:1mm}.official-memo p{margin:2.5mm 0}.official-contract-grid{font-size:12.5pt!important;margin:2.5mm 0 1.5mm}.official-contract-grid th,.official-contract-grid td{padding:1.1mm 1.5mm!important;vertical-align:middle}.factor-line{margin:1.5mm 0 2mm;font-size:14.5pt}.memo-sign-area{display:grid;grid-template-columns:1.35fr .9fr;gap:10mm;margin-top:4mm}.committee-block{font-size:13.5pt}.committee-title{text-align:left;font-weight:700;margin-bottom:3mm}.sig{margin:5mm 0 0 6mm;line-height:1.25}.sig span{display:inline-block;min-width:55mm;text-align:center}.approval-block{text-align:center;font-size:14pt;padding-top:1mm}.approval-title{font-weight:700}.approval-space{height:17mm}
@media(max-width:900px){.memo-sign-area{grid-template-columns:1fr}.memo-title-official{margin:0}.memo-field.memo-two{grid-template-columns:1fr}.official-meter-cut{min-width:1000px}.wys-schematic{overflow-x:auto}}
@media print{.official-memo{padding:7mm 13mm 8mm}.memo-brand img{width:20mm;height:20mm}.memo-title-official{font-size:24pt}.official-contract-grid{font-size:11.8pt!important}.official-meter-cut .schematic-pick{fill:#000!important;text-decoration:none!important}.compact-pickers{display:none!important}.wys-schematic{border:0;padding:0}.drawing-official .official-meter-cut{max-height:72mm}}

/* v6 auto assembly */
.auto-primary{border:2px solid #b9d7ef;background:#f8fcff}.auto-primary h3{margin-top:0}.auto-list{display:flex;flex-direction:column;gap:2mm;margin:2mm 0}.auto-row{border-bottom:1px dotted #aaa;padding:1.4mm 0}.auto-row b{display:block;font-size:12pt}.auto-row span{display:block;font-size:11.5pt;color:#222}.auto-row em{color:#777;font-style:normal}

/* contract form matched to supplied official memo */
.contract-source-form{font-family:"TH Sarabun New","TH SarabunPSK","Sarabun",Tahoma,sans-serif;color:#000;background:#fff;padding:8mm 11mm 8mm;font-size:14.3pt;line-height:1.12;min-height:297mm}
.source-head{height:25mm;position:relative}.source-head img{position:absolute;left:0;top:0;width:20mm;height:20mm;object-fit:contain}.source-title{position:absolute;left:0;right:0;top:10mm;text-align:center;font-size:24pt;font-weight:700}.source-userno{position:absolute;right:0;top:1mm;font-size:12.5pt}.source-line{min-height:7mm;padding:1mm 0 .4mm;border-bottom:1px dotted #333}.source-line.split{display:flex;justify-content:space-between;gap:12mm}.source-line.split span{width:50%}.source-sep{border-bottom:1.7px solid #000;margin-top:.4mm}.contract-source-form p{margin:2.4mm 0}.source-contract-table{width:100%;border-collapse:collapse;font-size:11.7pt;margin:2mm 0 1.5mm}.source-contract-table th,.source-contract-table td{border:1px solid #222!important;padding:.8mm 1.2mm!important;line-height:1.05}.source-contract-table th{text-align:center;font-weight:700}.source-contract-table th:nth-child(1){width:11mm}.source-contract-table th:nth-child(2){width:55mm}.source-contract-table th:nth-child(n+3){width:27mm}.source-factor{margin:1mm 0 2mm 11mm}.source-committee-title{text-decoration:underline;font-weight:700;margin:1mm 0 1.5mm 11mm}.source-hire{margin-left:11mm;line-height:1.35}.source-chair{text-align:center;margin-top:9mm;line-height:1.35}.source-two-sign{display:grid;grid-template-columns:1fr 1fr;gap:35mm;margin-top:8mm;text-align:center;line-height:1.35}.source-approve{text-align:center;margin-top:6mm;line-height:1.35;font-weight:400}.source-approve:first-line{font-weight:700}
@media print{.contract-source-form{padding:5mm 8mm 4mm;font-size:13.5pt}.source-title{font-size:23pt}.source-contract-table{font-size:11.2pt}.source-chair{margin-top:6mm}.source-two-sign{margin-top:6mm}.source-approve{margin-top:4mm}}
