:root{--bg:#f5f6f8;--card:#ffffff;--border:#e2e5ea;--text:#1c2330;--muted:#6b7280;--primary:#2563eb;--primary-d:#1d4ed8;--danger:#dc2626;--ok:#16a34a}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:-apple-system,Segoe UI,Roboto,Noto Sans Thai,sans-serif;background:var(--bg);color:var(--text);font-size:14px}a{color:var(--primary);text-decoration:none}.container{max-width:1000px;margin:0 auto;padding:20px}.nav{background:var(--card);border-bottom:1px solid var(--border);display:flex;gap:16px;align-items:center;padding:12px 20px}.nav a{font-weight:600;color:var(--text)}.nav a.active{color:var(--primary)}.nav .spacer{flex:1 1}.card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:16px;margin-bottom:14px}.row{gap:10px;flex-wrap:wrap;align-items:center}.col,.row{display:flex}.col{flex-direction:column;gap:8px}h1{font-size:20px}h2{font-size:16px}label{font-size:12px;color:#6b7280;display:block;margin-bottom:2px}input,select,textarea{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:8px;font-size:14px;background:#fff}button{background:var(--primary);color:#fff;border:none;border-radius:8px;padding:8px 14px;font-size:14px;font-weight:600;cursor:pointer}button:hover{background:var(--primary-d)}button.secondary{background:#eef2ff;color:var(--primary)}button.ghost{background:transparent;color:var(--text);border:1px solid var(--border)}button:disabled{opacity:.5;cursor:not-allowed}table{width:100%;border-collapse:collapse}td,th{text-align:left;padding:8px;border-bottom:1px solid var(--border)}th{color:#6b7280}.badge,th{font-size:12px}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-weight:600}.badge.OPEN{background:#f1f5f9;color:#475569}.badge.ASSIGNED{background:#fef3c7;color:#92400e}.badge.IN_PROGRESS{background:#dbeafe;color:#1d4ed8}.badge.CLOSED{background:#dcfce7;color:#166534}.badge.CANCELLED{background:#fee2e2;color:#991b1b}.error{color:var(--danger);font-size:13px}.muted{color:#6b7280}.grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:14px;gap:14px}@media (max-width:700px){.grid{grid-template-columns:1fr}}.nav-brand{font-weight:700;font-size:16px}.nav-backdrop,.nav-brand,.nav-toggle{display:none}.nav-links{display:flex;flex:1 1;gap:16px;align-items:center}.nav-group{display:contents}.nav-group-label{display:none}@media (max-width:760px){.nav-group-label{display:block;padding:8px 10px 2px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:#94a3b8}.nav-group+.nav-group .nav-group-label{border-top:1px solid var(--border);margin-top:2px}.nav{flex-wrap:nowrap;justify-content:space-between;position:relative}.nav-brand,.nav-toggle{display:inline-block}.nav-toggle{font-size:18px;line-height:1;padding:6px 12px;background:transparent}.nav-backdrop{display:block;position:fixed;inset:0;z-index:20}.nav-links{display:none;position:absolute;top:100%;left:0;right:0;z-index:30;flex-direction:column;align-items:stretch;gap:0;padding:6px;background:var(--card);border-bottom:1px solid var(--border);box-shadow:0 8px 24px rgba(0,0,0,.14)}.nav-links.open{display:flex}.nav-links .spacer{display:none}.nav-links a{display:flex;align-items:center;min-height:40px;padding:4px 10px;border-radius:6px;font-size:14px}.nav-links a.active,.nav-links a:hover{background:#f1f5f9}.nav-links form{width:100%;margin-top:4px;padding-top:6px;border-top:1px solid var(--border)}.nav-links input{width:100%;padding:7px 10px}.nav-links>.muted{padding:4px 10px;font-size:12px}.nav-links>button{width:100%;text-align:left;margin-top:2px;min-height:40px}}@media (max-width:700px){.card table:not(.jobs-table):not(.users-table){display:block;width:100%;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}.container{padding:14px}.card{padding:12px}.chip,button{min-height:36px}}.badge.ADMIN{background:#ede9fe;color:#6d28d9}.badge.TECHNICIAN{background:#e0f2fe;color:#075985}.badge.COORDINATOR{background:#fef9c3;color:#854d0e}.badge.ACTIVE{background:#dcfce7;color:#166534}.badge.INACTIVE{background:#f1f5f9;color:#64748b}.users-table td,.users-table th{white-space:nowrap;vertical-align:middle}.table-scroll{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.jobs-table{min-width:760px}.jobs-table td,.jobs-table th{vertical-align:middle}.jobs-table td.nowrap,.jobs-table th.nowrap{white-space:nowrap}.jobs-table td.job-title{font-weight:500;min-width:160px}.jobs-table tbody tr:hover{background:#f8fafc}.job-filters{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:12px 0}.chip{display:inline-block;background:#f1f5f9;color:var(--text);border:1px solid var(--border);border-radius:999px;padding:4px 12px;font-size:13px;font-weight:600;cursor:pointer}.chip:hover{background:#e2e8f0}a.chip{text-decoration:none}.chip-on{background:var(--primary);color:#fff;border-color:var(--primary)}.chip-on:hover{background:var(--primary-d)}.create-job-form{margin-top:10px}.modal-backdrop{position:fixed;inset:0;z-index:50;background:rgba(0,0,0,.4);display:flex;align-items:flex-start;justify-content:center;padding:40px 12px;overflow-y:auto}.modal-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:16px;width:100%;max-width:440px;box-shadow:0 12px 32px rgba(0,0,0,.2)}@media (max-width:700px){.modal-backdrop{padding:16px 8px}}.tabs{display:flex;flex-wrap:wrap;gap:4px;margin:12px 0;border-bottom:1px solid var(--border)}.tab{background:transparent;color:var(--muted);border:none;border-bottom:2px solid transparent;border-radius:0;padding:8px 14px;font-size:14px;font-weight:600;cursor:pointer}.tab:hover{background:#f1f5f9;color:var(--text)}.tab-on{color:var(--primary);border-bottom-color:var(--primary)}@media (max-width:700px){.tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch}.tab{white-space:nowrap;padding:8px 12px}}.cal-scroll{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:1px;gap:1px;background:var(--border);border:1px solid var(--border);border-radius:10px;overflow:hidden;min-width:700px}.cal-dow{background:#f8fafc;color:var(--muted);font-size:12px;font-weight:700;text-align:center;padding:6px 4px}.cal-cell{background:var(--card);min-height:96px;padding:4px;display:flex;flex-direction:column;gap:3px}.cal-week .cal-cell{min-height:220px}.cal-out{background:#fafbfc}.cal-out .cal-day{color:#cbd5e1}.cal-today{box-shadow:inset 0 0 0 2px var(--primary)}.cal-day{font-size:12px;font-weight:700;color:var(--text)}.cal-events{display:flex;flex-direction:column;gap:3px}.cal-ev{display:block;font-size:11px;line-height:1.3;padding:2px 6px;border-radius:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text);background:#f1f5f9;border-left:3px solid #94a3b8}.cal-ev:hover{filter:brightness(.96)}.cal-ev-code{font-weight:700}.cal-ev.OPEN{background:#f1f5f9;border-left-color:#475569}.cal-ev.ASSIGNED{background:#fef3c7;border-left-color:#92400e}.cal-ev.IN_PROGRESS{background:#dbeafe;border-left-color:#1d4ed8}.cal-ev.CLOSED{background:#dcfce7;border-left-color:#166534}.cal-ev.CANCELLED{background:#fee2e2;border-left-color:#991b1b}.menu-wrap{position:relative;display:inline-block}.menu-backdrop{position:fixed;inset:0;z-index:10}.menu{position:absolute;right:0;top:calc(100% + 4px);z-index:20;background:var(--card);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.12);min-width:190px;padding:4px}.menu button{display:block;width:100%;text-align:left;background:transparent;color:var(--text);font-weight:500;padding:8px 10px;border-radius:6px}.menu button:hover{background:#f1f5f9}.menu button.danger{color:var(--danger)}