-
Notifications
You must be signed in to change notification settings - Fork 0
Feat/UI #11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat/UI #11
Changes from all commits
42ae3de
fd6f6f8
f76f067
7e3a40b
9d05554
15901fd
647af56
24bcb3d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||
|---|---|---|---|---|
|
|
@@ -2,177 +2,233 @@ | |||
| @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'); | ||||
|
|
||||
| :root { | ||||
| --bg-color: #121212; | ||||
| --card-bg: #1e1e1e; | ||||
| --text-primary: #ffffff; | ||||
| --text-secondary: #a0a0a0; | ||||
| --accent-color: #3b82f6; | ||||
| --accent-hover: #2563eb; | ||||
| --border-color: #333333; | ||||
| --bg-workspace: #1e1e1e; | ||||
| --bg-panel: #2d2d2d; | ||||
| --bg-topbar: #252525; | ||||
| --text-primary: #e0e0e0; | ||||
| --text-secondary: #9aa0a6; | ||||
| --accent-color: #4a90e2; | ||||
| --accent-hover: #357abd; | ||||
| --border-color: #3e3e42; | ||||
| --input-bg: #1e1e1e; | ||||
| --input-border: #3e3e42; | ||||
| } | ||||
|
|
||||
| body { | ||||
| margin: 0; | ||||
| font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; | ||||
| background-color: var(--bg-color); | ||||
| font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; | ||||
| background-color: var(--bg-workspace); | ||||
| color: var(--text-primary); | ||||
| -webkit-font-smoothing: antialiased; | ||||
| overflow: hidden; | ||||
| /* Prevent body scroll */ | ||||
| } | ||||
|
|
||||
| .app-container { | ||||
| max-width: 1000px; | ||||
| margin: 0 auto; | ||||
| padding: 2rem; | ||||
| display: flex; | ||||
| flex-direction: column; | ||||
| min-height: 100vh; | ||||
| height: 100vh; | ||||
| width: 100vw; | ||||
| overflow: hidden; | ||||
| } | ||||
|
|
||||
| .header { | ||||
| text-align: center; | ||||
| margin-bottom: 2rem; | ||||
| /* Top Bar */ | ||||
| .top-bar { | ||||
| display: flex; | ||||
| justify-content: space-between; | ||||
| align-items: center; | ||||
| height: 52px; | ||||
| background-color: var(--bg-topbar); | ||||
| border-bottom: 1px solid var(--border-color); | ||||
| padding: 0 1.5rem; | ||||
| flex-shrink: 0; | ||||
| } | ||||
|
|
||||
| .header h1 { | ||||
| font-size: 2.5rem; | ||||
| font-weight: 700; | ||||
| .top-bar h1 { | ||||
| font-size: 1.1rem; | ||||
| font-weight: 600; | ||||
| margin: 0; | ||||
| background: linear-gradient(135deg, #fff 0%, #a0a0a0 100%); | ||||
| -webkit-background-clip: text; | ||||
| background-clip: text; | ||||
| -webkit-text-fill-color: transparent; | ||||
| color: #fff; | ||||
| letter-spacing: 0.5px; | ||||
| } | ||||
|
|
||||
| .header p { | ||||
| color: var(--text-secondary); | ||||
| font-size: 1.1rem; | ||||
| margin-top: 0.5rem; | ||||
| .top-bar-actions { | ||||
| display: flex; | ||||
| gap: 0.8rem; | ||||
| } | ||||
|
|
||||
| .btn { | ||||
| padding: 0.4rem 1rem; | ||||
| border-radius: 4px; | ||||
| font-size: 0.85rem; | ||||
| font-weight: 500; | ||||
| cursor: pointer; | ||||
| transition: all 0.2s ease; | ||||
| border: 1px solid transparent; | ||||
| } | ||||
| .btn:focus-visible, | ||||
| .empty-state:focus-visible { | ||||
| outline: 2px solid var(--accent-color); | ||||
| outline-offset: 2px; | ||||
| } | ||||
|
|
||||
| .main-content { | ||||
| .btn-secondary { | ||||
| background-color: transparent; | ||||
| color: var(--text-primary); | ||||
| border-color: var(--border-color); | ||||
| } | ||||
|
|
||||
| .btn-secondary:hover { | ||||
| background-color: rgba(255, 255, 255, 0.05); | ||||
| } | ||||
|
|
||||
| .btn-primary { | ||||
| background-color: var(--accent-color); | ||||
| color: white; | ||||
| } | ||||
|
|
||||
| .btn-primary:hover { | ||||
| background-color: var(--accent-hover); | ||||
| } | ||||
|
|
||||
| /* Main Workspace */ | ||||
| .workspace { | ||||
| display: flex; | ||||
| flex-direction: column; | ||||
| align-items: center; | ||||
| gap: 2rem; | ||||
| width: 100%; | ||||
| flex: 1; | ||||
| overflow: hidden; | ||||
| } | ||||
|
|
||||
| .upload-section { | ||||
| width: 100%; | ||||
| /* Preview Area */ | ||||
| .preview-area { | ||||
| flex: 1; | ||||
| display: flex; | ||||
| justify-content: center; | ||||
| align-items: center; | ||||
| background-color: var(--bg-workspace); | ||||
| padding: 2rem; | ||||
| overflow: auto; | ||||
| position: relative; | ||||
| } | ||||
|
|
||||
| .upload-btn { | ||||
| display: inline-flex; | ||||
| .empty-state { | ||||
| display: flex; | ||||
| flex-direction: column; | ||||
| align-items: center; | ||||
| justify-content: center; | ||||
| background-color: var(--accent-color); | ||||
| color: white; | ||||
| padding: 0.8rem 2rem; | ||||
| border-radius: 8px; | ||||
| font-weight: 600; | ||||
| font-size: 1rem; | ||||
| color: var(--text-secondary); | ||||
| cursor: pointer; | ||||
| padding: 3rem; | ||||
| border: 2px dashed var(--border-color); | ||||
| border-radius: 8px; | ||||
| transition: all 0.2s ease; | ||||
| box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); | ||||
| } | ||||
|
Comment on lines
123
to
124
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick | 🔵 Trivial
アニメーションを減らすことを好むユーザーのために、 ♿ reduced-motion対応の追加案`@media` (prefers-reduced-motion: reduce) {
.btn,
.empty-state,
.input-group input {
transition: none;
}
}🤖 Prompt for AI Agents |
||||
|
|
||||
| .upload-btn:hover { | ||||
| background-color: var(--accent-hover); | ||||
| transform: translateY(-1px); | ||||
| box-shadow: 0 6px 8px -1px rgba(0, 0, 0, 0.2); | ||||
| .empty-state:hover { | ||||
| border-color: var(--text-secondary); | ||||
| color: var(--text-primary); | ||||
| } | ||||
|
|
||||
| .canvas-container { | ||||
| width: 100%; | ||||
| max-width: 800px; | ||||
| background: var(--card-bg); | ||||
| border-radius: 12px; | ||||
| padding: 1rem; | ||||
| box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.5); | ||||
| display: none; | ||||
| justify-content: center; | ||||
| align-items: center; | ||||
| overflow: hidden; | ||||
| .empty-state.selecting { | ||||
| cursor: wait; | ||||
| opacity: 0.7; | ||||
| } | ||||
|
|
||||
| .empty-state.selecting:hover { | ||||
| border-color: var(--border-color); | ||||
| color: var(--text-secondary); | ||||
| } | ||||
|
|
||||
| @keyframes spin { | ||||
| to { transform: rotate(360deg); } | ||||
| } | ||||
|
|
||||
| .canvas-container.visible { | ||||
| .spinner { | ||||
| animation: spin 1s linear infinite; | ||||
| } | ||||
|
|
||||
| .canvas-wrapper { | ||||
| display: flex; | ||||
| justify-content: center; | ||||
| align-items: center; | ||||
| width: 100%; | ||||
| height: 100%; | ||||
| } | ||||
|
|
||||
| .preview-canvas { | ||||
| max-width: 100%; | ||||
| max-height: 60vh; | ||||
| max-height: 100%; | ||||
| object-fit: contain; | ||||
|
||||
| object-fit: contain; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick | 🔵 Trivial
レスポンシブ対応の検討をお勧めします。
サイドバーの幅が320pxに固定されています。小さな画面サイズ(タブレットなど)での表示を考慮して、メディアクエリでの調整を検討してください。
📱 レスポンシブ対応の追加案
`@media` (max-width: 768px) {
.sidebar {
width: 100%;
border-left: none;
border-top: 1px solid var(--border-color);
}
.workspace {
flex-direction: column;
}
}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@frontend/src/App.css` around lines 147 - 156, The .sidebar rule currently
uses a fixed width of 320px which breaks on smaller screens; update the CSS to
add a media query (e.g., `@media` (max-width: 768px)) that overrides .sidebar to
width: 100%, removes or changes the left border (e.g., border-left: none; add
border-top instead), and adjust related layout containers such as .workspace to
stack vertically (flex-direction: column) so the sidebar becomes responsive on
tablets and phones.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick | 🔵 Trivial
ボタンの無効状態スタイルの追加を検討してください。
将来的にボタンを無効化する必要がある場合(例:エクスポート処理中)に備えて、
:disabled状態のスタイルを追加することを推奨します。💅 無効状態のスタイル追加案
.btn-primary:hover { background-color: var(--accent-hover); } + +.btn:disabled { + opacity: 0.5; + cursor: not-allowed; +}📝 Committable suggestion
🤖 Prompt for AI Agents