|
@@ -0,0 +1,1000 @@
|
|
|
+// 上传成功弹窗样式
|
|
|
+// @import '../../../styles/_variables';
|
|
|
+
|
|
|
+// 弹窗背景遮罩
|
|
|
+// 响应式断点
|
|
|
+$mobile-breakpoint: 768px;
|
|
|
+$tablet-breakpoint: 1024px;
|
|
|
+$desktop-breakpoint: 1200px;
|
|
|
+
|
|
|
+// 动画变量
|
|
|
+$animation-duration-fast: 0.2s;
|
|
|
+$animation-duration-normal: 0.3s;
|
|
|
+$animation-duration-slow: 0.5s;
|
|
|
+$animation-easing: cubic-bezier(0.25, 0.8, 0.25, 1);
|
|
|
+
|
|
|
+.modal-backdrop {
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ width: 100vw;
|
|
|
+ height: 100vh;
|
|
|
+ background: rgba(0, 0, 0, 0.6);
|
|
|
+ backdrop-filter: blur(4px);
|
|
|
+ z-index: 9999;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ padding: 1rem;
|
|
|
+
|
|
|
+ // 响应式调整
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ padding: 0.5rem;
|
|
|
+ align-items: flex-end;
|
|
|
+ }
|
|
|
+
|
|
|
+ @media (min-width: $mobile-breakpoint) and (max-width: $tablet-breakpoint) {
|
|
|
+ padding: 1rem;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 弹窗主容器
|
|
|
+.modal-container {
|
|
|
+ background: white;
|
|
|
+ border-radius: 16px;
|
|
|
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);
|
|
|
+ max-width: 600px;
|
|
|
+ width: 100%;
|
|
|
+ max-height: 90vh;
|
|
|
+ overflow: hidden;
|
|
|
+ position: relative;
|
|
|
+ transform-origin: center;
|
|
|
+
|
|
|
+ // 响应式调整
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ max-width: 100%;
|
|
|
+ border-radius: 16px 16px 0 0;
|
|
|
+ max-height: 85vh;
|
|
|
+ margin-top: auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ @media (min-width: $mobile-breakpoint) and (max-width: $tablet-breakpoint) {
|
|
|
+ max-width: 90%;
|
|
|
+ max-height: 85vh;
|
|
|
+ }
|
|
|
+
|
|
|
+ @media (min-width: $tablet-breakpoint) {
|
|
|
+ max-width: 600px;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 深色模式适配
|
|
|
+ @media (prefers-color-scheme: dark) {
|
|
|
+ background: #1a1a1a;
|
|
|
+ color: #ffffff;
|
|
|
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 弹窗头部
|
|
|
+.modal-header {
|
|
|
+ padding: 32px 32px 24px 32px; // 增加左右内边距,确保对称
|
|
|
+ border-bottom: 1px solid #f0f0f0;
|
|
|
+ display: flex;
|
|
|
+ align-items: flex-start;
|
|
|
+ justify-content: space-between;
|
|
|
+
|
|
|
+ // 响应式调整
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ padding: 24px 20px 20px 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ @media (min-width: $mobile-breakpoint) and (max-width: $tablet-breakpoint) {
|
|
|
+ padding: 28px 28px 22px 28px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .header-content {
|
|
|
+ display: flex;
|
|
|
+ align-items: flex-start;
|
|
|
+ gap: 16px;
|
|
|
+ flex: 1;
|
|
|
+ min-width: 0; // 防止内容溢出
|
|
|
+
|
|
|
+ .success-icon {
|
|
|
+ width: 48px;
|
|
|
+ height: 48px;
|
|
|
+ background: linear-gradient(135deg, #34C759, #30D158);
|
|
|
+ border-radius: 50%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ flex-shrink: 0;
|
|
|
+
|
|
|
+ svg {
|
|
|
+ color: white;
|
|
|
+ width: 24px;
|
|
|
+ height: 24px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .header-text {
|
|
|
+ flex: 1;
|
|
|
+ min-width: 0; // 防止文本溢出
|
|
|
+
|
|
|
+ h2 {
|
|
|
+ margin: 0 0 8px 0;
|
|
|
+ font-size: 20px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #1d1d1f;
|
|
|
+ line-height: 1.2;
|
|
|
+
|
|
|
+ // 响应式字体大小
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ font-size: 18px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #86868b;
|
|
|
+ line-height: 1.4;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ font-size: 13px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .close-button {
|
|
|
+ width: 36px;
|
|
|
+ height: 36px;
|
|
|
+ border: none;
|
|
|
+ background: #f2f2f7;
|
|
|
+ border-radius: 50%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+ flex-shrink: 0;
|
|
|
+ margin-left: 16px; // 确保与内容区域有适当间距
|
|
|
+
|
|
|
+ // 响应式调整
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ width: 32px;
|
|
|
+ height: 32px;
|
|
|
+ margin-left: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #e5e5ea;
|
|
|
+ transform: scale(1.05);
|
|
|
+ }
|
|
|
+
|
|
|
+ &:active {
|
|
|
+ transform: scale(0.95);
|
|
|
+ }
|
|
|
+
|
|
|
+ svg {
|
|
|
+ color: #86868b;
|
|
|
+ width: 18px;
|
|
|
+ height: 18px;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ width: 16px;
|
|
|
+ height: 16px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 弹窗内容
|
|
|
+.modal-content {
|
|
|
+ padding: 0 32px 32px 32px; // 与头部保持一致的左右内边距
|
|
|
+ overflow-y: auto;
|
|
|
+ flex: 1;
|
|
|
+
|
|
|
+ // 响应式调整
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ padding: 0 20px 24px 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ @media (min-width: $mobile-breakpoint) and (max-width: $tablet-breakpoint) {
|
|
|
+ padding: 0 28px 28px 28px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 上传文件列表
|
|
|
+.uploaded-files {
|
|
|
+ margin-bottom: 32px;
|
|
|
+
|
|
|
+ h3 {
|
|
|
+ margin: 0 0 20px 0;
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #1d1d1f;
|
|
|
+
|
|
|
+ // 响应式字体大小
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ font-size: 16px;
|
|
|
+ margin-bottom: 16px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .file-list {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .file-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 16px;
|
|
|
+ padding: 16px;
|
|
|
+ background: #f9f9f9;
|
|
|
+ border-radius: 12px;
|
|
|
+ border: 1px solid #e5e5ea;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+
|
|
|
+ // 响应式调整
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ padding: 12px;
|
|
|
+ gap: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #f5f5f7;
|
|
|
+ border-color: #d1d1d6;
|
|
|
+ }
|
|
|
+
|
|
|
+ .file-icon {
|
|
|
+ width: 48px;
|
|
|
+ height: 48px;
|
|
|
+ background: #007aff;
|
|
|
+ border-radius: 10px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ flex-shrink: 0;
|
|
|
+
|
|
|
+ // 响应式调整
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ width: 40px;
|
|
|
+ height: 40px;
|
|
|
+ border-radius: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ svg {
|
|
|
+ color: white;
|
|
|
+ width: 24px;
|
|
|
+ height: 24px;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ width: 20px;
|
|
|
+ height: 20px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .file-preview {
|
|
|
+ width: 48px;
|
|
|
+ height: 48px;
|
|
|
+ border-radius: 10px;
|
|
|
+ overflow: hidden;
|
|
|
+ flex-shrink: 0;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ width: 40px;
|
|
|
+ height: 40px;
|
|
|
+ border-radius: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ img {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ object-fit: cover;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .file-info {
|
|
|
+ flex: 1;
|
|
|
+ min-width: 0;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 4px;
|
|
|
+
|
|
|
+ .file-name {
|
|
|
+ font-size: 15px;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #1d1d1f;
|
|
|
+ white-space: nowrap;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ line-height: 1.3;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .file-size {
|
|
|
+ font-size: 13px;
|
|
|
+ color: #86868b;
|
|
|
+ line-height: 1.2;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .file-status {
|
|
|
+ width: 24px;
|
|
|
+ height: 24px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ flex-shrink: 0;
|
|
|
+
|
|
|
+ &.success {
|
|
|
+ svg {
|
|
|
+ width: 20px;
|
|
|
+ height: 20px;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ width: 18px;
|
|
|
+ height: 18px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 颜色分析区域
|
|
|
+.color-analysis-section {
|
|
|
+ border-top: 1px solid #f0f0f0;
|
|
|
+ padding-top: 24px;
|
|
|
+
|
|
|
+ .section-header {
|
|
|
+ margin-bottom: 24px;
|
|
|
+ text-align: center;
|
|
|
+
|
|
|
+ h4 {
|
|
|
+ margin: 0 0 8px 0;
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #1d1d1f;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ font-size: 16px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #86868b;
|
|
|
+ line-height: 1.5;
|
|
|
+ max-width: 400px;
|
|
|
+ margin: 0 auto;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ font-size: 13px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分析按钮
|
|
|
+ .analysis-action {
|
|
|
+ text-align: center;
|
|
|
+ padding: 20px 0 32px 0;
|
|
|
+
|
|
|
+ .analyze-btn {
|
|
|
+ display: inline-flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ gap: 10px;
|
|
|
+ padding: 14px 28px;
|
|
|
+ background: linear-gradient(135deg, #007aff, #0056cc);
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ border-radius: 12px;
|
|
|
+ font-size: 15px;
|
|
|
+ font-weight: 600;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+ min-width: 160px;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ padding: 12px 24px;
|
|
|
+ font-size: 14px;
|
|
|
+ min-width: 140px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover:not(:disabled) {
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 12px 24px rgba(0, 122, 255, 0.25);
|
|
|
+ background: linear-gradient(135deg, #0056cc, #003d99);
|
|
|
+ }
|
|
|
+
|
|
|
+ &:active {
|
|
|
+ transform: translateY(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ &:disabled {
|
|
|
+ opacity: 0.6;
|
|
|
+ cursor: not-allowed;
|
|
|
+ transform: none;
|
|
|
+ box-shadow: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ svg {
|
|
|
+ width: 20px;
|
|
|
+ height: 20px;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ width: 18px;
|
|
|
+ height: 18px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分析加载状态
|
|
|
+ .analysis-loading {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 16px;
|
|
|
+ padding: 24px;
|
|
|
+ background: #f9f9f9;
|
|
|
+ border-radius: 12px;
|
|
|
+
|
|
|
+ .loading-spinner {
|
|
|
+ width: 32px;
|
|
|
+ height: 32px;
|
|
|
+ border: 3px solid #e5e5ea;
|
|
|
+ border-top: 3px solid #007aff;
|
|
|
+ border-radius: 50%;
|
|
|
+ animation: spin 1s linear infinite;
|
|
|
+ flex-shrink: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .loading-text {
|
|
|
+ h5 {
|
|
|
+ margin: 0 0 4px 0;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #1d1d1f;
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #86868b;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分析结果
|
|
|
+ .analysis-result {
|
|
|
+ .result-header {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-bottom: 20px;
|
|
|
+
|
|
|
+ h5 {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #1d1d1f;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ font-size: 15px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .result-badge {
|
|
|
+ background: #34c759;
|
|
|
+ color: white;
|
|
|
+ font-size: 11px;
|
|
|
+ font-weight: 600;
|
|
|
+ padding: 4px 10px;
|
|
|
+ border-radius: 12px;
|
|
|
+ text-transform: uppercase;
|
|
|
+ letter-spacing: 0.5px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-palette {
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
|
|
+ gap: 16px;
|
|
|
+ margin-bottom: 24px;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
|
|
+ gap: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 12px;
|
|
|
+ padding: 12px;
|
|
|
+ background: white;
|
|
|
+ border: 1px solid #e5e5ea;
|
|
|
+ border-radius: 12px;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ padding: 10px;
|
|
|
+ gap: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ border-color: #007aff;
|
|
|
+ box-shadow: 0 2px 8px rgba(0, 122, 255, 0.1);
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-swatch {
|
|
|
+ width: 32px;
|
|
|
+ height: 32px;
|
|
|
+ border-radius: 8px;
|
|
|
+ border: 2px solid rgba(255, 255, 255, 0.8);
|
|
|
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
|
+ flex-shrink: 0;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ width: 28px;
|
|
|
+ height: 28px;
|
|
|
+ border-radius: 6px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-info {
|
|
|
+ flex: 1;
|
|
|
+ min-width: 0;
|
|
|
+
|
|
|
+ .color-value {
|
|
|
+ font-size: 12px;
|
|
|
+ font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
|
|
|
+ color: #1d1d1f;
|
|
|
+ margin-bottom: 4px;
|
|
|
+ white-space: nowrap;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ font-weight: 500;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ font-size: 11px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-percentage {
|
|
|
+ font-size: 11px;
|
|
|
+ color: #86868b;
|
|
|
+ font-weight: 600;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ font-size: 10px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .result-actions {
|
|
|
+ text-align: center;
|
|
|
+ padding-top: 8px;
|
|
|
+
|
|
|
+ .view-report-btn {
|
|
|
+ display: inline-flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ gap: 8px;
|
|
|
+ padding: 12px 20px;
|
|
|
+ background: #f2f2f7;
|
|
|
+ color: #007aff;
|
|
|
+ border: none;
|
|
|
+ border-radius: 10px;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 600;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+ min-width: 140px;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ padding: 10px 16px;
|
|
|
+ font-size: 13px;
|
|
|
+ min-width: 120px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #e5e5ea;
|
|
|
+ transform: translateY(-1px);
|
|
|
+ }
|
|
|
+
|
|
|
+ &:active {
|
|
|
+ transform: translateY(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ svg {
|
|
|
+ width: 18px;
|
|
|
+ height: 18px;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ width: 16px;
|
|
|
+ height: 16px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分析错误
|
|
|
+ .analysis-error {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 12px;
|
|
|
+ padding: 16px;
|
|
|
+ background: #fff2f2;
|
|
|
+ border: 1px solid #fecaca;
|
|
|
+ border-radius: 8px;
|
|
|
+
|
|
|
+ .error-icon {
|
|
|
+ width: 32px;
|
|
|
+ height: 32px;
|
|
|
+ background: #ef4444;
|
|
|
+ border-radius: 50%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ flex-shrink: 0;
|
|
|
+
|
|
|
+ svg {
|
|
|
+ color: white;
|
|
|
+ width: 16px;
|
|
|
+ height: 16px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .error-text {
|
|
|
+ flex: 1;
|
|
|
+
|
|
|
+ h5 {
|
|
|
+ margin: 0 0 4px 0;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #dc2626;
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #991b1b;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .retry-btn {
|
|
|
+ padding: 6px 12px;
|
|
|
+ background: #ef4444;
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ border-radius: 4px;
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 500;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #dc2626;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 弹窗底部操作区域
|
|
|
+.modal-footer {
|
|
|
+ padding: 24px 32px 32px;
|
|
|
+ border-top: 1px solid #e5e5ea;
|
|
|
+ background: #fafafa;
|
|
|
+ border-radius: 0 0 20px 20px;
|
|
|
+
|
|
|
+ @media (max-width: $tablet-breakpoint) {
|
|
|
+ padding: 20px 24px 24px;
|
|
|
+ }
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ padding: 16px 20px 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .footer-actions {
|
|
|
+ display: flex;
|
|
|
+ gap: 16px;
|
|
|
+ justify-content: flex-end;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ flex-direction: column-reverse;
|
|
|
+ gap: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .secondary-btn,
|
|
|
+ .primary-btn {
|
|
|
+ display: inline-flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ gap: 8px;
|
|
|
+ padding: 12px 24px;
|
|
|
+ border-radius: 10px;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 600;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+ border: none;
|
|
|
+ min-width: 120px;
|
|
|
+
|
|
|
+ @media (max-width: $mobile-breakpoint) {
|
|
|
+ width: 100%;
|
|
|
+ padding: 14px 24px;
|
|
|
+ }
|
|
|
+
|
|
|
+ svg {
|
|
|
+ width: 18px;
|
|
|
+ height: 18px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .secondary-btn {
|
|
|
+ background: #f2f2f7;
|
|
|
+ color: #1d1d1f;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #e5e5ea;
|
|
|
+ transform: translateY(-1px);
|
|
|
+ }
|
|
|
+
|
|
|
+ &:active {
|
|
|
+ transform: translateY(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .primary-btn {
|
|
|
+ background: linear-gradient(135deg, #007aff 0%, #0056cc 100%);
|
|
|
+ color: white;
|
|
|
+ box-shadow: 0 2px 8px rgba(0, 122, 255, 0.3);
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: linear-gradient(135deg, #0056cc 0%, #003d99 100%);
|
|
|
+ box-shadow: 0 4px 12px rgba(0, 122, 255, 0.4);
|
|
|
+ transform: translateY(-1px);
|
|
|
+ }
|
|
|
+
|
|
|
+ &:active {
|
|
|
+ transform: translateY(0);
|
|
|
+ box-shadow: 0 2px 6px rgba(0, 122, 255, 0.3);
|
|
|
+ }
|
|
|
+
|
|
|
+ &:disabled {
|
|
|
+ background: #c7c7cc;
|
|
|
+ color: #8e8e93;
|
|
|
+ cursor: not-allowed;
|
|
|
+ box-shadow: none;
|
|
|
+ transform: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .btn-spinner {
|
|
|
+ width: 14px;
|
|
|
+ height: 14px;
|
|
|
+ border: 2px solid rgba(255, 255, 255, 0.3);
|
|
|
+ border-top: 2px solid white;
|
|
|
+ border-radius: 50%;
|
|
|
+ animation: spin 1s linear infinite;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 动画
|
|
|
+@keyframes spin {
|
|
|
+ 0% { transform: rotate(0deg); }
|
|
|
+ 100% { transform: rotate(360deg); }
|
|
|
+}
|
|
|
+
|
|
|
+// 响应式设计
|
|
|
+@media (max-width: 768px) {
|
|
|
+ .modal-backdrop {
|
|
|
+ padding: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .modal-header {
|
|
|
+ padding: 20px 16px 12px;
|
|
|
+
|
|
|
+ .header-content {
|
|
|
+ gap: 12px;
|
|
|
+
|
|
|
+ .success-icon {
|
|
|
+ width: 40px;
|
|
|
+ height: 40px;
|
|
|
+
|
|
|
+ svg {
|
|
|
+ width: 20px;
|
|
|
+ height: 20px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .header-text {
|
|
|
+ h3 {
|
|
|
+ font-size: 18px;
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ font-size: 13px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .modal-body {
|
|
|
+ padding: 0 16px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .modal-footer {
|
|
|
+ padding: 12px 16px 20px;
|
|
|
+
|
|
|
+ .footer-actions {
|
|
|
+ flex-direction: column-reverse;
|
|
|
+
|
|
|
+ .secondary-btn,
|
|
|
+ .primary-btn {
|
|
|
+ width: 100%;
|
|
|
+ justify-content: center;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-analysis-section {
|
|
|
+ .color-palette {
|
|
|
+ grid-template-columns: 1fr;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 深色模式支持
|
|
|
+@media (prefers-color-scheme: dark) {
|
|
|
+ .modal-container {
|
|
|
+ background: #1c1c1e;
|
|
|
+
|
|
|
+ .modal-header {
|
|
|
+ border-bottom-color: #38383a;
|
|
|
+
|
|
|
+ .header-text {
|
|
|
+ h3 {
|
|
|
+ color: #f2f2f7;
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ color: #8e8e93;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .close-btn {
|
|
|
+ background: #2c2c2e;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #3a3a3c;
|
|
|
+ }
|
|
|
+
|
|
|
+ svg {
|
|
|
+ color: #8e8e93;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .uploaded-files-section {
|
|
|
+ h4 {
|
|
|
+ color: #f2f2f7;
|
|
|
+ }
|
|
|
+
|
|
|
+ .file-item {
|
|
|
+ background: #2c2c2e;
|
|
|
+ border-color: #48484a;
|
|
|
+
|
|
|
+ .file-info {
|
|
|
+ .file-name {
|
|
|
+ color: #f2f2f7;
|
|
|
+ }
|
|
|
+
|
|
|
+ .file-size {
|
|
|
+ color: #8e8e93;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-analysis-section {
|
|
|
+ .section-header {
|
|
|
+ h4 {
|
|
|
+ color: #f2f2f7;
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ color: #8e8e93;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .analysis-loading {
|
|
|
+ background: #2c2c2e;
|
|
|
+
|
|
|
+ .loading-text {
|
|
|
+ h5 {
|
|
|
+ color: #f2f2f7;
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ color: #8e8e93;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .analysis-result {
|
|
|
+ .result-header {
|
|
|
+ h5 {
|
|
|
+ color: #f2f2f7;
|
|
|
+ }
|
|
|
+
|
|
|
+ .result-count {
|
|
|
+ background: #2c2c2e;
|
|
|
+ color: #8e8e93;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-palette {
|
|
|
+ .color-item {
|
|
|
+ background: #2c2c2e;
|
|
|
+ border-color: #48484a;
|
|
|
+
|
|
|
+ .color-info {
|
|
|
+ .color-value {
|
|
|
+ color: #f2f2f7;
|
|
|
+ }
|
|
|
+
|
|
|
+ .color-percentage {
|
|
|
+ color: #8e8e93;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .result-actions {
|
|
|
+ .view-report-btn {
|
|
|
+ background: #2c2c2e;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #3a3a3c;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .modal-footer {
|
|
|
+ border-top-color: #38383a;
|
|
|
+
|
|
|
+ .footer-actions {
|
|
|
+ .secondary-btn {
|
|
|
+ background: #2c2c2e;
|
|
|
+ color: #f2f2f7;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #3a3a3c;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|