AlanCantoFTW commited on
Commit
f36a71d
·
verified ·
1 Parent(s): 1794017

Add comprehensive mobile-responsive styling and touch controls

Browse files
Files changed (1) hide show
  1. index.html +222 -8
index.html CHANGED
@@ -547,7 +547,8 @@
547
  background: var(--bg-card);
548
  border: 1px solid var(--border);
549
  border-radius: 20px;
550
- overflow: hidden;
 
551
  margin-bottom: 80px;
552
  }
553
 
@@ -556,6 +557,7 @@
556
  border-collapse: collapse;
557
  text-align: left;
558
  font-size: 14px;
 
559
  }
560
 
561
  th {
@@ -567,11 +569,13 @@
567
  font-size: 11px;
568
  letter-spacing: 0.8px;
569
  border-bottom: 1px solid var(--border);
 
570
  }
571
 
572
  td {
573
  padding: 18px 20px;
574
  border-bottom: 1px solid rgba(255, 255, 255, 0.04);
 
575
  }
576
 
577
  tr:hover td {
@@ -595,6 +599,32 @@
595
  color: #ffd700;
596
  }
597
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
598
  /* FOOTER */
599
  footer {
600
  border-top: 1px solid var(--border);
@@ -608,10 +638,180 @@
608
  text-decoration: none;
609
  }
610
 
 
611
  @media (max-width: 900px) {
612
- .hero h2 { font-size: 38px; }
613
- .stats-grid { grid-template-columns: repeat(2, 1fr); }
614
- .sim-output-grid { grid-template-columns: 1fr; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
615
  }
616
  </style>
617
  </head>
@@ -637,7 +837,7 @@
637
 
638
  <main class="container">
639
  <!-- DIRECT SPACE LAUNCH BANNER -->
640
- <div style="background: linear-gradient(135deg, rgba(13, 24, 45, 0.95), rgba(6, 15, 30, 0.95)); border: 1px solid var(--border-accent); border-radius: 14px; padding: 16px 24px; margin-top: 24px; margin-bottom: 24px; display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; box-shadow: 0 4px 20px rgba(0, 229, 255, 0.12);">
641
  <div style="display: flex; align-items: center; gap: 14px;">
642
  <span style="font-size: 26px;">🏎️</span>
643
  <div>
@@ -824,6 +1024,9 @@
824
  <p>Empirical performance across 400 test cases and 2,000 calibrated decisions.</p>
825
  </div>
826
 
 
 
 
827
  <div class="table-container">
828
  <table>
829
  <thead>
@@ -1152,17 +1355,28 @@
1152
  spawnHazard(car.lane, 860);
1153
  }
1154
 
1155
- // Canvas click to spawn hazard in specific lane
1156
- canvas.addEventListener('click', (e) => {
1157
  const rect = canvas.getBoundingClientRect();
1158
  const scaleY = canvas.height / rect.height;
1159
- const clickY = (e.clientY - rect.top) * scaleY;
1160
  let clickedLane = 1;
1161
  if (clickY < 110) clickedLane = 0;
1162
  else if (clickY > 210) clickedLane = 2;
1163
  spawnHazard(clickedLane, 860);
 
 
 
 
1164
  });
1165
 
 
 
 
 
 
 
 
1166
  function updateHud() {
1167
  const latEl = document.getElementById('hud-latency');
1168
  const choEl = document.getElementById('hud-choice');
 
547
  background: var(--bg-card);
548
  border: 1px solid var(--border);
549
  border-radius: 20px;
550
+ overflow-x: auto;
551
+ -webkit-overflow-scrolling: touch;
552
  margin-bottom: 80px;
553
  }
554
 
 
557
  border-collapse: collapse;
558
  text-align: left;
559
  font-size: 14px;
560
+ min-width: 620px;
561
  }
562
 
563
  th {
 
569
  font-size: 11px;
570
  letter-spacing: 0.8px;
571
  border-bottom: 1px solid var(--border);
572
+ white-space: nowrap;
573
  }
574
 
575
  td {
576
  padding: 18px 20px;
577
  border-bottom: 1px solid rgba(255, 255, 255, 0.04);
578
+ white-space: nowrap;
579
  }
580
 
581
  tr:hover td {
 
599
  color: #ffd700;
600
  }
601
 
