Skip to content

Commit 0be1305

Browse files
Merge pull request #215 from Context-Engine-AI/feature/new-landing-page
feat(landing): add mobile responsive design with hamburger menu
2 parents 2f0c509 + fbd838e commit 0be1305

2 files changed

Lines changed: 391 additions & 12 deletions

File tree

src/app.scss

Lines changed: 293 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,24 @@ body::before {
693693
to { stroke-dashoffset: 0; }
694694
}
695695

696+
/* Mobile Menu */
697+
.mobile-menu-btn {
698+
display: none;
699+
}
700+
701+
.mobile-menu-overlay {
702+
display: none;
703+
}
704+
705+
.mobile-menu {
706+
display: none;
707+
}
708+
709+
.desktop-only {
710+
display: flex;
711+
}
712+
713+
/* Tablet and below */
696714
@media (max-width: 1024px) {
697715
.hero {
698716
grid-template-columns: 1fr;
@@ -709,6 +727,281 @@ body::before {
709727
.graph-column { width: 140px; }
710728
.footer-content { flex-direction: column; gap: 24px; text-align: center; }
711729
.footer-links { flex-wrap: wrap; justify-content: center; }
730+
.contact-content { grid-template-columns: 1fr; }
731+
.contact-container { padding: 60px 24px; }
732+
}
733+
734+
/* Tablet - show mobile menu button when nav is hidden */
735+
@media (max-width: 1024px) {
736+
.mobile-menu-btn {
737+
display: flex;
738+
}
739+
740+
.desktop-only {
741+
display: none !important;
742+
}
743+
744+
.mobile-menu-overlay {
745+
display: block;
746+
position: fixed;
747+
top: 64px;
748+
left: 0;
749+
right: 0;
750+
bottom: 0;
751+
background: rgba(0, 0, 0, 0.5);
752+
z-index: 200;
753+
backdrop-filter: blur(4px);
754+
}
755+
756+
.mobile-menu {
757+
display: flex;
758+
flex-direction: column;
759+
position: fixed;
760+
top: 64px;
761+
right: 0;
762+
width: 280px;
763+
max-width: 85vw;
764+
height: calc(100vh - 64px);
765+
background: var(--bg-primary);
766+
border-left: 1px solid var(--border);
767+
z-index: 201;
768+
padding: 24px;
769+
gap: 8px;
770+
animation: slideIn 0.2s ease;
771+
}
772+
773+
@keyframes slideIn {
774+
from { transform: translateX(100%); opacity: 0; }
775+
to { transform: translateX(0); opacity: 1; }
776+
}
777+
778+
.mobile-nav-link {
779+
display: flex;
780+
align-items: center;
781+
gap: 12px;
782+
padding: 16px;
783+
font-size: 15px;
784+
color: var(--text-secondary);
785+
text-decoration: none;
786+
border-radius: var(--radius);
787+
transition: all var(--transition);
788+
}
789+
790+
.mobile-nav-link:hover {
791+
background: var(--bg-hover);
792+
color: var(--text-primary);
793+
}
794+
795+
.mobile-menu-cta {
796+
margin-top: auto;
797+
padding-top: 24px;
798+
border-top: 1px solid var(--border);
799+
}
800+
801+
.mobile-menu-cta .btn {
802+
width: 100%;
803+
justify-content: center;
804+
}
805+
}
806+
807+
/* Mobile specific - smaller screens */
808+
@media (max-width: 768px) {
809+
/* Hero adjustments */
810+
.hero {
811+
padding: 40px 16px;
812+
gap: 32px;
813+
}
814+
815+
.hero-title {
816+
font-size: 32px;
817+
line-height: 1.2;
818+
}
819+
820+
.hero-subtitle {
821+
font-size: 15px;
822+
}
823+
824+
.hero-form {
825+
gap: 12px;
826+
}
827+
828+
.hero-form .input {
829+
min-width: unset;
830+
width: 100%;
831+
}
832+
833+
.hero-form .btn {
834+
width: 100%;
835+
justify-content: center;
836+
}
837+
838+
.hero-actions {
839+
flex-direction: column;
840+
gap: 12px;
841+
}
842+
843+
.hero-actions .btn {
844+
width: 100%;
845+
justify-content: center;
846+
}
847+
848+
.hero-stats {
849+
flex-direction: column;
850+
gap: 16px;
851+
}
852+
853+
.stat {
854+
padding: 16px 0;
855+
border-right: none;
856+
border-bottom: 1px solid var(--border);
857+
}
858+
859+
.stat:last-child {
860+
border-bottom: none;
861+
}
862+
863+
/* Code window */
864+
.code-window {
865+
font-size: 12px;
866+
}
867+
868+
.code-content {
869+
padding: 16px;
870+
overflow-x: auto;
871+
}
872+
873+
/* Graph section - vertical layout on mobile */
874+
.graph-section {
875+
padding: 40px 16px;
876+
}
877+
878+
.section-title {
879+
font-size: 28px;
880+
}
881+
882+
.section-subtitle {
883+
font-size: 14px;
884+
margin-bottom: 32px;
885+
}
886+
887+
.graph-container {
888+
padding: 20px;
889+
min-height: auto;
890+
}
891+
892+
.graph-labels {
893+
flex-direction: column;
894+
gap: 0;
895+
padding: 0;
896+
margin-bottom: 16px;
897+
}
898+
899+
.graph-label {
900+
display: none;
901+
}
902+
903+
.graph-content {
904+
flex-direction: column;
905+
gap: 24px;
906+
}
907+
908+
.graph-column {
909+
width: 100%;
910+
}
911+
912+
.graph-column::before {
913+
content: attr(data-label);
914+
display: block;
915+
font-size: 11px;
916+
font-weight: 600;
917+
color: var(--text-muted);
918+
text-transform: uppercase;
919+
letter-spacing: 0.1em;
920+
margin-bottom: 12px;
921+
padding-left: 4px;
922+
}
923+
924+
.graph-column.sources::before { content: 'Raw Sources'; }
925+
.graph-column.processors::before { content: 'Processing'; }
926+
.graph-column.tools::before { content: 'MCP Tools'; }
927+
928+
.graph-node {
929+
padding: 14px 16px;
930+
font-size: 14px;
931+
}
932+
933+
.graph-canvas {
934+
display: none;
935+
}
936+
937+
.graph-footer {
938+
flex-direction: column;
939+
gap: 12px;
940+
margin-top: 20px;
941+
padding-top: 16px;
942+
}
943+
944+
.graph-progress {
945+
width: 100%;
946+
}
947+
948+
/* Features */
949+
.features-section {
950+
padding: 40px 16px;
951+
}
952+
953+
.feature-card {
954+
padding: 24px;
955+
}
956+
957+
.feature-title {
958+
font-size: 16px;
959+
}
960+
961+
.feature-desc {
962+
font-size: 13px;
963+
}
964+
965+
/* Demo section */
966+
.demo-section {
967+
padding: 40px 16px;
968+
}
969+
970+
.demo-form {
971+
gap: 12px;
972+
}
973+
974+
.demo-form .input {
975+
min-width: unset;
976+
}
977+
978+
.demo-form .btn {
979+
width: 100%;
980+
justify-content: center;
981+
}
982+
983+
/* Footer */
984+
.footer {
985+
padding: 32px 16px;
986+
}
987+
988+
.footer-links {
989+
gap: 16px;
990+
}
991+
992+
.footer-link {
993+
font-size: 13px;
994+
}
995+
996+
/* Contact page */
997+
.contact-container {
998+
padding: 40px 16px;
999+
}
1000+
1001+
.contact-info,
1002+
.contact-form {
1003+
padding: 20px;
1004+
}
7121005
}
7131006

7141007
/* Glass morphism utility classes (kept for contact page compatibility) */
@@ -853,12 +1146,3 @@ body::before {
8531146
min-height: 120px;
8541147
resize: vertical;
8551148
}
856-
857-
@media (max-width: 1024px) {
858-
.contact-content {
859-
grid-template-columns: 1fr;
860-
}
861-
.contact-container {
862-
padding: 60px 24px;
863-
}
864-
}

0 commit comments

Comments
 (0)