*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: system-ui, -apple-system, sans-serif; background: #f0f2f5; color: #1a1a2e; padding: 24px 16px; min-height: 100vh; } .container { max-width: 880px; margin: 0 auto; } h1 { font-size: 1.55rem; font-weight: 700; margin-bottom: 24px; color: #1a1a2e; } h2 { font-size: 1.05rem; font-weight: 600; color: #333; } /* ---- Panel ---- */ .panel { background: #fff; border-radius: 10px; padding: 24px; margin-bottom: 20px; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08); } /* ---- Field groups ---- */ .field-group { margin-bottom: 20px; } .field-label { display: block; font-weight: 600; font-size: 0.875rem; margin-bottom: 10px; color: #333; } /* ---- Radio cards ---- */ .radio-group { display: flex; gap: 12px; flex-wrap: wrap; } .radio-option { cursor: pointer; flex: 1; min-width: 200px; } .radio-option input[type="radio"] { display: none; } .radio-box { display: block; border: 2px solid #e0e0e0; border-radius: 8px; padding: 14px 16px; transition: border-color 0.15s, background 0.15s; height: 100%; } .radio-option:hover .radio-box { border-color: #a0b4d6; } .radio-option input[type="radio"]:checked + .radio-box { border-color: #4a6fa5; background: #eef3fb; } .radio-box strong { display: block; font-size: 0.9rem; margin-bottom: 4px; } .radio-box small { color: #666; font-size: 0.78rem; word-break: break-all; } /* ---- Buttons ---- */ .btn { display: inline-flex; align-items: center; padding: 9px 20px; border: none; border-radius: 6px; font-size: 0.875rem; font-weight: 600; cursor: pointer; transition: opacity 0.15s; white-space: nowrap; } .btn:hover { opacity: 0.84; } .btn-primary { background: #4a6fa5; color: #fff; } .btn-secondary { background: #e8ecf0; color: #333; } /* ---- Error / hint ---- */ .error-msg { color: #c0392b; font-size: 0.85rem; margin-top: 10px; } .hint { color: #888; font-size: 0.82rem; margin-top: 8px; } /* ---- Building panel ---- */ .building-panel { display: flex; flex-direction: column; align-items: center; padding: 48px 24px; gap: 16px; text-align: center; } .building-panel .building-msg { font-weight: 600; font-size: 1rem; } .spinner { width: 48px; height: 48px; border: 5px solid #dde3ec; border-top-color: #4a6fa5; border-radius: 50%; animation: spin 0.75s linear infinite; flex-shrink: 0; } @keyframes spin { to { transform: rotate(360deg); } } /* ---- Query panel ---- */ .query-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .search-row { display: flex; gap: 10px; } .search-input { flex: 1; padding: 9px 14px; border: 1px solid #ccc; border-radius: 6px; font-size: 0.9rem; outline: none; transition: border-color 0.15s; } .search-input:focus { border-color: #4a6fa5; } /* ---- Advanced SQL ---- */ .sql-details { margin: 16px 0 0; border: 1px solid #e0e0e0; border-radius: 8px; padding: 12px 14px; } .sql-details summary { cursor: pointer; font-weight: 600; font-size: 0.84rem; color: #555; user-select: none; } .sql-details textarea { display: block; width: 100%; margin-top: 10px; padding: 10px; font-family: 'Courier New', Courier, monospace; font-size: 0.83rem; border: 1px solid #ddd; border-radius: 6px; resize: vertical; outline: none; transition: border-color 0.15s; } .sql-details textarea:focus { border-color: #4a6fa5; } .sql-details .btn { margin-top: 8px; } /* ---- Results ---- */ #results-area { margin-top: 20px; } .table-wrap { overflow-x: auto; border-radius: 6px; border: 1px solid #e0e0e0; } .results-table { width: 100%; border-collapse: collapse; font-size: 0.85rem; } .results-table th, .results-table td { padding: 8px 12px; border-bottom: 1px solid #e8e8e8; text-align: left; vertical-align: top; max-width: 420px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .results-table th { background: #f5f7fa; font-weight: 600; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.03em; border-bottom: 2px solid #dde3ec; } .results-table tr:last-child td { border-bottom: none; } .results-table tbody tr:hover td { background: #f9fbff; } .row-count { margin-top: 8px; } /* ---- File input ---- */ input[type="file"] { font-size: 0.86rem; }