Sub2API v1.0 - AI API 网关(二开初始版本,基于上游 Wei-Shaw/sub2api)
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
/* Shared rich-text styles for announcement popup and bell detail content. */
|
||||
.markdown-body {
|
||||
@apply text-[15px] leading-[1.75];
|
||||
@apply text-gray-700 dark:text-gray-300;
|
||||
}
|
||||
|
||||
.markdown-body h1 {
|
||||
@apply mb-6 mt-8 border-b border-gray-200 pb-3 text-3xl font-bold text-gray-900 dark:border-dark-600 dark:text-white;
|
||||
}
|
||||
|
||||
.markdown-body h2 {
|
||||
@apply mb-4 mt-7 border-b border-gray-100 pb-2 text-2xl font-bold text-gray-900 dark:border-dark-700 dark:text-white;
|
||||
}
|
||||
|
||||
.markdown-body h3 {
|
||||
@apply mb-3 mt-6 text-xl font-semibold text-gray-900 dark:text-white;
|
||||
}
|
||||
|
||||
.markdown-body h4 {
|
||||
@apply mb-2 mt-5 text-lg font-semibold text-gray-900 dark:text-white;
|
||||
}
|
||||
|
||||
.markdown-body p {
|
||||
@apply mb-4 leading-relaxed;
|
||||
}
|
||||
|
||||
.markdown-body a {
|
||||
@apply font-medium text-blue-600 underline decoration-blue-600/30 decoration-2 underline-offset-2 transition-all hover:decoration-blue-600 dark:text-blue-400 dark:decoration-blue-400/30 dark:hover:decoration-blue-400;
|
||||
}
|
||||
|
||||
.markdown-body ul,
|
||||
.markdown-body ol {
|
||||
@apply mb-4 ml-6 space-y-2;
|
||||
}
|
||||
|
||||
.markdown-body ul {
|
||||
@apply list-disc;
|
||||
}
|
||||
|
||||
.markdown-body ol {
|
||||
@apply list-decimal;
|
||||
}
|
||||
|
||||
.markdown-body li {
|
||||
@apply pl-2 leading-relaxed;
|
||||
}
|
||||
|
||||
.markdown-body li::marker {
|
||||
@apply text-blue-600 dark:text-blue-400;
|
||||
}
|
||||
|
||||
.markdown-body blockquote {
|
||||
@apply relative my-5 border-l-4 border-blue-500 bg-blue-50/50 py-3 pl-5 pr-4 italic text-gray-700 dark:border-blue-400 dark:bg-blue-900/10 dark:text-gray-300;
|
||||
}
|
||||
|
||||
.markdown-body blockquote::before {
|
||||
content: '"';
|
||||
@apply absolute -left-1 top-0 font-serif text-5xl text-blue-500/20 dark:text-blue-400/20;
|
||||
}
|
||||
|
||||
.markdown-body code {
|
||||
@apply rounded-lg bg-gray-100 px-2 py-1 font-mono text-[13px] text-pink-600 dark:bg-dark-700 dark:text-pink-400;
|
||||
}
|
||||
|
||||
.markdown-body pre {
|
||||
@apply my-5 overflow-x-auto rounded-xl border border-gray-200 bg-gray-50 p-5 dark:border-dark-600 dark:bg-dark-900/50;
|
||||
}
|
||||
|
||||
.markdown-body pre code {
|
||||
@apply bg-transparent p-0 text-[13px] text-gray-800 dark:text-gray-200;
|
||||
}
|
||||
|
||||
.markdown-body hr {
|
||||
@apply my-8 border-0 border-t-2 border-gray-200 dark:border-dark-700;
|
||||
}
|
||||
|
||||
.markdown-body table {
|
||||
@apply mb-5 w-full overflow-hidden rounded-lg border border-gray-200 dark:border-dark-600;
|
||||
}
|
||||
|
||||
.markdown-body th,
|
||||
.markdown-body td {
|
||||
@apply border-b border-r border-gray-200 px-4 py-3 text-left dark:border-dark-600;
|
||||
}
|
||||
|
||||
.markdown-body th:last-child,
|
||||
.markdown-body td:last-child {
|
||||
@apply border-r-0;
|
||||
}
|
||||
|
||||
.markdown-body tr:last-child td {
|
||||
@apply border-b-0;
|
||||
}
|
||||
|
||||
.markdown-body th {
|
||||
@apply bg-gradient-to-br from-blue-50 to-indigo-50 font-semibold text-gray-900 dark:from-blue-900/20 dark:to-indigo-900/10 dark:text-white;
|
||||
}
|
||||
|
||||
.markdown-body tbody tr {
|
||||
@apply transition-colors hover:bg-gray-50 dark:hover:bg-dark-700/30;
|
||||
}
|
||||
|
||||
.markdown-body img {
|
||||
@apply my-5 max-w-full rounded-xl border border-gray-200 shadow-md dark:border-dark-600;
|
||||
}
|
||||
|
||||
.markdown-body strong {
|
||||
@apply font-semibold text-gray-900 dark:text-white;
|
||||
}
|
||||
|
||||
.markdown-body em {
|
||||
@apply italic text-gray-600 dark:text-gray-400;
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
/* Sub2API Interactive Tour Styles - DOM Restructured Version */
|
||||
|
||||
/* 1. Overlay & Highlight */
|
||||
.driver-overlay {
|
||||
position: fixed !important;
|
||||
inset: 0 !important;
|
||||
z-index: 99999998 !important;
|
||||
background-color: transparent !important;
|
||||
/*
|
||||
* 关键修复:让 overlay 不拦截点击事件
|
||||
* 因为已设置 allowClose: false,用户不能通过点击遮罩关闭引导
|
||||
* 这样 Select 下拉菜单等脱离高亮区域的元素才能正常交互
|
||||
* 视觉遮罩效果保持不变(SVG 仍然渲染,pointer-events 只影响交互不影响渲染)
|
||||
*/
|
||||
pointer-events: none !important;
|
||||
}
|
||||
|
||||
.driver-overlay svg {
|
||||
pointer-events: none !important;
|
||||
}
|
||||
|
||||
.driver-active-element {
|
||||
position: relative !important;
|
||||
z-index: 99999999 !important;
|
||||
outline: 4px solid rgba(20, 184, 166, 0.2) !important;
|
||||
border-radius: 4px !important;
|
||||
}
|
||||
|
||||
/* 2. Popover Container */
|
||||
.driver-popover.theme-tour-popover {
|
||||
position: fixed !important;
|
||||
z-index: 100000000 !important;
|
||||
background-color: #ffffff !important;
|
||||
border: 1px solid #e5e7eb !important;
|
||||
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04) !important;
|
||||
border-radius: 12px !important;
|
||||
padding: 0 !important;
|
||||
max-width: min(440px, 90vw) !important; /* Responsive on small screens */
|
||||
color: #1f2937 !important;
|
||||
font-family: ui-sans-serif, system-ui, sans-serif !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
.dark .driver-popover.theme-tour-popover {
|
||||
background-color: #1e293b !important;
|
||||
border-color: #334155 !important;
|
||||
color: #f3f4f6 !important;
|
||||
}
|
||||
|
||||
/* 3. Header Area */
|
||||
.theme-tour-popover .driver-popover-title {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
padding: 20px 24px 12px 24px !important;
|
||||
margin: 0 !important;
|
||||
background-color: transparent !important;
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
.driver-popover-title-text {
|
||||
font-size: 18px !important;
|
||||
font-weight: 700 !important;
|
||||
color: #111827 !important;
|
||||
line-height: 1.3 !important;
|
||||
padding-right: 100px !important; /* Ensure title doesn't overlap Skip/Close */
|
||||
}
|
||||
.dark .driver-popover-title-text { color: #ffffff !important; }
|
||||
|
||||
/* Close Button */
|
||||
.theme-tour-popover .driver-popover-close-btn {
|
||||
position: absolute !important;
|
||||
top: 18px !important;
|
||||
right: 20px !important;
|
||||
width: 28px !important;
|
||||
height: 28px !important;
|
||||
padding: 0 !important;
|
||||
color: #9ca3af !important;
|
||||
background-color: transparent !important;
|
||||
border: none !important;
|
||||
z-index: 20 !important;
|
||||
border-radius: 4px !important;
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
justify-content: center !important;
|
||||
}
|
||||
.theme-tour-popover .driver-popover-close-btn:hover { background-color: #f3f4f6 !important; color: #4b5563 !important; }
|
||||
.dark .theme-tour-popover .driver-popover-close-btn:hover { background-color: #334155 !important; }
|
||||
|
||||
/* 4. Body Content */
|
||||
.theme-tour-popover .driver-popover-description {
|
||||
display: block !important;
|
||||
font-size: 14px !important;
|
||||
font-weight: 400 !important;
|
||||
color: #4b5563 !important;
|
||||
padding: 0 24px 24px 24px !important;
|
||||
margin: 0 !important;
|
||||
line-height: 1.6 !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
.dark .theme-tour-popover .driver-popover-description { color: #cbd5e1 !important; }
|
||||
|
||||
/* 5. Footer Area - Flex Row with Left/Right Containers */
|
||||
.theme-tour-popover .driver-popover-footer {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
justify-content: space-between !important; /* Push Left and Right apart */
|
||||
padding: 16px 24px !important;
|
||||
background-color: #f9fafb !important;
|
||||
border-top: 1px solid #f3f4f6 !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
.dark .theme-tour-popover .driver-popover-footer {
|
||||
background-color: #0f172a !important;
|
||||
border-top-color: #1e293b !important;
|
||||
}
|
||||
|
||||
/* Left Container: Progress + Shortcuts */
|
||||
.footer-left {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
gap: 16px !important;
|
||||
}
|
||||
|
||||
/* Right Container: Buttons */
|
||||
.footer-right {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
gap: 8px !important;
|
||||
}
|
||||
|
||||
/* Progress */
|
||||
.theme-tour-popover .driver-popover-progress-text {
|
||||
font-size: 13px !important;
|
||||
color: #6b7280 !important;
|
||||
margin: 0 !important;
|
||||
font-weight: 500 !important;
|
||||
white-space: nowrap !important;
|
||||
}
|
||||
.dark .theme-tour-popover .driver-popover-progress-text { color: #9ca3af !important; }
|
||||
|
||||
/* Shortcuts (Divider + Keys) */
|
||||
.footer-shortcuts {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
gap: 12px !important;
|
||||
padding-left: 16px !important;
|
||||
border-left: 1px solid #e5e7eb !important;
|
||||
height: 20px !important;
|
||||
}
|
||||
.dark .footer-shortcuts { border-left-color: #334155 !important; }
|
||||
|
||||
.shortcut-item {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
gap: 4px !important;
|
||||
font-size: 12px !important;
|
||||
color: #6b7280 !important;
|
||||
white-space: nowrap !important;
|
||||
}
|
||||
.dark .shortcut-item { color: #94a3b8 !important; }
|
||||
|
||||
.shortcut-item kbd {
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, monospace !important;
|
||||
background-color: #ffffff !important;
|
||||
border: 1px solid #e5e7eb !important;
|
||||
border-radius: 4px !important;
|
||||
padding: 1px 6px !important;
|
||||
font-size: 11px !important;
|
||||
font-weight: 600 !important;
|
||||
color: #4b5563 !important;
|
||||
box-shadow: 0 1px 0 rgba(0,0,0,0.05) !important;
|
||||
min-width: 20px !important;
|
||||
text-align: center !important;
|
||||
display: inline-block !important;
|
||||
}
|
||||
.dark .shortcut-item kbd {
|
||||
background-color: #1e293b !important;
|
||||
border-color: #475569 !important;
|
||||
color: #cbd5e1 !important;
|
||||
}
|
||||
|
||||
/* Nav Buttons */
|
||||
.theme-tour-popover button {
|
||||
display: inline-flex !important;
|
||||
align-items: center !important;
|
||||
justify-content: center !important;
|
||||
padding: 8px 16px !important;
|
||||
font-size: 13px !important;
|
||||
font-weight: 500 !important;
|
||||
border-radius: 6px !important;
|
||||
cursor: pointer !important;
|
||||
transition: all 0.2s !important;
|
||||
border: 1px solid transparent !important;
|
||||
line-height: 1.2 !important;
|
||||
white-space: nowrap !important; /* Force no wrap */
|
||||
}
|
||||
|
||||
.theme-tour-popover .driver-popover-next-btn {
|
||||
background-color: #14b8a6 !important;
|
||||
color: #ffffff !important;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;
|
||||
}
|
||||
.theme-tour-popover .driver-popover-next-btn:hover { background-color: #0d9488 !important; }
|
||||
|
||||
.theme-tour-popover .driver-popover-prev-btn {
|
||||
background-color: white !important;
|
||||
color: #6b7280 !important;
|
||||
border: 1px solid #e5e7eb !important;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;
|
||||
}
|
||||
.theme-tour-popover .driver-popover-prev-btn:hover { background-color: #f9fafb !important; color: #374151 !important; }
|
||||
.dark .theme-tour-popover .driver-popover-prev-btn {
|
||||
background-color: #1e293b !important;
|
||||
border-color: #475569 !important;
|
||||
color: #9ca3af !important;
|
||||
}
|
||||
|
||||
/* Arrows */
|
||||
.driver-popover-arrow { z-index: 100000001 !important; }
|
||||
.driver-popover-arrow-side-left.driver-popover-arrow { border-left-color: #ffffff !important; }
|
||||
.driver-popover-arrow-side-right.driver-popover-arrow { border-right-color: #ffffff !important; }
|
||||
.driver-popover-arrow-side-top.driver-popover-arrow { border-top-color: #ffffff !important; }
|
||||
.driver-popover-arrow-side-bottom.driver-popover-arrow { border-bottom-color: #ffffff !important; }
|
||||
|
||||
.dark .driver-popover-arrow-side-left.driver-popover-arrow { border-left-color: #1e293b !important; }
|
||||
.dark .driver-popover-arrow-side-right.driver-popover-arrow { border-right-color: #1e293b !important; }
|
||||
.dark .driver-popover-arrow-side-top.driver-popover-arrow { border-top-color: #1e293b !important; }
|
||||
.dark .driver-popover-arrow-side-bottom.driver-popover-arrow { border-bottom-color: #1e293b !important; }
|
||||
Reference in New Issue
Block a user