:root{--bg:#f8fafc;--surface:#fff;--surface-2:#f8fafc;--surface-3:#f1f5f9;--border:#e2e8f0;--border-strong:#cbd5e1;--text:#0f172a;--text-strong:#020617;--text-muted:#64748b;--text-subtle:#94a3b8;--text-inverse:#f8fafc;--primary:#4338ca;--primary-hover:#3730a3;--primary-bg:#eef2ff;--primary-border:#c7d2fe;--success:#047857;--success-bg:#ecfdf5;--success-border:#a7f3d0;--warning:#b45309;--warning-bg:#fffbeb;--warning-border:#fde68a;--danger:#b91c1c;--danger-bg:#fef2f2;--danger-border:#fecaca;--info:#0369a1;--info-bg:#f0f9ff;--info-border:#bae6fd;--radius-sm:4px;--radius:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-full:9999px;--shadow-xs:0 1px 2px #0f172a0a;--shadow-sm:0 1px 2px #0f172a0f, 0 1px 3px #0f172a0a;--shadow:0 2px 4px #0f172a0a, 0 4px 8px #0f172a0a;--shadow-md:0 4px 8px -1px #0f172a0f, 0 8px 16px -2px #0f172a0d;--shadow-lg:0 12px 24px -4px #0f172a14, 0 16px 32px -8px #0f172a0f;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Noto Sans SC", "Noto Sans TC", "Microsoft YaHei", Arial, sans-serif;--font-mono:ui-monospace, "SF Mono", "Cascadia Code", "Roboto Mono", Consolas, monospace}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{font-family:var(--font-sans);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"cv11", "ss01", "tnum";font-size:15px;line-height:1.55}button{font-family:inherit;font-size:inherit;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}input,textarea,select{font-family:inherit}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.hidden{display:none!important}.container{max-width:1080px;margin:0 auto;padding:28px 24px 48px}.header{background:var(--surface);border-bottom:1px solid var(--border)}.header-content{justify-content:space-between;align-items:center;gap:16px;max-width:1080px;margin:0 auto;padding:14px 24px;display:flex}.logo{letter-spacing:-.01em;color:var(--text-strong);align-items:center;gap:10px;font-size:15px;font-weight:600;display:inline-flex}.logo-mark{background:linear-gradient(135deg, var(--primary), #6366f1);color:#fff;border-radius:8px;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex;box-shadow:0 2px 4px #4338ca40}.header-actions{align-items:center;gap:12px;display:flex}.lang-selector{background:var(--surface-3);border-radius:var(--radius);border:1px solid var(--border);-webkit-overflow-scrolling:touch;gap:2px;max-width:100%;padding:3px;display:flex;overflow-x:auto}.lang-selector::-webkit-scrollbar{height:0;display:none}.lang-btn{border-radius:var(--radius-sm);color:var(--text-muted);white-space:nowrap;align-items:center;gap:4px;min-height:28px;padding:5px 8px;font-size:12px;line-height:1;transition:background .12s,color .12s;display:inline-flex}.lang-btn:hover{color:var(--text)}.lang-btn.active{background:var(--surface);color:var(--text-strong);box-shadow:var(--shadow-xs);font-weight:600}.lang-code{letter-spacing:.02em;font-weight:600}.tabs{background:var(--surface-3);border:1px solid var(--border);border-radius:var(--radius-md);gap:2px;margin-bottom:24px;padding:4px;display:inline-flex}.tab{color:var(--text-muted);border-radius:var(--radius);white-space:nowrap;min-height:36px;padding:8px 18px;font-size:14px;font-weight:500;transition:background .12s,color .12s}.tab:hover:not(.active){color:var(--text)}.tab.active{background:var(--surface);color:var(--text-strong);box-shadow:var(--shadow-xs)}.panel{flex-direction:column;gap:16px;display:flex}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xs);padding:24px}.card-title{color:var(--text-strong);letter-spacing:-.005em;margin-bottom:16px;font-size:15px;font-weight:600}.card-title-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.card-title-row .card-title{margin-bottom:0}.btn{border-radius:var(--radius);background:var(--surface);height:38px;color:var(--text);white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;gap:6px;padding:0 16px;font-size:14px;font-weight:500;line-height:1;transition:background .12s,border-color .12s,color .12s,box-shadow .12s;display:inline-flex}.btn:hover:not(:disabled){background:var(--surface-3)}.btn:active:not(:disabled){transform:translateY(.5px)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-outline{border-color:var(--border);background:var(--surface);color:var(--text)}.btn-outline:hover:not(:disabled){border-color:var(--border-strong);background:var(--surface)}.btn-success{background:var(--primary);color:#fff;border-color:var(--primary)}.btn-success:hover:not(:disabled){background:var(--primary-hover);border-color:var(--primary-hover)}.btn-lg{height:44px;padding:0 22px;font-size:15px;font-weight:600}.btn-sm{height:32px;padding:0 12px;font-size:13px}.form-group{margin-bottom:16px}.form-label{color:var(--text);margin-bottom:6px;font-size:13px;font-weight:500;display:block}.form-input,.form-textarea{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);padding:9px 12px;font-size:14px;line-height:1.4;transition:border-color .12s,box-shadow .12s}.form-input:hover,.form-textarea:hover{border-color:var(--border-strong)}.form-input:focus,.form-textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-bg);outline:none}.form-textarea{resize:vertical;min-height:88px}select.form-input{-webkit-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2364748B' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;background-size:16px;padding-right:32px}.banner{border-radius:var(--radius-md);border:1px solid #0000;align-items:center;gap:10px;padding:10px 14px;font-size:14px;line-height:1.45;display:flex}.banner-success{background:var(--success-bg);color:var(--success);border-color:var(--success-border)}.banner-warning{background:var(--warning-bg);color:var(--warning);border-color:var(--warning-border)}.banner-error{background:var(--danger-bg);color:var(--danger);border-color:var(--danger-border);flex-wrap:wrap}.banner-info{background:var(--info-bg);color:var(--info);border-color:var(--info-border)}.worker-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px;display:flex}.nfc-scanner{text-align:center;padding:16px 8px 8px}.nfc-icon{background:var(--primary-bg);width:88px;height:88px;color:var(--primary);border-radius:var(--radius-xl);border:1px solid var(--primary-border);justify-content:center;align-items:center;margin:0 auto 16px;display:flex}.nfc-icon.scanning{animation:1.6s ease-in-out infinite nfc-pulse}@keyframes nfc-pulse{0%,to{box-shadow:0 0 #4338ca4d}50%{box-shadow:0 0 0 14px #4338ca00}}.nfc-scanner h3{color:var(--text-strong);margin-bottom:4px;font-size:16px;font-weight:600}.location-grid{grid-template-columns:1fr 1fr;gap:10px;margin-top:20px;display:grid}.location-btn{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);min-height:84px;color:var(--text);flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:18px 12px;font-weight:500;transition:border-color .12s,background .12s,color .12s;display:flex}.location-btn:hover:not(:disabled){border-color:var(--primary-border);background:var(--primary-bg);color:var(--primary)}.location-icon{color:var(--text-muted);line-height:0}.location-btn:hover .location-icon{color:var(--primary)}.checklist-container{flex-direction:column;gap:8px;display:flex}.checklist-item{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);text-align:left;align-items:center;gap:12px;width:100%;min-height:52px;padding:12px 14px;transition:background .12s,border-color .12s;display:flex}.checklist-item:hover:not(:disabled){background:var(--surface-3);border-color:var(--border-strong)}.checklist-item.completed{background:var(--success-bg);border-color:var(--success-border);color:var(--success)}.checklist-item:disabled{opacity:.6;cursor:not-allowed}.checklist-box{border:1.5px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:#fff;flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;font-size:13px;font-weight:700;transition:background .12s,border-color .12s;display:inline-flex}.checklist-item.completed .checklist-box{border-color:var(--success);background:var(--success)}.checklist-label{flex:1;font-size:14px;line-height:1.5}.photo-upload{background:var(--surface-2);border:1.5px dashed var(--border-strong);border-radius:var(--radius-lg);width:100%;color:var(--text-muted);flex-direction:column;align-items:center;gap:8px;padding:28px 16px;transition:border-color .12s,background .12s,color .12s;display:flex}.photo-upload:hover:not(:disabled){border-color:var(--primary);background:var(--primary-bg);color:var(--primary)}.photo-upload:disabled{opacity:.55;cursor:not-allowed}.photo-upload p{margin:0;font-size:14px;font-weight:500}.photo-preview{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px;margin-top:12px;display:grid}.photo-item{aspect-ratio:1;border-radius:var(--radius-md);border:1px solid var(--border);position:relative;overflow:hidden}.photo-item img{object-fit:cover;width:100%;height:100%;display:block}.photo-item .remove-photo{border-radius:var(--radius-full);color:#fff;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#0f172a99;border:none;justify-content:center;align-items:center;width:26px;height:26px;font-size:16px;line-height:0;display:flex;position:absolute;top:6px;right:6px}.photo-item .remove-photo:hover:not(:disabled){background:var(--danger)}.signature-container{margin-top:16px}.scan-mode-tabs{background:var(--surface-3);border:1px solid var(--border);border-radius:var(--radius-md);gap:2px;margin-bottom:16px;padding:4px;display:flex}.scan-mode-tab{color:var(--text-muted);border-radius:var(--radius-sm);flex:1;justify-content:center;align-items:center;gap:6px;min-height:36px;padding:8px 10px;font-size:13px;font-weight:500;transition:background .12s,color .12s;display:inline-flex}.scan-mode-tab:hover:not(.active){color:var(--text)}.scan-mode-tab.active{background:var(--surface);color:var(--text-strong);box-shadow:var(--shadow-xs)}.qr-region{aspect-ratio:1;border-radius:var(--radius-md);background:#0f172a;width:100%;max-width:min(100vw - 48px,320px);margin:0 auto;overflow:hidden}.qr-region video{object-fit:cover;width:100%!important;height:100%!important}.qr-start{text-align:center;padding:24px 8px}.record-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;display:grid}.record-card{text-align:left;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px 16px;transition:border-color .12s,box-shadow .12s}.record-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-sm)}.record-header{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.record-location{color:var(--text-strong);font-size:15px;font-weight:600}.record-pct{border-radius:var(--radius-full);letter-spacing:.01em;padding:2px 8px;font-size:12px;font-weight:600}.pct-full{background:var(--success-bg);color:var(--success)}.pct-half{background:var(--warning-bg);color:var(--warning)}.pct-low{background:var(--danger-bg);color:var(--danger)}.record-time{color:var(--text-muted);font-variant-numeric:tabular-nums;margin-bottom:8px;font-size:12px}.record-meta{color:var(--text-muted);align-items:center;gap:14px;font-size:13px;display:flex}.record-meta>span{align-items:center;gap:4px;display:inline-flex}.filter-bar{flex-direction:column;gap:10px;display:flex}.filter-presets{flex-wrap:wrap;gap:6px;display:flex}.filter-fields{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.filter-field{flex-direction:column;gap:4px;min-width:140px;display:flex}.filter-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;font-size:11px;font-weight:600}.modal-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:100;background:#0f172a80;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.modal-panel{background:var(--surface);border-radius:var(--radius-xl);width:100%;max-width:720px;max-height:calc(100vh - 48px);box-shadow:var(--shadow-lg);flex-direction:column;display:flex;overflow:hidden}.modal-header{border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.modal-header h3{color:var(--text-strong);font-size:16px;font-weight:600}.modal-body{padding:20px;overflow-y:auto}.modal-close{width:36px;min-width:36px;height:36px;color:var(--text-muted);padding:0;font-size:18px}.detail-row{padding:6px 0;font-size:14px}.detail-row strong{color:var(--text-strong);margin-right:6px;font-weight:600}.detail-section{margin-top:18px}.detail-section h4{text-transform:uppercase;color:var(--text-muted);letter-spacing:.06em;margin-bottom:8px;font-size:11px;font-weight:600}.detail-checklist{padding:0;list-style:none}.detail-checklist li{align-items:center;gap:8px;padding:4px 0;font-size:14px;display:flex}.detail-checklist li.done{color:var(--success)}.detail-checklist li.undone{color:var(--text-muted);text-decoration:line-through}.detail-signature{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-md);max-width:280px;padding:8px}.loc-tabs{background:var(--surface-3);border:1px solid var(--border);border-radius:var(--radius-md);-webkit-overflow-scrolling:touch;gap:2px;margin-bottom:16px;padding:3px;display:flex;overflow-x:auto}.loc-tab{min-width:72px;color:var(--text-muted);border-radius:var(--radius-sm);white-space:nowrap;flex:1;min-height:34px;padding:8px 10px;font-size:13px;font-weight:500;transition:background .12s,color .12s}.loc-tab.active{background:var(--surface);color:var(--text-strong);box-shadow:var(--shadow-xs)}.template-list{flex-direction:column;gap:10px;display:flex}.template-item{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);padding:14px}.template-item-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;display:flex}.template-item-key{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-variant-numeric:tabular-nums;font-size:11px;font-weight:600}.template-translations{grid-template-columns:1fr 1fr;gap:8px 10px;display:grid}.template-translations .form-group{margin-bottom:0}.template-translations .filter-label{font-size:10px}.queue-badge{background:var(--warning-bg);border:1px solid var(--warning-border);color:var(--warning);border-radius:var(--radius-md);justify-content:space-between;align-items:center;gap:12px;padding:8px 12px;font-size:13px;font-weight:500;display:flex}.install-prompt{background:var(--surface);border:1px solid var(--primary-border);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;padding:12px 16px;font-size:14px;display:flex}.state-card{background:var(--surface);border:1px dashed var(--border-strong);border-radius:var(--radius-lg);text-align:center;color:var(--text-muted);padding:36px 20px}.state-icon{color:var(--text-subtle);margin-bottom:8px;font-size:28px}.state-loading{border-style:solid}.state-error{border-color:var(--danger-border);background:var(--danger-bg);color:var(--danger)}@media (max-width:640px){body{font-size:14px}.container{padding:16px 12px 32px}.header-content{flex-direction:column;align-items:stretch;gap:8px;padding:10px 12px}.header-actions{justify-content:flex-start}.card{border-radius:var(--radius-md);padding:16px}.tabs{width:100%;margin-bottom:16px;display:flex}.tab{flex:1;padding:8px 6px}.nfc-icon{width:72px;height:72px}.photo-upload{padding:22px 12px}.filter-fields{flex-direction:column;align-items:stretch}.filter-field{min-width:0}.modal-backdrop{padding:0}.modal-panel{border-radius:0;max-width:100vw;height:100vh;max-height:100vh}.modal-body{padding:16px}.template-translations{grid-template-columns:1fr}.scan-mode-tab{padding:8px 6px;font-size:12px}.record-grid{grid-template-columns:1fr}}@media (max-width:400px){.location-grid{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.admin-badge{letter-spacing:.04em;text-transform:uppercase;color:var(--primary);background:var(--primary-bg);border:1px solid var(--primary-border);border-radius:var(--radius-full);align-items:center;margin-left:8px;padding:2px 8px;font-size:11px;font-weight:600;line-height:1.6;display:inline-flex}.qr-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;display:grid}.qr-grid-item{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;align-items:center;gap:8px;padding:16px;display:flex}.qr-image{aspect-ratio:1;border-radius:var(--radius-sm);background:#fff;width:100%;max-width:200px;height:auto}.qr-grid-label{color:var(--text-strong);align-items:center;gap:6px;font-size:14px;font-weight:600;display:inline-flex}.qr-grid-key{font-family:var(--font-mono);color:var(--text-muted);letter-spacing:.04em;font-size:11px}.qr-grid-download{margin-top:4px}@media print{@page{margin:12mm}body.qr-print-mode{background:#fff}body.qr-print-mode>:not(.header):not(.container),body.qr-print-mode .header,body.qr-print-mode .container>:not(.panel),body.qr-print-mode .panel>:not(.qr-codes-card){display:none!important}body.qr-print-mode .qr-codes-card{box-shadow:none;border:none;padding:0}body.qr-print-mode .qr-codes-card>:not(.qr-print-area){display:none!important}body.qr-print-mode .qr-grid{page-break-inside:auto;grid-template-columns:1fr 1fr;gap:12mm}body.qr-print-mode .qr-grid-item{break-inside:avoid;border:1px solid #000;padding:8mm}body.qr-print-mode .qr-image{max-width:60mm}body.qr-print-mode .qr-grid-download{display:none!important}body.qr-print-mode .qr-grid-label{font-size:14pt}body.qr-print-mode .qr-grid-key{font-size:9pt}}
