diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e985853 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vercel diff --git a/index.html b/index.html index 14c1ccd..980a939 100644 --- a/index.html +++ b/index.html @@ -158,13 +158,20 @@ display: flex; align-items: center; justify-content: space-between; - padding: 4px 16px 0; - min-height: 32px; + padding: 8px 16px 0; + min-height: 36px; + gap: 8px; + } + .edit-bar-left { + display: flex; + align-items: center; + gap: 8px; + flex: 1; } .edit-bar-hint { font-size: 11px; color: var(--text3); } .edit-toggle-btn { font-size: 12px; - padding: 4px 12px; + padding: 5px 12px; border-radius: 20px; border: 1px solid var(--border); background: transparent; @@ -172,6 +179,7 @@ font-family: inherit; cursor: pointer; transition: all 0.12s; + flex-shrink: 0; } .edit-toggle-btn.active { border-color: var(--accent); @@ -179,6 +187,25 @@ background: var(--surface); } + /* ── Add app button ── */ + .add-app-btn { + display: none; + align-items: center; + gap: 5px; + padding: 5px 11px 5px 8px; + border-radius: 20px; + border: 1px dashed var(--accent); + background: transparent; + color: var(--accent); + font-size: 12px; + font-family: inherit; + cursor: pointer; + transition: background 0.12s; + flex-shrink: 0; + } + .add-app-btn.visible { display: flex; } + .add-app-btn:active { background: var(--surface); } + /* ── App sections ── */ .app-section { padding: 0 16px 16px; } .section-label { @@ -237,6 +264,19 @@ white-space: nowrap; } + /* ── Text initial badge ── */ + .app-initial { + width: 26px; + height: 26px; + border-radius: 6px; + display: flex; + align-items: center; + justify-content: center; + font-size: 13px; + font-weight: 700; + flex-shrink: 0; + } + .check-badge { display: none; position: absolute; @@ -251,6 +291,29 @@ } .app-item.edit-mode.on .check-badge { display: flex; } + /* ── Custom app delete button ── */ + .custom-del-btn { + display: none; + position: absolute; + top: 4px; + left: 4px; + width: 16px; + height: 16px; + background: #EF4444; + border-radius: 50%; + align-items: center; + justify-content: center; + border: none; + cursor: pointer; + z-index: 2; + padding: 0; + line-height: 1; + color: #fff; + font-size: 10px; + font-weight: 700; + } + .app-item.edit-mode .custom-del-btn { display: flex; } + /* ── Empty state ── */ .empty-state { text-align: center; @@ -353,6 +416,176 @@ cursor: pointer; } + /* ── Add app modal ── */ + .add-modal-backdrop { + display: none; + position: fixed; + inset: 0; + background: rgba(0,0,0,.55); + z-index: 200; + backdrop-filter: blur(2px); + } + .add-modal-backdrop.open { display: block; } + .add-modal { + position: fixed; + bottom: 0; + left: 0; + right: 0; + background: var(--surface); + border-radius: 16px 16px 0 0; + padding-bottom: max(24px, env(safe-area-inset-bottom)); + z-index: 201; + max-height: 88vh; + overflow-y: auto; + transform: translateY(100%); + transition: transform 0.25s cubic-bezier(0.2,0.9,0.2,1); + } + .add-modal.open { transform: translateY(0); } + .add-modal-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 16px 16px 12px; + border-bottom: 1px solid var(--border); + position: sticky; + top: 0; + background: var(--surface); + z-index: 1; + } + .add-modal-title { + font-size: 15px; + font-weight: 600; + color: var(--text); + } + .add-modal-body { + padding: 16px; + display: flex; + flex-direction: column; + gap: 16px; + } + .form-field-label { + font-size: 12px; + color: var(--text2); + font-weight: 500; + margin-bottom: 6px; + } + .form-text-input { + width: 100%; + box-sizing: border-box; + background: var(--bg); + border: 1px solid var(--border); + border-radius: 8px; + color: var(--text); + font-size: 14px; + padding: 9px 12px; + outline: none; + font-family: inherit; + transition: border-color 0.15s; + } + .form-text-input:focus { border-color: var(--accent); } + .form-select { + width: 100%; + box-sizing: border-box; + background: var(--bg); + border: 1px solid var(--border); + border-radius: 8px; + color: var(--text); + font-size: 14px; + padding: 9px 12px; + outline: none; + font-family: inherit; + cursor: pointer; + -webkit-appearance: none; + appearance: none; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%239CA3AF' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 12px center; + padding-right: 32px; + transition: border-color 0.15s; + } + .form-select:focus { border-color: var(--accent); } + + .icon-picker-label { + font-size: 12px; + color: var(--text2); + font-weight: 500; + margin-bottom: 8px; + } + .icon-picker-grid { + display: grid; + grid-template-columns: repeat(7, 1fr); + gap: 5px; + } + .icon-pick-btn { + display: flex; + align-items: center; + justify-content: center; + padding: 8px 4px; + border: 1px solid var(--border); + border-radius: 8px; + background: var(--bg); + color: var(--text3); + cursor: pointer; + transition: all 0.12s; + aspect-ratio: 1; + } + .icon-pick-btn.selected { + border-color: var(--accent); + background: var(--surface2); + color: var(--accent); + } + .icon-pick-btn:active { background: var(--surface2); } + .icon-initial-pick { + display: flex; + align-items: center; + gap: 8px; + padding: 9px 12px; + border: 1px solid var(--border); + border-radius: 8px; + background: var(--bg); + color: var(--text2); + cursor: pointer; + font-size: 12px; + font-family: inherit; + transition: all 0.12s; + margin-top: 6px; + width: 100%; + box-sizing: border-box; + } + .icon-initial-pick.selected { + border-color: var(--accent); + background: var(--surface2); + color: var(--accent); + } + .initial-preview { + width: 22px; + height: 22px; + border-radius: 5px; + background: var(--surface2); + display: flex; + align-items: center; + justify-content: center; + font-size: 12px; + font-weight: 700; + flex-shrink: 0; + } + .form-submit-btn { + width: 100%; + padding: 12px; + background: var(--accent); + color: #0D0D0D; + border: none; + border-radius: 8px; + font-family: inherit; + font-size: 14px; + font-weight: 600; + cursor: pointer; + } + .form-submit-btn:disabled { + opacity: 0.38; + cursor: not-allowed; + } + /* ── Safe area ── */ main { padding-bottom: max(16px, env(safe-area-inset-bottom)); } @@ -432,6 +665,61 @@
+ + +