Upgrade Asset Manager and Inbox; load Resend templates in Broadcast; v2.5.0
Publish Container / build (push) Successful in 16m39s
Publish Container / build (push) Successful in 16m39s
- Asset Manager: search/filter/sort, list+grid views, rename, move between R2 folders, tag chips, bulk actions, used-in counts; fix R2 delete lookup - Inbox: readable wrapped rows with subject/preview, real read state, type filters, bulk actions, mojibake repair - Broadcast: pick a Resend template to fill subject and body Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4931bfab4d
commit
e74bd1df5d
10 files changed
+1247
-417
No files matched your search
+164
-52
@@ -8576,58 +8576,6 @@
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
.admin-assets-table {
|
||||
table-layout: auto;
|
||||
}
|
||||
|
||||
.admin-assets-table th,
|
||||
.admin-assets-table td {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.admin-assets-table th:nth-child(1),
|
||||
.admin-assets-table td:nth-child(1) {
|
||||
width: 96px;
|
||||
}
|
||||
|
||||
.admin-assets-table th:nth-child(2),
|
||||
.admin-assets-table td:nth-child(2) {
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.admin-assets-table th:nth-child(5),
|
||||
.admin-assets-table td:nth-child(5) {
|
||||
min-width: 240px;
|
||||
}
|
||||
|
||||
.admin-assets-table th:nth-child(6),
|
||||
.admin-assets-table td:nth-child(6) {
|
||||
min-width: 170px;
|
||||
}
|
||||
|
||||
.admin-asset-thumb {
|
||||
display: block;
|
||||
border-radius: 8px;
|
||||
border: 1px solid rgba(201, 168, 76, 0.25);
|
||||
background: rgba(255, 255, 255, 0.03);
|
||||
}
|
||||
|
||||
.admin-asset-tags-input {
|
||||
width: 100%;
|
||||
min-width: 220px;
|
||||
background: #111;
|
||||
border: 1px solid rgba(201, 168, 76, 0.24);
|
||||
border-radius: 6px;
|
||||
color: var(--brand-warm-white);
|
||||
padding: 0.5rem 0.65rem;
|
||||
}
|
||||
|
||||
.admin-asset-actions-inline {
|
||||
display: flex;
|
||||
gap: 0.4rem;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.admin-email-layout {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(260px, 360px) minmax(0, 1fr);
|
||||
@@ -12857,3 +12805,167 @@
|
||||
.study-community-shortcut-icon { width: 16px; height: 16px; fill: currentColor; flex-shrink: 0; }
|
||||
.study-community-shortcut-arrow { margin-left: auto; opacity: 0.6; transition: transform 0.15s; }
|
||||
.study-community-shortcut:hover .study-community-shortcut-arrow { transform: translateX(3px); opacity: 1; }
|
||||
|
||||
/* ── Asset Manager ── */
|
||||
.am-root { max-width: none; }
|
||||
|
||||
.am-toolbar,
|
||||
.am-upload-bar,
|
||||
.am-tagbar,
|
||||
.am-summary,
|
||||
.am-bulkbar {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 0.6rem;
|
||||
margin-bottom: 0.8rem;
|
||||
}
|
||||
|
||||
.am-search {
|
||||
flex: 1 1 260px;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.am-search,
|
||||
.am-select,
|
||||
.am-tag-input,
|
||||
.am-rename-input {
|
||||
background: #111;
|
||||
border: 1px solid rgba(201, 168, 76, 0.24);
|
||||
border-radius: 8px;
|
||||
color: var(--brand-warm-white);
|
||||
padding: 0.5rem 0.7rem;
|
||||
font: inherit;
|
||||
font-size: 0.88rem;
|
||||
}
|
||||
|
||||
.am-select--compact { padding: 0.4rem 0.5rem; font-size: 0.78rem; }
|
||||
|
||||
.am-view-toggle { display: inline-flex; border: 1px solid rgba(201, 168, 76, 0.3); border-radius: 8px; overflow: hidden; }
|
||||
.am-view-toggle button { background: #111; color: var(--brand-warm-white); border: 0; padding: 0.5rem 0.9rem; cursor: pointer; font: inherit; font-size: 0.85rem; }
|
||||
.am-view-toggle button.is-active { background: var(--brand-gold); color: #111; font-weight: 600; }
|
||||
|
||||
.am-check-inline { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.85rem; cursor: pointer; }
|
||||
|
||||
.am-tagbar-label { font-size: 0.8rem; opacity: 0.7; }
|
||||
.am-chip { background: #151209; border: 1px solid rgba(201, 168, 76, 0.28); color: var(--brand-warm-white); border-radius: 999px; padding: 0.2rem 0.65rem; font: inherit; font-size: 0.78rem; cursor: pointer; }
|
||||
.am-chip.is-active { background: var(--brand-gold); color: #111; }
|
||||
.am-chip-count { opacity: 0.6; margin-left: 0.15rem; }
|
||||
|
||||
.am-summary { font-size: 0.82rem; opacity: 0.85; padding: 0.4rem 0; border-top: 1px solid rgba(201, 168, 76, 0.12); }
|
||||
.am-link-btn { background: none; border: 0; color: var(--brand-gold); text-decoration: underline; cursor: pointer; font: inherit; padding: 0; }
|
||||
|
||||
.am-bulkbar { position: sticky; top: 0; z-index: 5; background: #1a1608; border: 1px solid rgba(201, 168, 76, 0.45); border-radius: 10px; padding: 0.6rem 0.8rem; }
|
||||
|
||||
.am-list, .am-grid { list-style: none; margin: 0; padding: 0; }
|
||||
.am-list { display: flex; flex-direction: column; gap: 0.5rem; }
|
||||
|
||||
.am-row {
|
||||
display: grid;
|
||||
grid-template-columns: auto 88px minmax(0, 1.4fr) minmax(180px, 1fr) auto;
|
||||
gap: 0.9rem;
|
||||
align-items: center;
|
||||
padding: 0.65rem 0.8rem;
|
||||
background: #0f0d09;
|
||||
border: 1px solid rgba(201, 168, 76, 0.16);
|
||||
border-radius: 10px;
|
||||
}
|
||||
.am-row.is-selected, .am-card.is-selected { border-color: var(--brand-gold); background: #17130a; }
|
||||
|
||||
.am-thumb, .am-card-thumb {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
border: 1px solid rgba(201, 168, 76, 0.22);
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
text-decoration: none;
|
||||
}
|
||||
.am-thumb { width: 88px; height: 64px; }
|
||||
.am-thumb-img { width: 100%; height: 100%; object-fit: cover; display: block; }
|
||||
.am-thumb-file { font-weight: 700; font-size: 0.85rem; color: var(--brand-gold); letter-spacing: 0.05em; }
|
||||
|
||||
.am-main { min-width: 0; display: flex; flex-direction: column; gap: 0.35rem; }
|
||||
.am-name { color: var(--brand-warm-white); font-weight: 600; font-size: 0.92rem; overflow-wrap: anywhere; word-break: break-word; text-decoration: none; }
|
||||
.am-name:hover { color: var(--brand-gold); text-decoration: underline; }
|
||||
|
||||
.am-meta { display: flex; flex-wrap: wrap; gap: 0.3rem 0.8rem; align-items: center; font-size: 0.78rem; opacity: 0.85; }
|
||||
.am-badge { background: rgba(201, 168, 76, 0.14); color: var(--brand-gold); border-radius: 6px; padding: 0.1rem 0.45rem; }
|
||||
.am-used { color: #7fd48a; }
|
||||
.am-unused { opacity: 0.6; }
|
||||
|
||||
.am-tags { display: flex; flex-wrap: wrap; gap: 0.3rem; align-items: center; }
|
||||
.am-tag { display: inline-flex; align-items: center; background: rgba(201, 168, 76, 0.14); border-radius: 999px; font-size: 0.75rem; }
|
||||
.am-tag-label { background: none; border: 0; color: var(--brand-warm-white); padding: 0.15rem 0.2rem 0.15rem 0.6rem; cursor: pointer; font: inherit; }
|
||||
.am-tag-x { background: none; border: 0; color: var(--brand-warm-white); opacity: 0.6; padding: 0.15rem 0.5rem 0.15rem 0.2rem; cursor: pointer; font: inherit; }
|
||||
.am-tag-x:hover { opacity: 1; }
|
||||
.am-tag-input { width: 84px; padding: 0.2rem 0.5rem; font-size: 0.75rem; }
|
||||
|
||||
.am-actions { display: flex; flex-wrap: wrap; gap: 0.35rem; align-items: center; }
|
||||
.am-actions a.btn-admin-reset { text-decoration: none; display: inline-flex; align-items: center; }
|
||||
|
||||
.am-rename { display: flex; flex-wrap: wrap; gap: 0.35rem; align-items: center; }
|
||||
.am-rename-input { flex: 1 1 160px; min-width: 0; }
|
||||
.am-rename-ext { opacity: 0.7; font-size: 0.85rem; }
|
||||
|
||||
.am-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 0.9rem; }
|
||||
.am-card { position: relative; display: flex; flex-direction: column; background: #0f0d09; border: 1px solid rgba(201, 168, 76, 0.16); border-radius: 12px; overflow: hidden; }
|
||||
.am-card-thumb { width: 100%; height: 170px; border: 0; border-radius: 0; border-bottom: 1px solid rgba(201, 168, 76, 0.16); }
|
||||
.am-card-check { position: absolute; top: 0.6rem; left: 0.6rem; z-index: 2; width: 18px; height: 18px; }
|
||||
.am-card-body { display: flex; flex-direction: column; gap: 0.6rem; padding: 0.8rem; }
|
||||
|
||||
@media (max-width: 1100px) {
|
||||
.am-row { grid-template-columns: auto 88px minmax(0, 1fr); }
|
||||
.am-tags-cell, .am-actions-cell { grid-column: 2 / -1; }
|
||||
}
|
||||
|
||||
/* ── Inbox ── */
|
||||
.ib-root { max-width: none; }
|
||||
.ib-toolbar, .ib-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem; margin-bottom: 0.7rem; }
|
||||
.ib-search, .ib-select { background: #111; border: 1px solid rgba(201, 168, 76, 0.24); border-radius: 8px; color: var(--brand-warm-white); padding: 0.5rem 0.7rem; font: inherit; font-size: 0.88rem; }
|
||||
.ib-search { flex: 1 1 280px; min-width: 0; }
|
||||
.ib-tabs { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 0.7rem; border-bottom: 1px solid rgba(201, 168, 76, 0.15); }
|
||||
.ib-tab { background: none; border: 0; border-bottom: 2px solid transparent; color: var(--brand-warm-white); opacity: 0.7; padding: 0.5rem 0.9rem; cursor: pointer; font: inherit; font-size: 0.9rem; }
|
||||
.ib-tab.is-active { opacity: 1; border-bottom-color: var(--brand-gold); color: var(--brand-gold); }
|
||||
.ib-tab-count { margin-left: 0.4rem; font-size: 0.75rem; background: rgba(201, 168, 76, 0.16); border-radius: 999px; padding: 0.05rem 0.45rem; }
|
||||
.ib-check { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.85rem; cursor: pointer; }
|
||||
.ib-count { font-size: 0.82rem; opacity: 0.7; }
|
||||
.ib-bulk { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; margin-left: auto; }
|
||||
|
||||
.ib-layout { display: grid; grid-template-columns: minmax(0, 1fr); gap: 1rem; align-items: start; }
|
||||
.ib-layout.has-open { grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); }
|
||||
.ib-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; min-width: 0; }
|
||||
.ib-item { display: flex; gap: 0.6rem; align-items: flex-start; padding: 0.7rem 0.8rem; background: #0f0d09; border: 1px solid rgba(201, 168, 76, 0.14); border-radius: 10px; min-width: 0; }
|
||||
.ib-item.is-unread { border-left: 3px solid var(--brand-gold); background: #15110a; }
|
||||
.ib-item.is-open { border-color: var(--brand-gold); }
|
||||
.ib-item input[type="checkbox"] { margin-top: 0.3rem; flex-shrink: 0; }
|
||||
.ib-item-main { all: unset; box-sizing: border-box; display: flex; flex-direction: column; gap: 0.3rem; flex: 1; min-width: 0; cursor: pointer; color: var(--brand-warm-white); }
|
||||
.ib-item-top { display: flex; justify-content: space-between; gap: 0.75rem; flex-wrap: wrap; font-size: 0.82rem; }
|
||||
.ib-from { font-weight: 600; overflow-wrap: anywhere; }
|
||||
.ib-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--brand-gold); margin-right: 0.45rem; }
|
||||
.ib-date { opacity: 0.6; white-space: nowrap; }
|
||||
.ib-subject { font-size: 0.92rem; overflow-wrap: anywhere; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
|
||||
.ib-item.is-unread .ib-subject { font-weight: 600; }
|
||||
.ib-preview { font-size: 0.8rem; opacity: 0.6; overflow-wrap: anywhere; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
|
||||
.ib-tags { display: flex; flex-wrap: wrap; gap: 0.4rem 0.6rem; align-items: center; font-size: 0.75rem; }
|
||||
.ib-badge { background: rgba(201, 168, 76, 0.14); color: var(--brand-gold); border-radius: 6px; padding: 0.1rem 0.45rem; }
|
||||
.ib-badge--email { background: rgba(120, 160, 255, 0.15); color: #9db8ff; }
|
||||
.ib-badge--newsletter { background: rgba(127, 212, 138, 0.15); color: #7fd48a; }
|
||||
.ib-addr { opacity: 0.6; overflow-wrap: anywhere; }
|
||||
|
||||
.ib-detail { position: sticky; top: 0.5rem; background: #0f0d09; border: 1px solid rgba(201, 168, 76, 0.3); border-radius: 12px; padding: 1rem; min-width: 0; max-height: calc(100vh - 2rem); overflow-y: auto; }
|
||||
.ib-detail-head { display: flex; justify-content: space-between; gap: 1rem; align-items: flex-start; }
|
||||
.ib-detail-title { min-width: 0; }
|
||||
.ib-detail-title h3 { margin: 0 0 0.35rem; font-size: 1.05rem; overflow-wrap: anywhere; }
|
||||
.ib-detail-title p { margin: 0.15rem 0; font-size: 0.85rem; overflow-wrap: anywhere; }
|
||||
.ib-detail-sub { opacity: 0.6; font-size: 0.78rem !important; }
|
||||
.ib-detail-actions { display: flex; flex-wrap: wrap; gap: 0.4rem; margin: 0.8rem 0; padding-bottom: 0.8rem; border-bottom: 1px solid rgba(201, 168, 76, 0.15); align-items: center; }
|
||||
.ib-detail-actions a.btn-admin-save { text-decoration: none; display: inline-block; }
|
||||
.ib-body { white-space: pre-wrap; overflow-wrap: anywhere; line-height: 1.6; font-size: 0.9rem; }
|
||||
.ib-frame { width: 100%; height: 520px; border: 1px solid rgba(201, 168, 76, 0.2); border-radius: 8px; background: #fff; }
|
||||
|
||||
@media (max-width: 1100px) {
|
||||
.ib-layout.has-open { grid-template-columns: minmax(0, 1fr); }
|
||||
.ib-detail { position: static; max-height: none; }
|
||||
}
|
||||
Reference in new issue
Block a user