diff --git a/receipts.html b/receipts.html index f188fbf..1d42fba 100644 --- a/receipts.html +++ b/receipts.html @@ -485,6 +485,31 @@ } .manage-item button:hover { background: #fee; } + /* Tab bar */ + .tab-bar { + display: flex; + max-width: 600px; + margin: 0 auto; + padding: 12px 16px 0; + gap: 0; + } + .tab-bar button { + flex: 1; + padding: 10px 0; + border: none; + background: none; + font-size: 0.95rem; + font-weight: 600; + color: #888; + cursor: pointer; + border-bottom: 3px solid transparent; + transition: color 0.15s, border-color 0.15s; + } + .tab-bar button.active { + color: #1a1a2e; + border-bottom-color: #e94560; + } + /* Filter bar */ .filter-bar { max-width: 600px; @@ -500,6 +525,130 @@ background: #fafafa; color: #333; } + + /* Time entry cards */ + .time-card { + background: #fff; + border-radius: 12px; + padding: 14px 16px; + margin-bottom: 12px; + box-shadow: 0 1px 4px rgba(0,0,0,0.06); + display: flex; + gap: 14px; + align-items: center; + } + .time-icon { + width: 56px; + height: 56px; + border-radius: 8px; + background: #e8eaf6; + color: #283593; + display: flex; + align-items: center; + justify-content: center; + font-size: 1.4rem; + flex-shrink: 0; + } + .time-info { flex: 1; min-width: 0; } + .time-info .hours { font-size: 1.1rem; font-weight: 700; } + .time-info .hours-label { font-size: 0.85rem; color: #888; font-weight: 400; } + .time-info .meta { + font-size: 0.8rem; + color: #888; + margin-top: 2px; + } + .time-actions { display: flex; gap: 6px; flex-shrink: 0; } + .time-actions button { + background: none; + border: none; + cursor: pointer; + font-size: 1.1rem; + padding: 4px; + border-radius: 4px; + color: #888; + } + .time-actions button:hover { background: #f0f0f0; } + + /* Clock banner */ + .clock-banner { + background: linear-gradient(135deg, #1b5e20, #2e7d32); + color: #fff; + border-radius: 12px; + padding: 14px 16px; + margin-bottom: 12px; + display: flex; + align-items: center; + gap: 12px; + box-shadow: 0 2px 8px rgba(27,94,32,0.3); + } + .clock-banner.hidden { display: none; } + .clock-banner .banner-dot { + width: 12px; + height: 12px; + border-radius: 50%; + background: #69f0ae; + flex-shrink: 0; + animation: pulse-dot 1.5s ease-in-out infinite; + } + .clock-banner .banner-info { flex: 1; min-width: 0; } + .clock-banner .banner-project { font-weight: 600; font-size: 0.95rem; } + .clock-banner .banner-elapsed { font-size: 0.85rem; opacity: 0.85; margin-top: 2px; } + .clock-banner .banner-clockout { + background: rgba(255,255,255,0.2); + border: 1px solid rgba(255,255,255,0.4); + color: #fff; + padding: 8px 16px; + border-radius: 8px; + font-weight: 600; + font-size: 0.85rem; + cursor: pointer; + flex-shrink: 0; + } + .clock-banner .banner-clockout:active { background: rgba(255,255,255,0.3); } + + @keyframes pulse-dot { + 0%, 100% { opacity: 1; transform: scale(1); } + 50% { opacity: 0.5; transform: scale(0.85); } + } + + /* Open time card (clocked in) */ + .time-card.open { + border-left: 3px solid #4caf50; + } + .time-card.open .time-icon { + background: #e8f5e9; + color: #2e7d32; + position: relative; + } + .time-card.open .time-icon::after { + content: ""; + position: absolute; + top: 4px; + right: 4px; + width: 8px; + height: 8px; + border-radius: 50%; + background: #4caf50; + animation: pulse-dot 1.5s ease-in-out infinite; + } + + /* FAB clocked-in state */ + #add-btn.fab-clocked-in { + background: #2e7d32; + box-shadow: 0 4px 12px rgba(46,125,50,0.4); + } + + /* Clock-in modal manual entry link */ + .manual-entry-link { + display: block; + text-align: center; + margin-top: 12px; + font-size: 0.85rem; + color: #888; + cursor: pointer; + text-decoration: underline; + } + .manual-entry-link:hover { color: #666; } @@ -515,16 +664,42 @@ +
+ + +
+ -
-
- -

No receipts yet.
Tap + to add one.

+
+
+
+ +

No receipts yet.
Tap + to add one.

+
+
+
+ + @@ -637,6 +812,70 @@
+ + + + + +
@@ -682,11 +921,14 @@