Skip to content

Commit 5295cc0

Browse files
committed
Merge branch 'dev'
2 parents b6b9c6d + d708044 commit 5295cc0

16 files changed

Lines changed: 1104 additions & 63 deletions

public/capture-icon-bw.svg

Lines changed: 3 additions & 0 deletions
Loading

public/capture-icon.svg

Lines changed: 3 additions & 0 deletions
Loading

public/copy-icon-bw.svg

Lines changed: 4 additions & 0 deletions
Loading

public/copy-icon.svg

Lines changed: 4 additions & 0 deletions
Loading

public/search-icon-bw.svg

Lines changed: 3 additions & 16 deletions
Loading

public/search-icon.svg

Lines changed: 3 additions & 17 deletions
Loading

public/tick-icon-bw.svg

Lines changed: 3 additions & 0 deletions
Loading

public/tick-icon.svg

Lines changed: 3 additions & 0 deletions
Loading

src/App.css

Lines changed: 258 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -721,6 +721,8 @@ canvas {
721721

722722
.collapse-arrow {
723723
display: inline;
724+
opacity: 1;
725+
transition: opacity 0.25s ease;
724726
}
725727

726728
.datetime-field {
@@ -1005,17 +1007,222 @@ canvas {
10051007
.flight-input.collapsed .panel-header {
10061008
background: transparent;
10071009
margin: -6px -24px;
1008-
padding: 12px 24px 16px;
1010+
padding: 12px 16px 16px;
10091011
height: auto;
1012+
justify-content: center;
1013+
align-items: center;
1014+
gap: 32px;
1015+
position: static;
10101016
transition: margin-bottom 0.25s ease-in;
10111017
}
10121018

10131019
.flight-input.collapsed .panel-header h3 {
10141020
margin: 0;
10151021
line-height: 1;
1016-
transition: margin-bottom 0.25s ease-in;
1022+
flex-grow: 0;
1023+
flex-shrink: 0;
1024+
opacity: 0.7;
1025+
transition: margin-bottom 0.25s ease-in, opacity 0.2s ease;
1026+
}
1027+
1028+
.flight-input.collapsed:hover .panel-header h3 {
1029+
opacity: 1;
1030+
}
1031+
1032+
.flight-input.collapsed .collapse-button {
1033+
width: auto !important;
1034+
height: auto !important;
1035+
padding: 0 !important;
1036+
margin: 0 !important;
1037+
}
1038+
1039+
.flight-input.collapsed .collapse-lens {
1040+
opacity: 0.7;
1041+
transition: opacity 0.2s ease;
1042+
}
1043+
1044+
.flight-input.collapsed:hover .collapse-lens {
1045+
opacity: 1;
10171046
}
10181047

1048+
/* ========================================
1049+
9B. SHARE BUTTON
1050+
======================================== */
1051+
1052+
.share-actions {
1053+
position: absolute;
1054+
top: 28px;
1055+
left: calc(50% + 120px);
1056+
z-index: 10;
1057+
display: flex;
1058+
flex-direction: row;
1059+
align-items: center;
1060+
gap: 0px;
1061+
}
1062+
1063+
.share-button {
1064+
display: none;
1065+
align-items: center;
1066+
justify-content: center;
1067+
width: 36px;
1068+
height: 36px;
1069+
padding: 0;
1070+
border: none;
1071+
border-radius: 50%;
1072+
background: none;
1073+
cursor: pointer;
1074+
transition: opacity 0.2s ease;
1075+
}
1076+
1077+
.share-button .share-icon {
1078+
opacity: 0.5;
1079+
transition: opacity 0.2s ease;
1080+
}
1081+
1082+
@media (hover: hover) {
1083+
.share-button:hover .share-icon {
1084+
opacity: 0.9;
1085+
}
1086+
}
1087+
1088+
.share-button:disabled {
1089+
pointer-events: none;
1090+
}
1091+
1092+
.share-button.capturing {
1093+
animation: capture-pulse 300ms ease;
1094+
}
1095+
1096+
@keyframes capture-pulse {
1097+
0% { opacity: 1; }
1098+
50% { opacity: 0.5; }
1099+
100% { opacity: 1; }
1100+
}
1101+
1102+
1103+
.share-icon {
1104+
width: 18px;
1105+
height: 18px;
1106+
}
1107+
1108+
/* BW mode */
1109+
.bw-mode .share-button {
1110+
background: none;
1111+
}
1112+
1113+
.bw-mode .share-button .share-icon {
1114+
opacity: 0.6;
1115+
}
1116+
1117+
@media (hover: hover) {
1118+
.bw-mode .share-button:hover .share-icon {
1119+
opacity: 1;
1120+
}
1121+
}
1122+
1123+
.copy-url-button {
1124+
display: flex;
1125+
align-items: center;
1126+
justify-content: center;
1127+
border: none;
1128+
padding: 8px;
1129+
background: none;
1130+
cursor: pointer;
1131+
transition: opacity 0.2s ease;
1132+
}
1133+
1134+
.copy-url-icon-wrapper {
1135+
position: relative;
1136+
width: 20px;
1137+
height: 20px;
1138+
}
1139+
1140+
.copy-url-button .copy-url-icon {
1141+
position: absolute;
1142+
top: 0;
1143+
left: 0;
1144+
width: 20px;
1145+
height: 20px;
1146+
}
1147+
1148+
/* Copy icon: default state */
1149+
.copy-url-button .copy-url-icon--copy {
1150+
opacity: 0.5;
1151+
transition: opacity 0.15s ease;
1152+
}
1153+
1154+
@media (hover: hover) {
1155+
.copy-url-button:hover .copy-url-icon--copy {
1156+
opacity: 0.9;
1157+
}
1158+
}
1159+
1160+
/* Tick icon: hidden by default, stroke-dash for draw effect */
1161+
.copy-url-button .copy-url-icon--tick {
1162+
opacity: 0;
1163+
}
1164+
1165+
.copy-url-button .copy-url-icon--tick path {
1166+
stroke-dasharray: 28;
1167+
stroke-dashoffset: 28;
1168+
}
1169+
1170+
/* Phase 1: fade out copy icon */
1171+
.copy-url-button.phase-1 .copy-url-icon--copy {
1172+
opacity: 0;
1173+
transition: opacity 0.15s ease;
1174+
}
1175+
1176+
/* Phase 2: draw tick stroke left-to-right */
1177+
.copy-url-button.phase-2 .copy-url-icon--copy {
1178+
opacity: 0;
1179+
}
1180+
1181+
.copy-url-button.phase-2 .copy-url-icon--tick {
1182+
opacity: 1;
1183+
}
1184+
1185+
.copy-url-button.phase-2 .copy-url-icon--tick path {
1186+
stroke-dashoffset: 0;
1187+
transition: stroke-dashoffset 0.35s ease-out;
1188+
}
1189+
1190+
/* Phase 3: fade out tick */
1191+
.copy-url-button.phase-3 .copy-url-icon--copy {
1192+
opacity: 0;
1193+
}
1194+
1195+
.copy-url-button.phase-3 .copy-url-icon--tick {
1196+
opacity: 0;
1197+
transition: opacity 0.2s ease;
1198+
}
1199+
1200+
.copy-url-button.phase-3 .copy-url-icon--tick path {
1201+
stroke-dashoffset: 0;
1202+
}
1203+
1204+
/* Phase 4: fade copy icon back in */
1205+
.copy-url-button.phase-4 .copy-url-icon--copy {
1206+
opacity: 0.5;
1207+
transition: opacity 0.2s ease;
1208+
}
1209+
1210+
/* BW mode */
1211+
.bw-mode .copy-url-button .copy-url-icon--copy {
1212+
opacity: 0.6;
1213+
}
1214+
1215+
@media (hover: hover) {
1216+
.bw-mode .copy-url-button:hover .copy-url-icon--copy {
1217+
opacity: 1;
1218+
}
1219+
}
1220+
1221+
.bw-mode .copy-url-button.phase-1 .copy-url-icon--copy { opacity: 0; }
1222+
.bw-mode .copy-url-button.phase-2 .copy-url-icon--copy { opacity: 0; }
1223+
.bw-mode .copy-url-button.phase-3 .copy-url-icon--copy { opacity: 0; }
1224+
.bw-mode .copy-url-button.phase-4 .copy-url-icon--copy { opacity: 0.6; }
1225+
10191226
/* ========================================
10201227
10. FLIGHT INPUT PANEL — PANEL HEADER
10211228
======================================== */
@@ -1032,9 +1239,13 @@ canvas {
10321239
transition: margin-bottom 0.35s ease-out;
10331240
}
10341241

1035-
/* Collapsed: show lens, hide arrow */
1242+
/* Collapsed: show lens, fade out arrow */
10361243
.flight-input.collapsed .collapse-arrow {
1037-
display: none;
1244+
opacity: 0;
1245+
width: 0;
1246+
height: 0;
1247+
overflow: hidden;
1248+
pointer-events: none;
10381249
}
10391250

10401251
.flight-input.collapsed .collapse-lens {
@@ -1044,6 +1255,7 @@ canvas {
10441255
/* Expanded: show arrow, hide lens */
10451256
.flight-input .collapse-arrow {
10461257
display: block;
1258+
opacity: 1;
10471259
}
10481260

10491261
.flight-input .collapse-lens {
@@ -2584,6 +2796,48 @@ canvas {
25842796
max-width: none;
25852797
}
25862798

2799+
.share-actions {
2800+
top: 72px;
2801+
left: auto;
2802+
right: 16px;
2803+
flex-direction: column;
2804+
gap: 2px;
2805+
}
2806+
2807+
.share-actions .share-button {
2808+
width: 44px;
2809+
height: 44px;
2810+
background: none;
2811+
backdrop-filter: none;
2812+
-webkit-backdrop-filter: none;
2813+
}
2814+
2815+
.share-actions .copy-url-button {
2816+
width: 44px;
2817+
height: 44px;
2818+
}
2819+
2820+
.share-actions .share-button .share-icon {
2821+
width: 20px;
2822+
height: 20px;
2823+
}
2824+
2825+
.share-actions .copy-url-icon-wrapper {
2826+
width: 20px;
2827+
height: 20px;
2828+
}
2829+
2830+
.share-actions .copy-url-button .copy-url-icon {
2831+
width: 20px;
2832+
height: 20px;
2833+
}
2834+
2835+
.bw-mode .share-button {
2836+
background: none;
2837+
backdrop-filter: none;
2838+
-webkit-backdrop-filter: none;
2839+
}
2840+
25872841
.flight-input {
25882842
width: calc(100vw - 36px);
25892843
max-width: 356px;

0 commit comments

Comments
 (0)