Skip to content

Commit 5b03698

Browse files
author
Paweł Kędzia
committed
Merge branch 'features/web'
2 parents b869c7d + 3ba71f5 commit 5b03698

File tree

2 files changed

+299
-48
lines changed

2 files changed

+299
-48
lines changed

llm_router_web/web/static/style.css

Lines changed: 278 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ summary.clickable:hover {
589589
/* ----- Menu ----- */
590590
.menu {
591591
display: flex;
592-
gap: var(--space-2);
592+
gap: var(--space-3);
593593
align-items: stretch;
594594
flex-wrap: wrap;
595595
}
@@ -602,33 +602,298 @@ summary.clickable:hover {
602602
display: flex;
603603
align-items: center;
604604
justify-content: center;
605-
height: 48px;
606-
padding: 0 var(--space-4);
607-
border-radius: 0;
608-
background: var(--card);
605+
min-height: 56px;
606+
padding: var(--space-3) var(--space-4);
607+
border-radius: var(--radius-md);
608+
background: linear-gradient(145deg, var(--card), rgba(0, 0, 0, .15));
609609
color: var(--fg);
610610
text-decoration: none;
611-
transition: background .15s, color .15s;
612-
border-bottom: 2px solid transparent;
613-
font-weight: 500;
611+
transition: all .2s ease;
612+
border: 1px solid var(--border);
613+
box-shadow: 0 2px 4px rgba(0, 0, 0, .15),
614+
0 4px 12px rgba(0, 0, 0, .08),
615+
inset 0 1px 0 rgba(255, 255, 255, .05);
616+
font-weight: 600;
617+
cursor: pointer;
618+
position: relative;
619+
overflow: hidden;
614620
}
615621

616-
.menu a:hover, .menu a.active {
617-
background: var(--accent);
622+
.menu a::before {
623+
content: '';
624+
position: absolute;
625+
top: 0;
626+
left: 0;
627+
right: 0;
628+
height: 2px;
629+
background: linear-gradient(90deg, transparent, var(--accent), transparent);
630+
opacity: 0;
631+
transition: opacity .2s ease;
632+
}
633+
634+
.menu a:hover {
635+
background: linear-gradient(145deg, var(--accent), var(--accent-600));
636+
color: #fff;
637+
border-color: var(--accent);
638+
transform: translateY(-2px);
639+
box-shadow: 0 4px 8px rgba(0, 0, 0, .2),
640+
0 8px 20px rgba(0, 0, 0, .15),
641+
inset 0 1px 0 rgba(255, 255, 255, .1);
642+
}
643+
644+
.menu a:hover::before {
645+
opacity: 1;
646+
}
647+
648+
.menu a.active {
649+
background: linear-gradient(145deg, var(--accent), var(--accent-700));
618650
color: #fff;
619-
border-bottom-color: #fff;
651+
border-color: var(--accent-600);
652+
box-shadow: 0 1px 3px rgba(0, 0, 0, .2),
653+
inset 0 2px 4px rgba(0, 0, 0, .15),
654+
inset 0 -1px 0 rgba(255, 255, 255, .1);
655+
}
656+
657+
.menu a.active::before {
658+
opacity: 1;
659+
background: rgba(255, 255, 255, .3);
660+
}
661+
662+
.menu a:active {
663+
transform: translateY(0);
664+
box-shadow: 0 1px 2px rgba(0, 0, 0, .2),
665+
inset 0 2px 6px rgba(0, 0, 0, .2);
620666
}
621667

622668
.menu a.danger {
623-
background: var(--danger-soft);
669+
background: linear-gradient(145deg, var(--danger-soft), rgba(220, 38, 38, .8));
624670
color: #fff;
671+
border-color: var(--danger);
625672
}
626673

627674
.menu a.danger:hover, .menu a.danger.active {
628-
background: var(--danger);
675+
background: linear-gradient(145deg, var(--danger), #b91c1c);
676+
color: #fff;
677+
border-color: #991b1b;
678+
}
679+
680+
/* ----- Dropdown buttons in topbar ----- */
681+
.dropdown {
682+
position: relative;
683+
}
684+
685+
.dropdown .btn-tile {
686+
display: flex;
687+
align-items: center;
688+
justify-content: center;
689+
min-height: 48px;
690+
padding: var(--space-2) var(--space-4);
691+
border-radius: var(--radius-md);
692+
background: linear-gradient(145deg, var(--card), rgba(0, 0, 0, .2));
693+
color: var(--fg);
694+
border: 1px solid var(--border);
695+
box-shadow: 0 2px 4px rgba(0, 0, 0, .15),
696+
0 4px 12px rgba(0, 0, 0, .08),
697+
inset 0 1px 0 rgba(255, 255, 255, .05);
698+
font-weight: 600;
699+
font-size: 0.95rem;
700+
cursor: pointer;
701+
transition: all .2s ease;
702+
position: relative;
703+
overflow: hidden;
704+
font-family: inherit;
705+
}
706+
707+
.dropdown .btn-tile::before {
708+
content: '';
709+
position: absolute;
710+
top: 0;
711+
left: 0;
712+
right: 0;
713+
height: 2px;
714+
background: linear-gradient(90deg, transparent, var(--accent), transparent);
715+
opacity: 0;
716+
transition: opacity .2s ease;
717+
}
718+
719+
.dropdown .btn-tile:hover {
720+
background: linear-gradient(145deg, var(--accent), var(--accent-600));
721+
color: #fff;
722+
border-color: var(--accent);
723+
transform: translateY(-2px);
724+
box-shadow: 0 4px 8px rgba(0, 0, 0, .2),
725+
0 8px 20px rgba(0, 0, 0, .15),
726+
inset 0 1px 0 rgba(255, 255, 255, .1);
727+
}
728+
729+
.dropdown .btn-tile:hover::before {
730+
opacity: 1;
731+
}
732+
733+
.dropdown .btn-tile.active {
734+
background: linear-gradient(145deg, var(--accent), var(--accent-700));
735+
color: #fff;
736+
border-color: var(--accent-600);
737+
box-shadow: 0 1px 3px rgba(0, 0, 0, .2),
738+
inset 0 2px 4px rgba(0, 0, 0, .15),
739+
inset 0 -1px 0 rgba(255, 255, 255, .1);
740+
}
741+
742+
.dropdown .btn-tile.active::before {
743+
opacity: 1;
744+
background: rgba(255, 255, 255, .3);
745+
}
746+
747+
.dropdown .btn-tile:active {
748+
transform: translateY(0);
749+
box-shadow: 0 1px 2px rgba(0, 0, 0, .2),
750+
inset 0 2px 6px rgba(0, 0, 0, .2);
751+
}
752+
753+
.dropdown-content {
754+
position: absolute;
755+
right: 0;
756+
top: calc(100% + 8px);
757+
background: var(--card);
758+
border: 1px solid var(--border);
759+
border-radius: var(--radius-md);
760+
padding: var(--space-3);
761+
min-width: 220px;
762+
z-index: 1000;
763+
box-shadow: 0 8px 24px rgba(0, 0, 0, .3),
764+
0 4px 12px rgba(0, 0, 0, .2);
765+
}
766+
767+
.dropdown-content .panel {
768+
margin-bottom: var(--space-3);
769+
padding: 0;
770+
background: transparent;
771+
border: none;
772+
box-shadow: none;
773+
}
774+
775+
.dropdown-content .panel:last-child {
776+
margin-bottom: 0;
777+
}
778+
779+
.dropdown-content .label {
780+
display: block;
781+
font-weight: 700;
782+
font-size: 0.75rem;
783+
color: var(--muted);
784+
margin-bottom: var(--space-2);
785+
text-transform: uppercase;
786+
letter-spacing: 0.8px;
787+
padding-left: var(--space-1);
788+
}
789+
790+
/* Dropdown items styling */
791+
.dropdown-content .btn-small,
792+
.dropdown-content a.btn-small,
793+
.dropdown-content button.btn-small {
794+
display: block;
795+
width: 100%;
796+
text-align: left;
797+
margin-bottom: var(--space-2);
798+
padding: var(--space-2) var(--space-3);
799+
border-radius: var(--radius-sm);
800+
background: linear-gradient(145deg, rgba(255, 255, 255, .03), rgba(0, 0, 0, .1));
801+
border: 1px solid var(--border);
802+
color: var(--fg);
803+
font-weight: 500;
804+
font-size: 0.9rem;
805+
transition: all .15s ease;
806+
box-shadow: 0 1px 3px rgba(0, 0, 0, .1);
807+
cursor: pointer;
808+
}
809+
810+
.dropdown-content .btn-small:last-child {
811+
margin-bottom: 0;
812+
}
813+
814+
.dropdown-content .btn-small:hover {
815+
background: linear-gradient(145deg, var(--accent), var(--accent-600));
816+
color: #fff;
817+
border-color: var(--accent);
818+
transform: translateX(4px);
819+
box-shadow: 0 2px 6px rgba(0, 0, 0, .2),
820+
inset 0 1px 0 rgba(255, 255, 255, .1);
821+
}
822+
823+
.dropdown-content .btn-small.active {
824+
background: linear-gradient(145deg, var(--accent-700), var(--accent-600));
825+
color: #fff;
826+
border-color: var(--accent-600);
827+
box-shadow: inset 0 2px 4px rgba(0, 0, 0, .2);
828+
position: relative;
829+
}
830+
831+
.dropdown-content .btn-small.active::after {
832+
content: '✓';
833+
position: absolute;
834+
right: var(--space-3);
835+
top: 50%;
836+
transform: translateY(-50%);
837+
font-weight: 700;
838+
font-size: 1rem;
839+
}
840+
841+
.dropdown-content .btn-small.danger {
842+
background: linear-gradient(145deg, rgba(239, 68, 68, .15), rgba(220, 38, 38, .1));
843+
border-color: rgba(239, 68, 68, .3);
844+
color: var(--danger-soft);
845+
}
846+
847+
.dropdown-content .btn-small.danger:hover {
848+
background: linear-gradient(145deg, var(--danger), #b91c1c);
849+
border-color: var(--danger);
629850
color: #fff;
630851
}
631852

853+
/* Special styling for buttons with background override */
854+
.dropdown-content .btn-small[style*="background"] {
855+
box-shadow: 0 1px 3px rgba(0, 0, 0, .1);
856+
}
857+
858+
.dropdown-content .btn-small[style*="background"]:hover {
859+
filter: brightness(1.1);
860+
transform: translateX(4px);
861+
}
862+
863+
/* Theme select in dropdown */
864+
.dropdown-content #theme-select {
865+
width: 100%;
866+
margin-bottom: var(--space-2);
867+
padding: var(--space-2);
868+
background: rgba(0, 0, 0, .2);
869+
border: 1px solid var(--border);
870+
border-radius: var(--radius-sm);
871+
color: var(--fg);
872+
font-size: 0.9rem;
873+
cursor: pointer;
874+
transition: all .15s ease;
875+
}
876+
877+
.dropdown-content #theme-select:hover {
878+
border-color: var(--accent);
879+
background: rgba(0, 0, 0, .3);
880+
}
881+
882+
.dropdown-content #theme-select:focus {
883+
outline: none;
884+
border-color: var(--accent);
885+
box-shadow: 0 0 0 2px rgba(90, 169, 255, .2);
886+
}
887+
888+
/* Label styling in dropdown */
889+
.dropdown-content label {
890+
display: block;
891+
font-weight: 600;
892+
font-size: 0.85rem;
893+
color: var(--muted);
894+
margin-bottom: var(--space-2);
895+
}
896+
632897
/* ----- Theme Selector ----- */
633898
#theme-select {
634899
width: auto;

0 commit comments

Comments
 (0)