* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
min-height: 100vh;
padding: 20px;
color: #333;
}
.container {
max-width: 1000px;
margin: 0 auto;
background: white;
border-radius: 12px;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 40px 20px;
text-align: center;
}
header h1 {
font-size: 32px;
margin-bottom: 8px;
}
header p {
font-size: 16px;
opacity: 0.9;
margin-bottom: 20px;
}
.tier-badge {
display: inline-block;
background: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(255, 255, 255, 0.4);
padding: 6px 12px;
border-radius: 20px;
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
}
main {
padding: 40px 20px;
}
.about-section {
margin-bottom: 40px;
padding: 24px;
background: #f9f9f9;
border-radius: 8px;
}
.about-section h2 {
font-size: 20px;
margin-bottom: 12px;
color: #333;
}
.about-section p {
font-size: 15px;
line-height: 1.6;
color: #555;
margin-bottom: 12px;
}
.about-section p:last-child {
margin-bottom: 0;
}
.search-section {
margin-bottom: 30px;
}
.search-controls {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
margin-bottom: 20px;
}
@media (max-width: 600px) {
.search-controls {
grid-template-columns: 1fr;
}
}
input, select, button {
padding: 12px 16px;
border: 2px solid #e0e0e0;
border-radius: 8px;
font-size: 14px;
font-family: inherit;
transition: all 0.2s;
}
input:focus, select:focus {
outline: none;
border-color: #667eea;
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
}
button {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border: none;
cursor: pointer;
font-weight: 600;
grid-column: 1 / -1;
}
button:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
}
button:active {
transform: translateY(0);
}
.free-tier-note {
background: #e3f2fd;
border-left: 2px solid #2196f3;
padding: 12px 16px;
border-radius: 4px;
margin-bottom: 20px;
font-size: 14px;
color: #1565c0;
}
.results {
margin-top: 30px;
}
.results-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 15px;
border-bottom: 2px solid #f0f0f0;
}
.results-header h2 {
font-size: 18px;
color: #333;
}
.result-count {
background: #f5f5f5;
padding: 4px 12px;
border-radius: 20px;
font-size: 13px;
font-weight: 600;
color: #666;
}
.inspection-card {
background: #f9f9f9;
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 20px;
margin-bottom: 15px;
transition: all 0.2s;
}
.inspection-card:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
border-color: #d0d0d0;
}
.card-header {
display: flex;
justify-content: space-between;
align-items: start;
margin-bottom: 12px;
}
.establishment-name {
font-size: 18px;
font-weight: 600;
color: #333;
margin-bottom: 4px;
}
.establishment-type {
font-size: 13px;
color: #999;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.grade-badge {
display: inline-flex;
align-items: center;
justify-content: center;
width: 50px;
height: 50px;
border-radius: 50%;
font-weight: bold;
font-size: 20px;
color: white;
}
.grade-a {
background: linear-gradient(135deg, #4caf50 0%, #45a049 100%);
}
.grade-b {
background: linear-gradient(135deg, #ff9800 0%, #e68900 100%);
}
.grade-c {
background: linear-gradient(135deg, #f44336 0%, #da190b 100%);
}
.card-details {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 15px;
margin-bottom: 12px;
font-size: 14px;
}
.detail-item {
display: flex;
flex-direction: column;
}
.detail-label {
font-weight: 600;
color: #666;
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 4px;
}
.detail-value {
color: #333;
}
.violations-badge {
display: inline-block;
background: #ffe0e0;
color: #c62828;
padding: 4px 8px;
border-radius: 4px;
font-size: 12px;
font-weight: 600;
margin-top: 8px;
}
.violations-badge.critical {
background: #ffcdd2;
color: #b71c1c;
}
.empty-state {
text-align: center;
padding: 60px 20px;
color: #999;
}
.empty-state h3 {
font-size: 18px;
margin-bottom: 8px;
color: #666;
}
.loading {
text-align: center;
padding: 40px;
color: #999;
}
.error {
background: #ffebee;
border-left: 2px solid #f44336;
padding: 12px 16px;
border-radius: 4px;
color: #c62828;
margin-bottom: 20px;
}
footer {
background: #f5f5f5;
padding: 20px;
text-align: center;
font-size: 13px;
color: #999;
border-top: 1px solid #e0e0e0;
}
.source-link {
color: #667eea;
text-decoration: none;
font-size: 12px;
margin-top: 8px;
}
.source-link:hover {
text-decoration: underline;
}
What is InspectDB?
InspectDB normalizes restaurant health inspection records and violation data from 3,000+ US county health departments into one searchable database. Find inspection results, violation history, and food safety grades for restaurants by name or location. All data comes directly from official county health department records—no guessing, no aggregation.
Free access covers Los Angeles and San Francisco counties. Developers and analysts can query complete inspection history, violation details, and trend data via our API.
✓ Free tier includes Los Angeles and San Francisco counties. Advanced features and nationwide access available.
Data current as of July 25, 2026. Source: County Health Departments nationwide.