Improve mobile responsiveness and book metadata layout
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
### 2026-02-01: 1.0.4
|
||||||
|
|
||||||
|
* Improve mobile responsiveness and book metadata layout
|
||||||
|
|
||||||
### 2026-02-01: 1.0.3
|
### 2026-02-01: 1.0.3
|
||||||
|
|
||||||
* Add mobile responsiveness
|
* Add mobile responsiveness
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# ⚡ Speed reader
|
# ⚡ Speed reader
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "rsvp-speed-reader",
|
"name": "rsvp-speed-reader",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.0.3",
|
"version": "1.0.4",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
+25
-28
@@ -719,32 +719,32 @@ function App() {
|
|||||||
<kbd style={styles.kbd}>↓</kbd> speed
|
<kbd style={styles.kbd}>↓</kbd> speed
|
||||||
<kbd style={styles.kbd}>R</kbd> reset
|
<kbd style={styles.kbd}>R</kbd> reset
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* Book metadata display */}
|
{/* Book metadata display */}
|
||||||
{bookMetadata && (bookMetadata.title || bookMetadata.cover) && (
|
{bookMetadata && (bookMetadata.title || bookMetadata.cover) && (
|
||||||
<aside style={styles.bookMetadata} aria-label="Current book" className="book-metadata">
|
<aside style={styles.bookMetadata} aria-label="Current book" className="book-metadata">
|
||||||
{bookMetadata.cover && (
|
{bookMetadata.cover && (
|
||||||
<img
|
<img
|
||||||
src={bookMetadata.cover}
|
src={bookMetadata.cover}
|
||||||
alt={`Cover of ${bookMetadata.title || "current book"}`}
|
alt={`Cover of ${bookMetadata.title || "current book"}`}
|
||||||
style={styles.bookCover}
|
style={styles.bookCover}
|
||||||
className="book-cover"
|
className="book-cover"
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
<div style={styles.bookInfo}>
|
|
||||||
{bookMetadata.title && (
|
|
||||||
<h3 style={styles.bookTitle} className="book-title">{bookMetadata.title}</h3>
|
|
||||||
)}
|
)}
|
||||||
{bookMetadata.author && (
|
<div style={styles.bookInfo}>
|
||||||
<p style={styles.bookAuthor} className="book-author">{bookMetadata.author}</p>
|
{bookMetadata.title && (
|
||||||
)}
|
<h3 style={styles.bookTitle} className="book-title">{bookMetadata.title}</h3>
|
||||||
<p style={styles.bookStats} className="book-stats">
|
)}
|
||||||
{formatReadingTime((words.length - currentIndex) / wpm)} left
|
{bookMetadata.author && (
|
||||||
</p>
|
<p style={styles.bookAuthor} className="book-author">{bookMetadata.author}</p>
|
||||||
</div>
|
)}
|
||||||
</aside>
|
<p style={styles.bookStats} className="book-stats">
|
||||||
)}
|
{formatReadingTime((words.length - currentIndex) / wpm)} left
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* Keyboard shortcuts modal */}
|
{/* Keyboard shortcuts modal */}
|
||||||
{showShortcuts && (
|
{showShortcuts && (
|
||||||
@@ -1432,14 +1432,11 @@ const styles = {
|
|||||||
|
|
||||||
// Book metadata
|
// Book metadata
|
||||||
bookMetadata: {
|
bookMetadata: {
|
||||||
position: "fixed",
|
|
||||||
bottom: "20px",
|
|
||||||
left: "20px",
|
|
||||||
display: "flex",
|
display: "flex",
|
||||||
alignItems: "flex-end",
|
alignItems: "flex-end",
|
||||||
gap: "12px",
|
gap: "12px",
|
||||||
maxWidth: "280px",
|
maxWidth: "280px",
|
||||||
zIndex: 50,
|
marginTop: "16px",
|
||||||
},
|
},
|
||||||
bookCover: {
|
bookCover: {
|
||||||
width: "48px",
|
width: "48px",
|
||||||
|
|||||||
+45
-9
@@ -48,7 +48,25 @@ button:active {
|
|||||||
color: #ccc !important;
|
color: #ccc !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Desktop: fixed book metadata */
|
||||||
|
@media (min-width: 866px) {
|
||||||
|
.book-metadata {
|
||||||
|
position: fixed !important;
|
||||||
|
bottom: 20px !important;
|
||||||
|
left: 20px !important;
|
||||||
|
margin-top: 0 !important;
|
||||||
|
z-index: 50;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Mobile responsiveness */
|
/* Mobile responsiveness */
|
||||||
|
@media (max-width: 865px) {
|
||||||
|
/* Controls margin */
|
||||||
|
.bottom-area > div:first-child {
|
||||||
|
margin-bottom: 10px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 600px) {
|
@media (max-width: 600px) {
|
||||||
/* Hide text labels on buttons */
|
/* Hide text labels on buttons */
|
||||||
.icon-btn span,
|
.icon-btn span,
|
||||||
@@ -58,7 +76,7 @@ button:active {
|
|||||||
|
|
||||||
/* Reduce top bar padding */
|
/* Reduce top bar padding */
|
||||||
.top-bar {
|
.top-bar {
|
||||||
padding: 12px 16px !important;
|
padding: 12px 5px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Smaller WPM display */
|
/* Smaller WPM display */
|
||||||
@@ -99,9 +117,8 @@ button:active {
|
|||||||
|
|
||||||
/* Smaller book metadata */
|
/* Smaller book metadata */
|
||||||
.book-metadata {
|
.book-metadata {
|
||||||
max-width: 200px !important;
|
max-width: 100% !important;
|
||||||
bottom: 12px !important;
|
justify-content: center;
|
||||||
left: 12px !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.book-cover {
|
.book-cover {
|
||||||
@@ -128,6 +145,30 @@ button:active {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
/* Book metadata left aligned */
|
||||||
|
.book-metadata {
|
||||||
|
justify-content: flex-start !important;
|
||||||
|
margin-top: 6px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reading area vertical centering */
|
||||||
|
.main-area {
|
||||||
|
position: relative;
|
||||||
|
top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WPM selection centered, compact */
|
||||||
|
.wpm-control {
|
||||||
|
gap: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wpm-btn {
|
||||||
|
padding-left: 5px !important;
|
||||||
|
padding-right: 5px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 400px) {
|
@media (max-width: 400px) {
|
||||||
/* Even smaller word display for very small screens */
|
/* Even smaller word display for very small screens */
|
||||||
.word-display {
|
.word-display {
|
||||||
@@ -137,9 +178,4 @@ button:active {
|
|||||||
.word-container {
|
.word-container {
|
||||||
height: 80px !important;
|
height: 80px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hide book metadata on very small screens */
|
|
||||||
.book-metadata {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user