From 8daf185ecc1fc725d21f5ca382c94e4b83eeeccc Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Tue, 29 Sep 2026 15:16:17 +0700 Subject: [PATCH 01/11] feat: shift home dashboard to post-booking trip mode --- index.html | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/index.html b/index.html index ddb4075..fab122b 100644 --- a/index.html +++ b/index.html @@ -22,9 +22,9 @@ @@ -118,6 +118,22 @@

Trung Quốc · 19–26/10/2026

+
+

Booking Center

Thông tin cần mở nhanh trong chuyến đi
Đã đặt
+
+
✈️
Chuyến baySGN → Shanghai · Beijing → SGN
Theo dõi trạng thái
+
🏨
Lưu trúShanghai · Beijing
Xem thông tin khách sạn
+
🚄
Tàu cao tốcShanghai → Beijing · 21/10/2026
Chưa mở bánChina Railway 12306
+
+
+ + + + +
+
Dữ liệu lưu cục bộ trên thiết bị này.
+
+

Ghi chú

Lưu trên thiết bị này
Sẵn sàng
@@ -268,6 +284,5 @@

Trung Quốc · 19–26/10/2026

if('serviceWorker'in navigator)window.addEventListener('load',()=>navigator.serviceWorker.register('./sw.js').catch(()=>{})); })(); - - +\n\n \ No newline at end of file From f21722a69e5114af7302b737aecb291d64213f73 Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Tue, 29 Sep 2026 15:46:35 +0700 Subject: [PATCH 05/11] style: add responsive booking center --- app.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app.css b/app.css index 515542c..2561623 100644 --- a/app.css +++ b/app.css @@ -18,3 +18,5 @@ .booking-chip.muted{color:var(--muted)} .booking-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 4px rgba(34,197,94,.12);margin-right:6px} @media(max-width:640px){.booking-summary{gap:6px}.booking-chip{font-size:11px;padding:5px 8px}.hero-actions{display:grid;grid-template-columns:1fr 1fr}.hero-actions .btn:first-child{grid-column:1/-1}} + +.booking-center{grid-column:1/-1}.booking-center-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:8px}.booking-panel{display:flex;flex-direction:column;justify-content:space-between;gap:14px;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--surface)}.booking-panel-head{display:flex;gap:10px;align-items:flex-start}.booking-panel-head>span{font-size:20px}.booking-panel-head div{display:grid;gap:4px}.booking-panel-head small,.booking-save{color:var(--muted);font-size:12px}.booking-panel-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.booking-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}.booking-fields label{display:grid;gap:6px;font-size:12px;font-weight:700;color:var(--muted)}.booking-fields input{width:100%;min-height:42px;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text);font:inherit}.booking-save{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:12px}@media(max-width:760px){.booking-center-grid,.booking-fields{grid-template-columns:1fr}.booking-save{align-items:flex-start;flex-direction:column}} From df17cab95082bce469026181921568318f862121 Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Tue, 29 Sep 2026 16:59:01 +0700 Subject: [PATCH 06/11] fix: remove escaped newline artifacts from dashboard html --- index.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 7a3f1c2..d4d00da 100644 --- a/index.html +++ b/index.html @@ -284,5 +284,8 @@

Trung Quốc · 19–26/10/2026