602
+ .table-swipe-hint {
603
+ display: none;
604
+ align-items: center;
605
+ gap: 6px;
606
+ font-size: 11px;
607
+ color: var(--cyan);
608
+ margin-bottom: 10px;
609
+ justify-content: flex-end;
610
+ }
611
+
612
+ /* DIRECT SPACE LAUNCH BANNER */
613
+ .space-launch-banner {
614
+ background: linear-gradient(135deg, rgba(13, 24, 45, 0.95), rgba(6, 15, 30, 0.95));
615
+ border: 1px solid var(--border-accent);
616
+ border-radius: 14px;
617
+ padding: 16px 24px;
618
+ margin-top: 24px;
619
+ margin-bottom: 24px;
620
+ display: flex;
621
+ justify-content: space-between;
622
+ align-items: center;
623
+ gap: 16px;
624
+ flex-wrap: wrap;
625
+ box-shadow: 0 4px 20px rgba(0, 229, 255, 0.12);
626
+ }
627
+
628
  /* FOOTER */
629
  footer {
630
  border-top: 1px solid var(--border);
 
638
  text-decoration: none;
639
  }
640
 
641
+ /* COMPREHENSIVE RESPONSIVE DESIGN & MOBILE LAYOUT */
642
  @media (max-width: 900px) {
643
+ .hero h2 { font-size: 40px; letter-spacing: -1px; }
644
+ .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 14px; }
645
+ .sim-output-grid { grid-template-columns: 1fr; gap: 14px; }
646
+ .simulator-card, .agent-sim-card { padding: 26px 20px; }
647
+ }
648
+
649
+ @media (max-width: 768px) {
650
+ .container { padding: 0 16px; }
651
+
652
+ header { padding: 16px 0; }
653
+ .nav-inner {
654
+ flex-direction: column;
655
+ gap: 14px;
656
+ align-items: center;
657
+ text-align: center;
658
+ }
659
+ .brand { justify-content: center; }
660
+ .nav-links {
661
+ width: 100%;
662
+ justify-content: center;
663
+ flex-wrap: wrap;
664
+ gap: 8px;
665
+ }
666
+ .nav-btn {
667
+ padding: 8px 14px;
668
+ font-size: 12px;
669
+ }
670
+
671
+ .space-launch-banner {
672
+ flex-direction: column;
673
+ align-items: stretch;
674
+ text-align: center;
675
+ padding: 16px;
676
+ }
677
+ .space-launch-banner > div {
678
+ flex-direction: column;
679
+ text-align: center;
680
+ }
681
+ .space-launch-banner .run-btn {
682
+ width: 100%;
683
+ justify-content: center;
684
+ }
685
+
686
+ .hero { padding: 48px 0 32px; }
687
+ .hero h2 { font-size: 32px; line-height: 1.2; }
688
+ .hero-sub { font-size: 15px; margin-bottom: 24px; }
689
+ .creator-attestation {
690
+ flex-direction: column;
691
+ gap: 4px;
692
+ font-size: 12px;
693
+ padding: 10px 14px;
694
+ text-align: center;
695
+ margin-bottom: 32px;
696
+ }
697
+
698
+ .stats-grid {
699
+ grid-template-columns: repeat(2, 1fr);
700
+ gap: 10px;
701
+ margin-bottom: 48px;
702
+ }
703
+ .stat-card { padding: 18px 12px; border-radius: 12px; }
704
+ .stat-num { font-size: 26px; }
705
+ .stat-label { font-size: 10px; letter-spacing: 0.5px; }
706
+
707
+ .section-header { margin-bottom: 28px; }
708
+ .section-header h3 { font-size: 24px; }
709
+ .section-header p { font-size: 13px; }
710
+
711
+ .simulator-card, .agent-sim-card {
712
+ padding: 18px 14px;
713
+ border-radius: 16px;
714
+ margin-bottom: 48px;
715
+ }
716
+ .sim-top {
717
+ flex-direction: column;
718
+ align-items: stretch;
719
+ gap: 12px;
720
+ }
721
+ .sim-title { font-size: 17px; }
722
+ .sim-controls {
723
+ display: grid;
724
+ grid-template-columns: repeat(2, 1fr);
725
+ gap: 8px;
726
+ width: 100%;
727
+ }
728
+ .scenario-btn {
729
+ text-align: center;
730
+ padding: 9px 8px;
731
+ font-size: 11px;
732
+ }
733
+
734
+ .sim-input-box {
735
+ font-size: 12px;
736
+ padding: 12px;
737
+ margin-bottom: 16px;
738
+ }
739
+
740
+ .sim-run-bar {
741
+ flex-direction: column;
742
+ align-items: stretch;
743
+ gap: 14px;
744
+ padding-bottom: 16px;
745
+ margin-bottom: 20px;
746
+ }
747
+ .run-btn {
748
+ width: 100%;
749
+ justify-content: center;
750
+ padding: 13px 20px;
751
+ font-size: 13px;
752
+ }
753
+ .sim-meta-tags {
754
+ flex-direction: column;
755
+ gap: 6px;
756
+ width: 100%;
757
+ }
758
+ .meta-tag {
759
+ text-align: center;
760
+ font-size: 11px;
761
+ padding: 6px 10px;
762
+ }
763
+
764
+ /* Highway Sim Controls on mobile */
765
+ .agent-sim-card .sim-top > div:last-child {
766
+ width: 100%;
767
+ flex-direction: column;
768
+ align-items: stretch !important;
769
+ gap: 8px !important;
770
+ }
771
+ .sim-mode-toggle {
772
+ width: 100%;
773
+ display: flex;
774
+ }
775
+ .mode-btn {
776
+ flex: 1;
777
+ text-align: center;
778
+ font-size: 11px;
779
+ padding: 8px 6px;
780
+ }
781
+
782
+ .agent-hud {
783
+ grid-template-columns: repeat(2, 1fr);
784
+ gap: 10px;
785
+ padding: 12px;
786
+ }
787
+ .hud-stat-title { font-size: 9px; }
788
+ .hud-stat-val { font-size: 13px; }
789
+
790
+ /* Table responsive scroll */
791
+ .table-container {
792
+ border-radius: 14px;
793
+ margin-bottom: 48px;
794
+ }
795
+ table {
796
+ min-width: 620px;
797
+ font-size: 12px;
798
+ }
799
+ th, td {
800
+ padding: 12px 14px;
801
+ }
802
+
803
+ .table-swipe-hint {
804
+ display: flex !important;
805
+ }
806
+ }
807
+
808
+ @media (max-width: 480px) {
809
+ .hero h2 { font-size: 26px; }
810
+ .badge { font-size: 10px; padding: 4px 10px; }
811
+ .stats-grid { grid-template-columns: 1fr; }
812
+ .sim-controls { grid-template-columns: 1fr; }
813
+ .brand-text h1 { font-size: 18px; }
814
+ .brand-logo { width: 36px; height: 36px; }
815
  }
