:root{--3s-blue: #2563eb;--3s-blue-600: #1d4ed8;--3s-blue-50: #eff6ff;--3s-green: #10b981;--3s-green-700: #047857;--3s-green-50: #ecfdf5}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#f5f6f8;color:#1f2328}.app{display:flex;min-height:100vh}.sidebar{width:240px;background:#1f2937;color:#e5e7eb;padding:18px 14px 120px;position:relative}.sidebar h1{font-size:18px;margin:0 0 18px}.sidebar h3{color:#9ca3af;font-size:11px;text-transform:uppercase;margin:18px 0 6px;letter-spacing:.06em}.sidebar button{display:block;width:100%;text-align:left;background:transparent;border:0;color:#d1d5db;padding:8px 10px;border-radius:6px;margin:1px 0;cursor:pointer;font-size:13px}.sidebar button:hover{background:#374151}.sidebar button.active{background:#2563eb;color:#fff}.sidebar button .count{float:right;opacity:.7;font-size:11px}.main{flex:1;padding:22px 28px;overflow:auto}.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:18px;flex-wrap:wrap}.toolbar input[type=text]{padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;min-width:220px}.toolbar select{padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;background:#fff}.toolbar .spacer{flex:1}.btn{display:inline-flex;align-items:center;gap:6px;background:var(--3s-blue);color:#fff;border:0;padding:8px 14px;border-radius:6px;cursor:pointer;font-weight:500;font-size:14px;font-family:inherit;line-height:1.2;text-decoration:none}.btn:hover{background:var(--3s-blue-600)}.btn.secondary{background:#fff;color:#1f2937;border:1px solid #d1d5db}.btn.secondary:hover{background:#f9fafb}.btn.danger{background:#dc2626}.btn.success{background:var(--3s-green)}.btn.success:hover{background:var(--3s-green-700)}.btn.ghost{background:transparent;color:var(--3s-blue);border:0;padding:4px 8px}.btn.ghost:hover{background:#eff6ff}.btn[aria-disabled=true],.btn:disabled{opacity:.6;cursor:not-allowed}table.contacts{width:100%;background:#fff;border-collapse:collapse;border-radius:10px;overflow:hidden;box-shadow:0 1px 2px #0000000d}table.contacts th,table.contacts td{padding:11px 14px;text-align:left;font-size:13px;border-bottom:1px solid #f1f3f5}table.contacts th{background:#f9fafb;color:#4b5563;font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.04em}table.contacts tr:hover td{background:#f9fafb;cursor:pointer}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:500}.badge.gray{background:#e5e7eb;color:#374151}.badge.green{background:#d1fae5;color:#065f46}.badge.blue{background:#dbeafe;color:#1e40af}.badge.yellow{background:#fef3c7;color:#92400e}.badge.red{background:#fee2e2;color:#991b1b}.badge.purple{background:#ede9fe;color:#5b21b6}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:50;padding:20px}.modal{background:#fff;border-radius:12px;max-width:720px;width:100%;padding:22px;max-height:92vh;overflow:auto}.modal h2{margin-top:0}.field{margin-bottom:12px}.field label{display:block;font-size:12px;color:#4b5563;margin-bottom:4px;font-weight:500}.field input,.field textarea,.field select{width:100%;padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;font-family:inherit}.field textarea{min-height:90px;resize:vertical}.row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.detail-grid{display:grid;grid-template-columns:140px 1fr;gap:8px 16px;font-size:14px;margin-bottom:16px}.detail-grid div:nth-child(odd){color:#6b7280}.tabs{display:flex;gap:4px;border-bottom:1px solid #e5e7eb;margin-bottom:14px}.tabs button{background:transparent;border:0;padding:8px 14px;cursor:pointer;color:#6b7280;border-bottom:2px solid transparent;font-size:13px}.tabs button.active{color:#2563eb;border-bottom-color:#2563eb;font-weight:500}.history-row{padding:10px 0;border-bottom:1px solid #f1f3f5;font-size:13px}.history-row:last-child{border-bottom:0}.history-row .when{color:#9ca3af;font-size:11px}.dropzone{border:2px dashed #cbd5e1;border-radius:10px;padding:30px;text-align:center;color:#64748b;cursor:pointer;background:#f8fafc}.dropzone.drag{border-color:#2563eb;background:#eff6ff}.preview{max-width:220px;max-height:140px;border-radius:8px;margin-top:10px}.error{background:#fee2e2;color:#991b1b;padding:10px 12px;border-radius:6px;font-size:13px;margin-bottom:12px}.success{background:#d1fae5;color:#065f46;padding:10px 12px;border-radius:6px;font-size:13px;margin-bottom:12px}.spinner{display:inline-block;width:16px;height:16px;border:2px solid #93c5fd;border-top-color:#2563eb;border-radius:50%;animation:spin .8s linear infinite;vertical-align:middle}@keyframes spin{to{transform:rotate(360deg)}}code{background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:12px}details summary{outline:none}.seg{display:inline-flex;border:1px solid #d1d5db;border-radius:6px;overflow:hidden}.seg button{background:#fff;border:0;padding:5px 12px;font-size:12px;cursor:pointer;color:#4b5563;font-family:inherit}.seg button+button{border-left:1px solid #d1d5db}.seg button.on{background:var(--3s-blue);color:#fff}.tpl-preview{min-height:380px;max-height:460px;overflow-y:auto;border:1px solid #d1d5db;border-radius:6px;padding:28px 32px;background:#fff;color:#111827;font-family:Georgia,Times New Roman,serif;font-size:14px;line-height:1.6}.tpl-preview h1{font-size:22px;margin:0 0 12px}.tpl-preview h2{font-size:16px;margin:20px 0 8px;border-bottom:1px solid #e5e7eb;padding-bottom:4px}.tpl-preview table{max-width:100%}.tok-unknown{background:#fef08a;color:#854d0e;border:1px dashed #ca8a04;border-radius:3px;padding:0 4px;font-family:monospace;font-size:12px;font-weight:600}.tok-summary{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}.tok-chip{font-size:11px;font-weight:600;padding:3px 8px;border-radius:999px}.tok-chip.ok{background:#dcfce7;color:#166534}.tok-chip.declared{background:#dbeafe;color:#1e40af}.tok-chip.bad{background:#fee2e2;color:#991b1b}.notice-info{background:#eff6ff;color:#1e40af;padding:10px 12px;border-radius:6px;font-size:13px;margin-bottom:12px}.notice-ok{background:#dcfce7;color:#166534;padding:10px 12px;border-radius:6px;font-size:13px;margin-bottom:12px}
