:root{--ink: #1c2421;--muted: #5c6762;--teal: #0f5f56;--teal-dark: #0a3f39;--teal-soft: #e4f1ee;--paper: #f3efe6;--card: #fffcf7;--line: #d9d1c3;--danger: #9b2c2c;--danger-soft: #f8e4e4;--shadow: 0 10px 30px rgba(28, 36, 33, .08);--radius: 14px;--font: "Segoe UI", "Noto Sans", system-ui, sans-serif;--serif: "Iowan Old Style", "Palatino Linotype", Palatino, serif}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;color:var(--ink);background:radial-gradient(circle at top right,#e7f0ea 0,transparent 32%),var(--paper);font-family:var(--font);font-size:18px;line-height:1.45}h1,h2{margin:0;letter-spacing:-.02em}button,input,select{font:inherit}a{color:inherit}.center-screen{min-height:100vh;display:grid;place-items:center}.muted{color:var(--muted)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.app-shell{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 22px;background:var(--teal-dark);color:#f4f7f6}.brand{display:flex;align-items:baseline;gap:10px;text-decoration:none}.brand strong{font-size:1.35rem}.brand span{opacity:.8}.topbar-actions{display:flex;align-items:center;gap:12px}.topbar-email{font-size:.95rem;opacity:.8}.page{width:min(1100px,calc(100% - 32px));margin:24px auto 40px;flex:1}.site-footer{text-align:center;color:var(--muted);padding:16px;font-size:.95rem}.page-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:18px}.header-actions{display:flex;flex-wrap:wrap;gap:10px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.pad{padding:22px}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:10px 18px;border-radius:10px;border:1px solid transparent;background:#ece6da;color:var(--ink);text-decoration:none;cursor:pointer}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background:var(--teal);color:#fff}.btn-primary:hover:not(:disabled){background:var(--teal-dark)}.btn-ghost{background:transparent;border-color:currentColor}.topbar .btn-ghost{color:#f4f7f6;min-height:42px}.btn-danger{background:var(--danger);color:#fff}.btn-danger-outline{background:var(--danger-soft);color:var(--danger);border-color:transparent}.btn-small{min-height:40px;padding:6px 12px;font-size:.95rem}.btn-block{width:100%}.field{display:flex;flex-direction:column;gap:6px}.field span,.detail-label{font-size:.95rem;color:var(--muted);font-weight:600}.field input,.field select,.search-field input,.relation-inputs input,.relation-inputs select{min-height:48px;padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:#fff}.search-field{margin-bottom:16px}.search-field input{width:100%;font-size:1.05rem}.banner{padding:12px 14px;border-radius:10px;margin:0 0 16px}.banner.error{background:var(--danger-soft);color:var(--danger)}.login-page{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:min(460px,100%);background:var(--card);border:1px solid var(--line);border-radius:20px;box-shadow:var(--shadow);padding:32px 28px}.login-kicker{margin:0 0 8px;text-transform:uppercase;letter-spacing:.12em;font-size:.78rem;color:var(--teal);font-weight:700}.login-card h1{font-size:1.55rem;line-height:1.25}.login-sub{color:var(--muted);margin:8px 0 22px}.login-form{display:grid;gap:14px}.form-card{padding:22px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.field-wide{grid-column:1 / -1}.relation-row{display:flex;flex-direction:column;gap:6px}.relation-inputs{display:grid;grid-template-columns:110px 1fr;gap:10px}.tests-fieldset{border:1px solid var(--line);border-radius:12px;margin:20px 0;padding:12px 14px 16px}.tests-fieldset legend{padding:0 8px;font-weight:700;color:var(--teal-dark)}.tests-row{display:flex;flex-wrap:wrap;gap:10px 16px;padding:6px 0}.check{display:inline-flex;align-items:center;gap:8px;min-height:40px;font-size:1.02rem}.check input{width:20px;height:20px}.form-actions{display:flex;justify-content:flex-end;margin-top:8px}.table-wrap{overflow-x:auto}.data-table{width:100%;border-collapse:collapse}.data-table th,.data-table td{text-align:left;padding:14px 16px;border-bottom:1px solid var(--line);vertical-align:middle}.data-table th{background:var(--teal-soft);font-size:.92rem;text-transform:uppercase;letter-spacing:.04em}.empty-cell{color:var(--muted);text-align:center;padding:32px 16px}.nowrap{white-space:nowrap}.row-actions{display:flex;flex-wrap:wrap;gap:8px}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 24px}.detail-grid p{margin:4px 0 0;font-size:1.15rem}.modal-backdrop{position:fixed;inset:0;background:#141c1a73;display:grid;place-items:center;padding:20px;z-index:20}.modal{width:min(480px,100%);background:var(--card);border-radius:16px;padding:24px;box-shadow:var(--shadow)}.modal p{color:var(--muted)}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.print-page{min-height:100vh;padding:24px 16px 48px}.print-toolbar{width:min(210mm,100%);margin:0 auto 12px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}.slot-picker{display:flex;flex-wrap:wrap;gap:8px}.print-hint{width:min(210mm,100%);margin:0 auto 16px;color:var(--muted);font-size:.95rem}.print-sheet-frame{width:min(210mm,100%);margin:0 auto;overflow:auto}.print-sheet{--sheet-width: 210mm;--sheet-height: 297mm;--slot-count: 3;width:var(--sheet-width);height:var(--sheet-height);margin:0 auto;background:#fff;box-shadow:var(--shadow);display:flex;flex-direction:column}.print-slot{height:calc(var(--sheet-height) / var(--slot-count));display:flex;align-items:center;justify-content:center;box-sizing:border-box}.print-slot.has-cut{border-bottom:.3mm dashed #bbb}.print-slot-label{color:#bbb;font-size:.95rem;letter-spacing:.04em}.receipt{--receipt-width: 190mm;--receipt-height: 88mm;--receipt-pad: 3mm 4mm;--receipt-font: 10pt;--receipt-title: 14pt;--receipt-address: 8pt;--receipt-banner: 11pt;--receipt-check: 3.2mm;width:var(--receipt-width);height:var(--receipt-height);margin:0;background:#fff;border:.5mm solid #1c2421;padding:var(--receipt-pad);color:#111;font-size:var(--receipt-font);line-height:1.2;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.receipt-header{text-align:center;border-bottom:.3mm solid #111;padding-bottom:1.2mm}.receipt-header h1{font-family:var(--serif);font-size:var(--receipt-title);line-height:1.15}.receipt-header p{margin:.6mm 0 0;font-size:var(--receipt-address)}.receipt-banner{margin:1.4mm 0;text-align:center;font-weight:800;letter-spacing:.16em;font-size:var(--receipt-banner);border:.4mm solid #111;padding:1mm}.receipt-row{display:flex;gap:4mm;padding:1.1mm 0;border-bottom:.2mm solid #cfcfcf}.receipt-field{display:flex;gap:1.8mm;align-items:baseline;min-width:0}.receipt-field.grow{flex:1;min-width:0}.receipt-field.narrow{flex:0 0 22mm}.receipt-field span{white-space:nowrap;font-weight:700}.receipt-field strong{border-bottom:.2mm dotted #333;flex:1;min-width:0;min-height:1.2em;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.receipt-tests{display:flex;gap:2.5mm;padding:1.4mm 0;border-bottom:.2mm solid #cfcfcf}.receipt-tests-label{font-weight:700;padding-top:.3mm}.receipt-tests-body{flex:1;min-width:0}.receipt-tests-line{display:flex;flex-wrap:wrap;gap:1mm 3mm;padding:.5mm 0}.slip-check{display:inline-flex;align-items:center;gap:1.2mm;white-space:nowrap}.slip-box{width:var(--receipt-check);height:var(--receipt-check);border:.3mm solid #111;display:inline-flex;align-items:center;justify-content:center;font-size:calc(var(--receipt-check) * .7);line-height:1}.receipt-footer-row{align-items:flex-end;border-bottom:0;padding-top:2mm}.sign-field{flex-direction:column;gap:.6mm}.sign-line{display:block;width:100%;border-bottom:.3mm solid #111;min-height:5mm}@media(max-width:720px){.form-grid,.detail-grid,.relation-inputs{grid-template-columns:1fr}.page-header,.topbar{flex-direction:column;align-items:flex-start}}@media print{html,body{background:#fff;margin:0}.no-print{display:none!important}.print-page{padding:0;min-height:0}.print-sheet-frame{width:100%;overflow:visible}.print-sheet{--sheet-width: 100%;--sheet-height: 270mm;box-shadow:none}.receipt{--receipt-width: 185mm;--receipt-height: 85mm;max-width:100%}}