816
  </style>
817
  </head>
 
837
 
838
  <main class="container">
839
  <!-- DIRECT SPACE LAUNCH BANNER -->
840
+ <div class="space-launch-banner">
841
  <div style="display: flex; align-items: center; gap: 14px;">
842
  <span style="font-size: 26px;">🏎️</span>
843
  <div>
 
1024
  <p>Empirical performance across 400 test cases and 2,000 calibrated decisions.</p>
1025
  </div>
1026
 
1027
+ <div class="table-swipe-hint">
1028
+ <span>⇄ Swipe table horizontally to view full metrics</span>
1029
+ </div>
1030
  <div class="table-container">
1031
  <table>
1032
  <thead>
 
1355
  spawnHazard(car.lane, 860);
1356
  }
1357
 
1358
+ // Canvas click & touch to spawn hazard in specific lane
1359
+ function handleCanvasInteraction(clientX, clientY) {
1360
  const rect = canvas.getBoundingClientRect();
1361
  const scaleY = canvas.height / rect.height;
1362
+ const clickY = (clientY - rect.top) * scaleY;
1363
  let clickedLane = 1;
1364
  if (clickY < 110) clickedLane = 0;
1365
  else if (clickY > 210) clickedLane = 2;
1366
  spawnHazard(clickedLane, 860);
1367
+ }
1368
+
1369
+ canvas.addEventListener('click', (e) => {
1370
+ handleCanvasInteraction(e.clientX, e.clientY);
1371
  });
1372
 
1373
+ canvas.addEventListener('touchstart', (e) => {
1374
+ if (e.touches && e.touches.length > 0) {
1375
+ e.preventDefault();
1376
+ handleCanvasInteraction(e.touches[0].clientX, e.touches[0].clientY);
1377
+ }
1378
+ }, { passive: false });
1379
+
1380
  function updateHud() {
1381
  const latEl = document.getElementById('hud-latency');
1382
  const choEl = document.getElementById('hud-choice');