/* styles.css */ /* ─── RESET & BASE ─────────────────────────────────────────────────────────── */ * { box-sizing: border-box; } body { margin: 0; padding: 0; font-family: Arial, sans-serif; background-color: #eeeeee; color: #333; height: 100vh; overflow: hidden; } /* ─── HEADER & NAV ─────────────────────────────────────────────────────────── */ .main-header { background-color: #232F3E; display: flex; align-items: center; padding: 0.5rem 1rem; position: fixed; top: 0; left: 0; right: 0; z-index: 1000; } .logo { height: 40px; margin-right: 1rem; } .header-title { color: #fff; font-size: 1.2rem; font-weight: bold; margin-right: auto; } .nav-btn { background-color: #FF9900; color: #111; border: none; border-radius: 5px; padding: 0.5rem 1rem; margin-left: 0.5rem; cursor: pointer; font-weight: bold; } .nav-btn:hover { background-color: #e48f00; } /* ─── PAGE WRAPPER ─────────────────────────────────────────────────────────── */ .page-container { position: absolute; top: 70px; /* height of header */ left: 0; right: 0; bottom: 0; overflow: auto; padding: 1rem; background: #fff; } /* ─── INPUT/FORM STYLES ────────────────────────────────────────────────────── */ .form-input, .form-textarea, select { width: 90%; margin: 0.5rem auto; display: block; padding: 0.75rem; border: 1px solid #ccc; border-radius: 6px; font-size: 1rem; } fieldset { border: 1px solid #ccc; border-radius: 6px; margin: 1rem 0; padding: 1rem; } legend { padding: 0 0.5rem; font-weight: bold; } .big-button { background-color: #28a745; color: white; padding: 0.75rem 1.5rem; border: none; border-radius: 6px; cursor: pointer; font-size: 1rem; margin: 1rem auto; display: block; } .big-button:hover { background-color: #218838; } /* ─── HEATMAP PAGE ─────────────────────────────────────────────────────────── */ #heatmap-container { width: 100%; height: 100%; position: relative; overflow: auto; background-color: #f9f9f9; } .map-svg-container { min-width: 2000px; min-height: 400px; transform-origin: 0 0; cursor: grab; } .map-svg-container:active { cursor: grabbing; } .dock-door { fill: #ccc; stroke: #999; stroke-width: 1; cursor: pointer; } .dock-door:hover { stroke: #FF9900; stroke-width: 2; } .area-rect { fill: rgba(200,200,200,0.3); stroke: #999; stroke-width: 1; } .area-rect label { font-size: 0.85rem; font-weight: bold; } .floor-selector { position: absolute; top: 1rem; right: 1rem; background: rgba(255,255,255,0.9); padding: 0.5rem; border-radius: 6px; box-shadow: 0 1px 4px rgba(0,0,0,0.2); } /* ─── TRENDS PAGE ───────────────────────────────────────────────────────────── */ /* make this container a flex column filling available space */ .page-container.trends { display: flex; flex-direction: column; height: calc(100% - 0); /* full height under header */ } /* Heading & controls take auto height */ .page-container.trends > h1, .trends-controls, .trends-metrics { flex: 0 0 auto; margin: 0 0 1rem 0; } /* Chart: fixed 50% of container */ .chart-container { flex: 0 0 50%; position: relative; } .chart-container canvas { width: 100% !important; height: 100% !important; } /* Table: fixed 45% of container */ .table-wrapper { flex: 0 0 45%; overflow: auto; border: 1px solid #ddd; } .table-wrapper table { width: 100%; border-collapse: collapse; table-layout: fixed; } .table-wrapper th, .table-wrapper td { padding: 8px; text-align: center; border: 1px solid #ccc; font-size: 0.95rem; } .table-wrapper thead th { background: #f2f2f2; position: sticky; top: 0; z-index: 2; cursor: pointer; user-select: none; } /* Zebra striping */ .table-wrapper tbody tr:nth-child(even) { background: #fafafa; } /* Sort arrow indicators */ .sortable::after { content: '▲▼'; font-size: 0.6em; margin-left: 4px; color: #888; } .sortable.asc::after { content: '▲'; } .sortable.desc::after { content: '▼'; } /* ─── RESPONSIVE TWEAKS ─────────────────────────────────────────────────────── */ @media (max-width: 768px) { .nav-btn { padding: 0.4rem 0.8rem; font-size: 0.9rem; } .form-input, .form-textarea, select { width: 100%; } }