if('serviceWorker'in navigator)window.addEventListener('load',()=>navigator.serviceWorker.register('./sw.js').catch(()=>{})); })(); -\n\n + + + \ No newline at end of file From 6b880c0df34ef35b1e76dbb76dceba9b2cfb9cc8 Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Tue, 29 Sep 2026 16:59:04 +0700 Subject: [PATCH 07/11] fix: prevent booking UI overlap on mobile --- app.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app.css b/app.css index 2561623..5888207 100644 --- a/app.css +++ b/app.css @@ -20,3 +20,8 @@ @media(max-width:640px){.booking-summary{gap:6px}.booking-chip{font-size:11px;padding:5px 8px}.hero-actions{display:grid;grid-template-columns:1fr 1fr}.hero-actions .btn:first-child{grid-column:1/-1}} .booking-center{grid-column:1/-1}.booking-center-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:8px}.booking-panel{display:flex;flex-direction:column;justify-content:space-between;gap:14px;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--surface)}.booking-panel-head{display:flex;gap:10px;align-items:flex-start}.booking-panel-head>span{font-size:20px}.booking-panel-head div{display:grid;gap:4px}.booking-panel-head small,.booking-save{color:var(--muted);font-size:12px}.booking-panel-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.booking-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}.booking-fields label{display:grid;gap:6px;font-size:12px;font-weight:700;color:var(--muted)}.booking-fields input{width:100%;min-height:42px;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text);font:inherit}.booking-save{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:12px}@media(max-width:760px){.booking-center-grid,.booking-fields{grid-template-columns:1fr}.booking-save{align-items:flex-start;flex-direction:column}} + +/* Booking hero responsive fixes */ +body:has(#itinerary) .booking-summary{position:relative;z-index:2;max-width:760px} +@media(max-width:820px){body:has(#itinerary) .booking-summary{max-width:calc(100% - 118px);margin-top:12px}body:has(#itinerary) .booking-summary .booking-chip{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.18);color:#fff}body:has(#itinerary) .hero-actions{max-width:calc(100% - 118px)}} +@media(max-width:520px){body:has(#itinerary) .trip-hero{min-height:310px}body:has(#itinerary) .booking-summary{max-width:100%;padding-right:0;margin-top:14px}body:has(#itinerary) .hero-actions{max-width:100%;grid-template-columns:1fr 1fr}body:has(#itinerary) .hero-actions .btn{white-space:normal;text-align:center}body:has(#itinerary) .countdown{top:48px}body:has(#itinerary) .booking-center{min-width:0}body:has(#itinerary) .booking-panel,body:has(#itinerary) .booking-fields label{min-width:0}body:has(#itinerary) .booking-fields input{min-width:0;box-sizing:border-box}} From d93f5abe05ece38a302e949d80462ef2b982ea6c Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Tue, 29 Sep 2026 17:33:29 +0700 Subject: [PATCH 08/11] fix: remove remaining escaped newline from navigation --- index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index d4d00da..e1d837c 100644 --- a/index.html +++ b/index.html @@ -25,7 +25,8 @@ Chuyến bay Trạng thái Lưu trú - Booking Center\n Ngân sách + Booking Center + Ngân sách Chuẩn bị Ghi chú From 1e2990a9022a1d609796b901b6089e50829b5b2b Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Tue, 29 Sep 2026 17:33:32 +0700 Subject: [PATCH 09/11] refactor: remove dashboard-specific booking patches from shared css --- app.css | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app.css b/app.css index 5888207..515542c 100644 --- a/app.css +++ b/app.css @@ -18,10 +18,3 @@ .booking-chip.muted{color:var(--muted)} .booking-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 4px rgba(34,197,94,.12);margin-right:6px} @media(max-width:640px){.booking-summary{gap:6px}.booking-chip{font-size:11px;padding:5px 8px}.hero-actions{display:grid;grid-template-columns:1fr 1fr}.hero-actions .btn:first-child{grid-column:1/-1}} - -.booking-center{grid-column:1/-1}.booking-center-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:8px}.booking-panel{display:flex;flex-direction:column;justify-content:space-between;gap:14px;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--surface)}.booking-panel-head{display:flex;gap:10px;align-items:flex-start}.booking-panel-head>span{font-size:20px}.booking-panel-head div{display:grid;gap:4px}.booking-panel-head small,.booking-save{color:var(--muted);font-size:12px}.booking-panel-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.booking-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}.booking-fields label{display:grid;gap:6px;font-size:12px;font-weight:700;color:var(--muted)}.booking-fields input{width:100%;min-height:42px;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text);font:inherit}.booking-save{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:12px}@media(max-width:760px){.booking-center-grid,.booking-fields{grid-template-columns:1fr}.booking-save{align-items:flex-start;flex-direction:column}} - -/* Booking hero responsive fixes */ -body:has(#itinerary) .booking-summary{position:relative;z-index:2;max-width:760px} -@media(max-width:820px){body:has(#itinerary) .booking-summary{max-width:calc(100% - 118px);margin-top:12px}body:has(#itinerary) .booking-summary .booking-chip{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.18);color:#fff}body:has(#itinerary) .hero-actions{max-width:calc(100% - 118px)}} -@media(max-width:520px){body:has(#itinerary) .trip-hero{min-height:310px}body:has(#itinerary) .booking-summary{max-width:100%;padding-right:0;margin-top:14px}body:has(#itinerary) .hero-actions{max-width:100%;grid-template-columns:1fr 1fr}body:has(#itinerary) .hero-actions .btn{white-space:normal;text-align:center}body:has(#itinerary) .countdown{top:48px}body:has(#itinerary) .booking-center{min-width:0}body:has(#itinerary) .booking-panel,body:has(#itinerary) .booking-fields label{min-width:0}body:has(#itinerary) .booking-fields input{min-width:0;box-sizing:border-box}} From ca4cff497a66ba637bc4e12267ea0e20518fb629 Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Tue, 29 Sep 2026 17:33:35 +0700 Subject: [PATCH 10/11] refactor: unify post-booking responsive layout --- dashboard.css | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/dashboard.css b/dashboard.css index 517bc3f..f7df509 100644 --- a/dashboard.css +++ b/dashboard.css @@ -153,3 +153,49 @@ body:has(#itinerary) .notes-actions{margin-top:11px} body:has(#itinerary) .checklist,body:has(#itinerary) .budget{padding-left:14px;padding-right:14px} body:has(#itinerary) .notes-wrap{padding:14px} } + + +/* Post-booking dashboard */ +body:has(#itinerary) .booking-summary{display:flex;flex-wrap:wrap;gap:7px;margin-top:13px} +body:has(#itinerary) .booking-chip{display:inline-flex;align-items:center;min-height:26px;padding:0 9px;border:1px solid rgba(255,255,255,.18);border-radius:999px;background:rgba(255,255,255,.1);color:#fff;font-size:10.5px;font-weight:700} +body:has(#itinerary) .booking-chip.success{background:rgba(34,197,94,.16)} +body:has(#itinerary) .booking-dot{width:6px;height:6px;margin-right:6px;border-radius:50%;background:#4ade80;box-shadow:0 0 0 3px rgba(74,222,128,.15)} +body:has(#itinerary) .booking-center{grid-column:1/-1;min-width:0} +body:has(#itinerary) .booking-center-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:11px;padding:16px 20px 0} +body:has(#itinerary) .booking-panel{min-width:0;padding:14px;border:1px solid var(--dashboard-border);border-radius:12px;background:var(--surface);display:flex;flex-direction:column;justify-content:space-between;gap:12px} +body:has(#itinerary) .booking-panel-head{display:flex;align-items:flex-start;gap:9px;min-width:0} +body:has(#itinerary) .booking-panel-head>span{font-size:18px;line-height:1.3} +body:has(#itinerary) .booking-panel-head>div{display:grid;gap:3px;min-width:0} +body:has(#itinerary) .booking-panel-head b{font-size:12px} +body:has(#itinerary) .booking-panel-head small{color:var(--muted);font-size:10.5px;line-height:1.45;overflow-wrap:anywhere} +body:has(#itinerary) .booking-panel-actions{display:flex;align-items:center;flex-wrap:wrap;gap:7px} +body:has(#itinerary) .booking-panel .booking-chip{border-color:var(--line);background:var(--surface-2);color:var(--muted)} +body:has(#itinerary) .booking-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:12px 20px 0} +body:has(#itinerary) .booking-fields label{display:grid;min-width:0;gap:5px;color:var(--muted);font-size:10.5px;font-weight:750} +body:has(#itinerary) .booking-fields input{width:100%;min-width:0;height:36px;box-sizing:border-box;padding:0 10px;border:1px solid var(--line);border-radius:9px;background:var(--surface);color:var(--text);font:inherit;outline:none} +body:has(#itinerary) .booking-fields input:focus{border-color:#8eb0f6;box-shadow:0 0 0 3px var(--primary-soft)} +body:has(#itinerary) .booking-save{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 20px 18px;color:var(--muted);font-size:10.5px} + +@media(max-width:820px){ + body:has(#itinerary) .trip-hero{display:block;min-height:0} + body:has(#itinerary) .hero-copy{padding-right:24px} + body:has(#itinerary) .hero-copy h1, + body:has(#itinerary) .hero-route, + body:has(#itinerary) .hero-meta{max-width:none} + body:has(#itinerary) .countdown{position:relative;right:auto;top:auto;width:auto;min-height:0;height:auto;margin:0 24px 24px;padding:12px 14px;display:flex;align-items:baseline;justify-content:center;gap:7px} + body:has(#itinerary) .countdown strong{margin:0;font-size:28px} + body:has(#itinerary) .countdown b{display:block;margin:0 0 0 auto} + body:has(#itinerary) .booking-center-grid{grid-template-columns:1fr} +} + +@media(max-width:520px){ + body:has(#itinerary) .hero-copy{padding:20px 16px 16px} + body:has(#itinerary) .hero-actions{display:grid;grid-template-columns:1fr 1fr} + body:has(#itinerary) .hero-actions .btn{width:100%;box-sizing:border-box;white-space:normal;text-align:center;justify-content:center} + body:has(#itinerary) .countdown{margin:0 16px 16px;justify-content:flex-start;flex-wrap:wrap} + body:has(#itinerary) .countdown b{width:100%;margin:0;font-size:9.5px} + body:has(#itinerary) .booking-center-grid{padding:12px 14px 0} + body:has(#itinerary) .booking-fields{grid-template-columns:1fr;padding:10px 14px 0} + body:has(#itinerary) .booking-save{align-items:stretch;flex-direction:column;padding:10px 14px 14px} + body:has(#itinerary) .booking-save .btn{width:100%;justify-content:center} +} From 4a771d89122fb213d977079450c852d5e7e48c3a Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Tue, 29 Sep 2026 17:33:48 +0700 Subject: [PATCH 11/11] fix: clean booking script markup --- index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index e1d837c..5e28dce 100644 --- a/index.html +++ b/index.html @@ -286,7 +286,8 @@

Trung Quốc · 19–26/10/2026

if('serviceWorker'in navigator)window.addEventListener('load',()=>navigator.serviceWorker.register('./sw.js').catch(()=>{})); })(); - \ No newline at end of file