/* HerbAPI — Plant Database Stylesheet */ :root { --bg: #faf9f6; --bg-card: #ffffff; --bg-sidebar: #2d3a2e; --text: #1a1a1a; --text-muted: #666; --text-sidebar: #e0e0e0; --accent: #4a7c59; --accent-hover: #3d6b4a; --accent-light: #e8f0ea; --border: #ddd; --radius: 6px; --shadow: 0 1px 3px rgba(0,0,0,0.08); /* Planting calendar colors */ --cal-indoor: #7b68ee; --cal-direct: #3cb371; --cal-transplant: #ff8c00; --cal-glass: #87ceeb; --cal-harvest: #dc143c; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, sans-serif; background: var(--bg); color: var(--text); line-height: 1.6; } a { color: var(--accent); text-decoration: none; } a:hover { text-decoration: underline; } em { font-style: italic; } /* Layout */ .app-layout { display: flex; min-height: 100vh; } .sidebar { width: 220px; background: var(--bg-sidebar); color: var(--text-sidebar); display: flex; flex-direction: column; padding: 1.5rem 0; flex-shrink: 0; position: sticky; top: 0; height: 100vh; } .sidebar-brand { display: flex; align-items: center; gap: 0.75rem; padding: 0 1.25rem 1.5rem; border-bottom: 1px solid rgba(255,255,255,0.1); } .brand-icon { font-size: 1.5rem; } .brand-text-group { display: flex; flex-direction: column; } .brand-text { font-size: 1.1rem; font-weight: 700; letter-spacing: 0.5px; } .brand-sub { font-size: 0.7rem; opacity: 0.6; text-transform: uppercase; letter-spacing: 1px; } .sidebar-nav { display: flex; flex-direction: column; padding: 1rem 0; } .nav-link { display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 1.25rem; color: var(--text-sidebar); text-decoration: none; transition: background 0.15s; font-size: 0.9rem; } .nav-link:hover { background: rgba(255,255,255,0.08); text-decoration: none; } .sidebar-user { margin-top: auto; padding: 1rem 1.25rem; border-top: 1px solid rgba(255,255,255,0.1); display: flex; flex-direction: column; gap: 0.5rem; font-size: 0.85rem; } .user-name { font-weight: 500; } .logout-link, .login-link { color: rgba(255,255,255,0.6); font-size: 0.8rem; } .logout-link:hover, .login-link:hover { color: #fff; } /* Content */ .content { flex: 1; padding: 2rem 3rem; max-width: 1200px; } .page { animation: fadeIn 0.2s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } } h1 { font-size: 1.8rem; margin-bottom: 0.5rem; font-weight: 600; } h2 { font-size: 1.3rem; margin: 2rem 0 0.75rem; font-weight: 600; color: var(--accent); } .subtitle { color: var(--text-muted); margin-bottom: 1.5rem; } .name-common { color: var(--text-muted); font-size: 1rem; margin-bottom: 0.25rem; } .description { margin: 1rem 0; line-height: 1.7; } /* Search */ .search-bar { display: flex; gap: 0.5rem; margin-bottom: 1.5rem; } .search-bar input { flex: 1; padding: 0.6rem 1rem; border: 1px solid var(--border); border-radius: var(--radius); font-size: 0.95rem; background: var(--bg-card); transition: border-color 0.15s; } .search-bar input:focus { outline: none; border-color: var(--accent); } .search-bar button { padding: 0.6rem 1.2rem; background: var(--accent); color: #fff; border: none; border-radius: var(--radius); cursor: pointer; font-size: 0.9rem; } .search-bar button:hover { background: var(--accent-hover); } /* Cards */ .card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 1rem; } .plant-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem; box-shadow: var(--shadow); transition: box-shadow 0.15s, transform 0.15s; } .plant-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); transform: translateY(-1px); } .card-scientific { font-size: 1rem; display: block; margin-bottom: 0.25rem; } .card-common { font-size: 0.85rem; color: var(--text-muted); } /* Tables */ .table-wrap { overflow-x: auto; } table { width: 100%; border-collapse: collapse; background: var(--bg-card); border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow); } thead { background: var(--accent-light); } th { text-align: left; padding: 0.75rem 1rem; font-weight: 600; font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.5px; color: var(--accent); } td { padding: 0.6rem 1rem; border-top: 1px solid var(--border); font-size: 0.9rem; } tr:hover td { background: var(--accent-light); } /* Badges */ .badges { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 0.75rem 0; } .badge { display: inline-block; padding: 0.2rem 0.6rem; border-radius: 3px; font-size: 0.75rem; font-weight: 500; background: var(--accent-light); color: var(--accent); } .badge.organic { background: #e8f5e9; color: #2e7d32; } .badge.demeter { background: #fff3e0; color: #e65100; } /* Info grid (species detail) */ .info-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 0.75rem; margin: 1rem 0; } .info-item { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 0.6rem 0.8rem; } .info-item.badge { background: var(--accent-light); border-color: var(--accent); color: var(--accent); font-weight: 600; text-align: center; } .info-label { display: block; font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); margin-bottom: 0.15rem; } .info-value { font-size: 0.95rem; font-weight: 500; } /* Planting Calendar */ .planting-calendar { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem; overflow-x: auto; box-shadow: var(--shadow); } .cal-row { display: grid; grid-template-columns: 120px repeat(12, 1fr); gap: 2px; margin-bottom: 2px; } .cal-header { font-size: 0.75rem; font-weight: 600; color: var(--text-muted); text-align: center; } .cal-label { font-size: 0.8rem; padding: 0.3rem 0.5rem; white-space: nowrap; } .cal-cell { height: 28px; border-radius: 3px; background: #f0f0f0; text-align: center; line-height: 28px; } .cal-cell.active.cal-indoor { background: var(--cal-indoor); } .cal-cell.active.cal-direct { background: var(--cal-direct); } .cal-cell.active.cal-transplant { background: var(--cal-transplant); } .cal-cell.active.cal-glass { background: var(--cal-glass); } .cal-cell.active.cal-harvest { background: var(--cal-harvest); } /* Pagination */ .pagination { display: flex; align-items: center; gap: 1rem; margin-top: 1.5rem; justify-content: center; } .pagination button { padding: 0.4rem 1rem; border: 1px solid var(--border); border-radius: var(--radius); background: var(--bg-card); cursor: pointer; font-size: 0.85rem; } .pagination button:hover:not(:disabled) { background: var(--accent-light); } .pagination button:disabled { opacity: 0.4; cursor: default; } .pagination span { font-size: 0.85rem; color: var(--text-muted); } /* Search results */ .result-count { color: var(--text-muted); margin-bottom: 1rem; font-size: 0.9rem; } .search-results { display: flex; flex-direction: column; gap: 0.75rem; } .search-result { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 0.75rem 1rem; display: flex; align-items: baseline; gap: 0.75rem; flex-wrap: wrap; box-shadow: var(--shadow); } .result-type { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.5px; flex-shrink: 0; } .result-desc { width: 100%; color: var(--text-muted); font-size: 0.85rem; } /* 404 */ .not-found { text-align: center; padding: 4rem 0; } .not-found h1 { font-size: 4rem; color: var(--text-muted); } /* Empty states */ .empty { color: var(--text-muted); font-style: italic; padding: 1rem 0; } .error { color: #c62828; background: #ffebee; padding: 0.5rem 1rem; border-radius: var(--radius); } /* Responsive */ @media (max-width: 768px) { .sidebar { width: 60px; overflow: hidden; } .sidebar-brand, .sidebar-user, .brand-text-group { display: none; } .nav-label { display: none; } .content { padding: 1.5rem; } .card-grid { grid-template-columns: 1fr; } .info-grid { grid-template-columns: 1fr 1fr; } }