mirror of
https://github.com/juherr/kill-the-news.git
synced 2026-06-20 22:03:48 +00:00
fix(security): lock down admin + add bulk cleanup UI
This commit is contained in:
+181
-2
@@ -413,7 +413,7 @@ export const componentStyles = `
|
||||
|
||||
.email-raw pre {
|
||||
margin: 0;
|
||||
font-family: 'Menlo', monospace;
|
||||
font-family: var(--font-family-mono);
|
||||
font-size: 14px;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-word;
|
||||
@@ -482,6 +482,185 @@ export const componentStyles = `
|
||||
border-radius: var(--radius-md);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Toolbar + segmented control (Apple-ish) */
|
||||
.toolbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: var(--spacing-sm);
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: var(--spacing-md);
|
||||
}
|
||||
|
||||
.toolbar-group {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: var(--spacing-sm);
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.toolbar-group-fill {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
input.search {
|
||||
min-width: 280px;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.actions-row {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
margin-top: var(--spacing-md);
|
||||
}
|
||||
|
||||
.pill {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
height: 28px;
|
||||
padding: 0 10px;
|
||||
border-radius: var(--radius-pill);
|
||||
border: 1px solid var(--color-border);
|
||||
background-color: rgba(60, 60, 67, 0.12);
|
||||
color: var(--color-text-secondary);
|
||||
font-size: var(--font-size-sm);
|
||||
backdrop-filter: blur(var(--blur-sm));
|
||||
-webkit-backdrop-filter: blur(var(--blur-sm));
|
||||
}
|
||||
|
||||
.segmented {
|
||||
display: inline-flex;
|
||||
border-radius: var(--radius-pill);
|
||||
padding: 2px;
|
||||
border: 1px solid var(--color-border);
|
||||
background-color: rgba(60, 60, 67, 0.12);
|
||||
backdrop-filter: blur(var(--blur-sm));
|
||||
-webkit-backdrop-filter: blur(var(--blur-sm));
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.segmented-item {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 8px 12px;
|
||||
border-radius: var(--radius-pill);
|
||||
text-decoration: none;
|
||||
color: var(--color-text-secondary);
|
||||
font-size: var(--font-size-sm);
|
||||
font-weight: var(--font-weight-semibold);
|
||||
user-select: none;
|
||||
transition: all var(--transition-fast);
|
||||
}
|
||||
|
||||
.segmented-item:hover {
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.segmented-item.is-active {
|
||||
color: var(--color-text-primary);
|
||||
background-color: rgba(255, 255, 255, 0.12);
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
.segmented-item.is-active {
|
||||
background-color: rgba(255, 255, 255, 0.85);
|
||||
}
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
.table-wrap {
|
||||
overflow-x: auto;
|
||||
border-radius: var(--radius-lg);
|
||||
border: 1px solid var(--color-border);
|
||||
background-color: rgba(60, 60, 67, 0.05);
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
.table-wrap {
|
||||
background-color: rgba(255, 255, 255, 0.6);
|
||||
}
|
||||
}
|
||||
|
||||
table.table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table.table.table-feeds {
|
||||
min-width: 860px;
|
||||
}
|
||||
|
||||
table.table.table-emails {
|
||||
min-width: 760px;
|
||||
}
|
||||
|
||||
table.table th,
|
||||
table.table td {
|
||||
padding: 10px 12px;
|
||||
border-bottom: 1px solid var(--color-border);
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
table.table thead th {
|
||||
font-size: var(--font-size-sm);
|
||||
font-weight: var(--font-weight-semibold);
|
||||
color: var(--color-text-secondary);
|
||||
background-color: rgba(44, 44, 46, 0.35);
|
||||
backdrop-filter: blur(var(--blur-sm));
|
||||
-webkit-backdrop-filter: blur(var(--blur-sm));
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
table.table thead th {
|
||||
background-color: rgba(255, 255, 255, 0.55);
|
||||
}
|
||||
}
|
||||
|
||||
table.table tbody tr:hover {
|
||||
background-color: rgba(255, 255, 255, 0.04);
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
table.table tbody tr:hover {
|
||||
background-color: rgba(0, 0, 0, 0.03);
|
||||
}
|
||||
}
|
||||
|
||||
table.table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
table.table code {
|
||||
font-family: var(--font-family-mono);
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
/* Compact copy-to-clipboard for table cells */
|
||||
.copyable.copyable-inline {
|
||||
margin-bottom: 0;
|
||||
padding: 0;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.copyable.copyable-inline .copyable-content {
|
||||
padding: 6px 8px;
|
||||
border-radius: var(--radius-sm);
|
||||
}
|
||||
|
||||
.copyable.copyable-inline .copyable-value {
|
||||
margin-right: var(--spacing-xs);
|
||||
}
|
||||
|
||||
.row-actions {
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
/* Feed and Email Lists */
|
||||
.feed-list,
|
||||
@@ -490,4 +669,4 @@ export const componentStyles = `
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
`;
|
||||
`;
|
||||
|
||||
+10
-6
@@ -15,18 +15,22 @@ export const layoutStyles = `
|
||||
overflow-x: hidden;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
text-rendering: optimizeLegibility;
|
||||
|
||||
/* Add subtle gradient background */
|
||||
background-image: linear-gradient(135deg,
|
||||
rgba(0, 0, 0, 0.02) 0%,
|
||||
rgba(255, 255, 255, 0.02) 100%);
|
||||
/* Liquid-glass-ish background (subtle, non-distracting) */
|
||||
background-image:
|
||||
radial-gradient(1200px circle at 20% 10%, rgba(10, 132, 255, 0.18), transparent 55%),
|
||||
radial-gradient(900px circle at 80% 20%, rgba(94, 92, 230, 0.14), transparent 60%),
|
||||
radial-gradient(700px circle at 50% 100%, rgba(48, 209, 88, 0.10), transparent 60%),
|
||||
linear-gradient(135deg, rgba(255, 255, 255, 0.03) 0%, rgba(0, 0, 0, 0.03) 100%);
|
||||
background-attachment: fixed;
|
||||
}
|
||||
|
||||
/* Main Container */
|
||||
.container {
|
||||
width: 100%;
|
||||
max-width: 800px;
|
||||
max-width: 980px;
|
||||
margin: 0 auto;
|
||||
padding: var(--spacing-xl);
|
||||
box-sizing: border-box;
|
||||
@@ -168,4 +172,4 @@ export const layoutStyles = `
|
||||
margin-bottom: var(--spacing-md);
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
`;
|
||||
`;
|
||||
|
||||
+16
-1
@@ -11,6 +11,21 @@ export const utilityStyles = `
|
||||
.fade-in {
|
||||
animation: fadeIn 0.5s ease-out;
|
||||
}
|
||||
|
||||
.muted {
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.fade-in {
|
||||
animation: none;
|
||||
}
|
||||
|
||||
* {
|
||||
scroll-behavior: auto !important;
|
||||
transition-duration: 0.01ms !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Copyable content styling */
|
||||
.copyable {
|
||||
@@ -105,4 +120,4 @@ export const utilityStyles = `
|
||||
opacity: 1;
|
||||
transform: translate(-50%, -50%) scale(1);
|
||||
}
|
||||
`;
|
||||
`;
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
|
||||
export const variables = `
|
||||
:root {
|
||||
/* Typography - Using Inter font */
|
||||
--font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Arial, sans-serif;
|
||||
/* Typography - Prefer system UI fonts (Apple HIG-ish) */
|
||||
--font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", "Helvetica Neue", Arial, sans-serif;
|
||||
--font-family-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
color-scheme: light dark;
|
||||
--font-size-xs: 12px;
|
||||
--font-size-sm: 14px;
|
||||
--font-size-md: 16px;
|
||||
@@ -103,6 +105,5 @@ export const lightModeTheme = `
|
||||
|
||||
// Inter font import
|
||||
export const fontImport = `
|
||||
/* Inter Font Import */
|
||||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
|
||||
`;
|
||||
/* No external font imports. */
|
||||
`;
|
||||
|
||||
Reference in New Issue
Block a user