@import url('tokens.css'); @import url('components.css'); .soon-portal-topbar { position: fixed; top: 0; left: 0; right: 0; height: 52px; display: flex; align-items: center; justify-content: space-between; padding: 0 clamp(16px, 3vw, 28px); background: var(--soon-bg-sidebar); border-bottom: 1px solid var(--soon-border-subtle); z-index: 1000; } .soon-portal-topbar__brand { display: flex; align-items: center; gap: 10px; color: var(--soon-text-strong); font-weight: 600; font-size: 17px; letter-spacing: 0.02em; } .soon-portal-topbar__brand img { width: 32px; height: 32px; border-radius: 8px; } .soon-portal-topbar__actions { display: flex; align-items: center; justify-content: flex-end; gap: 0; min-height: 32px; } .soon-portal-topbar__tools { display: inline-flex; align-items: center; gap: 16px; } .soon-portal-topbar__links { display: inline-flex; align-items: center; gap: 16px; } .soon-portal-topbar__account { display: inline-flex; align-items: center; gap: 10px; margin-left: 20px; padding-left: 20px; border-left: 1px solid rgba(255, 255, 255, 0.12); } .soon-portal-topbar__session { display: inline-flex; align-items: center; gap: 0; margin-left: 20px; padding-left: 20px; border-left: 1px solid rgba(255, 255, 255, 0.12); } .soon-portal-topbar__guest { display: inline-flex; align-items: center; gap: 10px; margin-left: 20px; padding-left: 20px; border-left: 1px solid rgba(255, 255, 255, 0.12); } .soon-portal-avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--soon-accent); color: #fff; display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 14px; font-weight: 600; line-height: 1; } .soon-portal-identity { display: inline-flex; align-items: center; height: 32px; font-size: 13px; line-height: 1; color: var(--soon-text-muted); max-width: 260px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .soon-portal-identity--member { color: var(--soon-accent); font-weight: 600; } .soon-portal-identity--free { color: var(--soon-text-muted); } .soon-portal-topbar a.soon-portal-topbar__link { display: inline-flex; align-items: center; justify-content: center; height: 32px; padding: 0 10px; color: var(--soon-text); text-decoration: none; font-size: var(--soon-font-sm); line-height: 1; white-space: nowrap; transition: color 0.2s; } .soon-portal-topbar__session .soon-portal-topbar__link + .soon-portal-topbar__link { margin-left: 4px; padding-left: 14px; position: relative; } .soon-portal-topbar__session .soon-portal-topbar__link + .soon-portal-topbar__link::before { content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%); width: 1px; height: 14px; background: rgba(255, 255, 255, 0.18); } .soon-portal-topbar a.soon-portal-topbar__link:hover { color: var(--soon-accent); text-decoration: none; } .soon-portal-topbar .soon-btn { color: #fff; text-decoration: none; } .soon-portal-topbar .soon-btn:hover { text-decoration: none; } .soon-portal-topbar .soon-btn--ghost { background: transparent; box-shadow: none; border-color: var(--soon-border-subtle); } .soon-portal-topbar .soon-btn--ghost:hover { border-color: var(--soon-accent); color: var(--soon-accent); background: var(--soon-accent-soft); box-shadow: none; } .soon-section { margin-bottom: var(--soon-section-gap); } .soon-section--recent { flex: 1; min-height: 0; display: flex; flex-direction: column; overflow: hidden; } .soon-templates-section { flex-shrink: 0; margin-top: 0; animation: soon-fadeInUp 0.4s var(--soon-ease); } .soon-section-title--bar { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: 12px; } .soon-section-title__main { display: inline-flex; align-items: center; gap: 8px; flex-shrink: 0; } .soon-section-title__lead { flex: 1; min-width: 160px; margin: 0; font-size: var(--soon-font-sm); color: var(--soon-text-muted); line-height: 1.5; } .soon-templates-strip-wrap { display: flex; align-items: stretch; gap: 8px; } .soon-templates-strip { flex: 1; min-width: 0; display: flex; flex-wrap: nowrap; align-items: stretch; gap: 14px; overflow: hidden; padding: 4px 0 8px; } .soon-templates-strip__nav { flex-shrink: 0; align-self: center; width: 32px; height: 32px; padding: 0; border: 1px solid var(--soon-border-subtle); border-radius: var(--soon-radius-sm); background: var(--soon-bg-elevated); color: var(--soon-text-muted); font-size: 20px; line-height: 1; cursor: pointer; transition: color 0.15s, border-color 0.15s, background 0.15s; } .soon-templates-strip__nav:hover:not(:disabled) { color: var(--soon-text-strong); border-color: var(--soon-accent); background: var(--soon-accent-soft); } .soon-templates-strip__nav:disabled { opacity: 0.35; cursor: not-allowed; } .soon-plan-current__meta { color: var(--soon-text-muted); font-size: var(--soon-font-sm); margin: 0; } .soon-plan-current__usage { color: var(--soon-text-muted); font-size: var(--soon-font-xs); margin-top: var(--soon-space-sm); } .soon-progress__bar--warn { background: var(--soon-warning); } .soon-plan-card__features { margin: 0 0 var(--soon-space-lg); padding: 0; list-style: none; color: var(--soon-text-muted); font-size: var(--soon-font-sm); } .soon-plan-card__features li { padding: var(--soon-space-xs) 0; } .soon-plan-card__free { color: var(--soon-text-muted); font-size: var(--soon-font-sm); } .soon-pay-modal__title { color: var(--soon-text-strong); margin: 0 0 var(--soon-space-md); } .soon-pay-channel[data-ch="wechat"].is-active, .soon-pay-channel[data-ch="wechat"]:hover { border-color: #07c160; color: #07c160; } .soon-pay-channel[data-ch="alipay"].is-active, .soon-pay-channel[data-ch="alipay"]:hover { border-color: #1677ff; color: #1677ff; } .soon-member-page { min-height: 100vh; background: var(--soon-bg-deep); font-family: var(--soon-font); padding: calc(52px + var(--soon-space-xl)) var(--soon-space-xl) var(--soon-space-xl); animation: soon-fadeInUp 0.4s; } .soon-member-wrap { max-width: 960px; margin: 0 auto; } .soon-templates-strip .soon-empty--inline { flex: 1 1 100%; width: 100%; min-width: 100%; } .soon-member-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--soon-space-xl); } .soon-member-header h1 { color: var(--soon-text-strong); margin: 0; font-size: 28px; } .soon-plan-current { background: var(--soon-bg-panel); border: 1px solid var(--soon-border); border-radius: var(--soon-radius); padding: var(--soon-space-lg); margin-bottom: var(--soon-space-xl); } .soon-plan-current h2 { color: var(--soon-text-strong); margin: 0 0 var(--soon-space-sm); font-size: 18px; } .soon-progress { height: 6px; background: var(--soon-bg-deep); border-radius: 3px; margin-top: var(--soon-space-md); overflow: hidden; } .soon-progress__bar { height: 100%; background: var(--soon-accent); border-radius: 3px; transition: width 0.3s; } .soon-plans-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: var(--soon-space-lg); } .soon-plan-card { background: var(--soon-bg-panel); border: 1px solid var(--soon-border); border-radius: var(--soon-radius); padding: var(--soon-space-lg); position: relative; transition: transform 0.2s, border-color 0.2s; } .soon-plan-card:hover { transform: translateY(-2px); border-color: var(--soon-accent); } .soon-plan-card--featured { border-color: var(--soon-accent); box-shadow: 0 0 0 1px rgba(0, 150, 136, 0.3); } .soon-plan-card__badge { position: absolute; top: -12px; right: 16px; width: 48px; height: 48px; } .soon-plan-card__name { color: var(--soon-text-strong); font-size: 18px; margin-bottom: var(--soon-space-sm); } .soon-plan-card__price { color: var(--soon-accent); font-size: 28px; font-weight: 600; margin-bottom: var(--soon-space-md); } .soon-plan-card__meta { color: var(--soon-text-muted); font-size: 13px; margin-bottom: var(--soon-space-lg); } .soon-pay-modal { padding: var(--soon-space-lg); text-align: center; } .soon-pay-channels { display: flex; gap: var(--soon-space-md); justify-content: center; margin-bottom: var(--soon-space-lg); } .soon-pay-channel { padding: var(--soon-space-md) var(--soon-space-lg); border: 1px solid var(--soon-border); border-radius: var(--soon-radius); cursor: pointer; background: var(--soon-bg-panel); color: var(--soon-text); transition: border-color 0.2s; } .soon-pay-channel:hover, .soon-pay-channel.is-active { border-color: var(--soon-accent); color: var(--soon-accent); } .soon-pay-qr { min-height: 200px; display: flex; align-items: center; justify-content: center; } .soon-pay-qr img { max-width: 200px; } .soon-pay-status { margin-top: var(--soon-space-md); color: var(--soon-text-muted); font-size: 13px; } .soon-home, .soon-home html, .soon-home body { width: 100%; height: 100%; overflow: hidden; margin: 0; padding: 0; background-color: var(--soon-bg-deep); font-family: var(--soon-font); -webkit-user-select: none; } .soon-home .layui-fluid.main { height: 100%; padding-top: 52px; display: flex; flex-direction: column; box-sizing: border-box; } .soon-home .layui-row { height: 100%; display: flex; } .soon-home .layui-col-md2 { width: 240px; flex-shrink: 0; background: var(--soon-bg-sidebar); border-right: 1px solid var(--soon-border-subtle); height: 100%; overflow-y: auto; } .soon-home-sidebar { padding: 20px 16px; display: flex; flex-direction: column; gap: 12px; } .soon-home-sidebar__title { font-size: var(--soon-font-md); font-weight: 600; color: var(--soon-text-strong); margin: 0 0 8px; padding: 0; border: none; } .soon-home-new-card { cursor: pointer; border-radius: var(--soon-radius-sm); background: var(--soon-bg-panel); border: 1px solid transparent; padding: 14px 12px; transition: background 0.2s var(--soon-ease), border-color 0.2s; } .soon-home-new-card:hover { background: var(--soon-bg-elevated); border-color: var(--soon-border); } .soon-home-new-card .rect { width: 100%; height: auto; min-height: 0; background: transparent; border: none; border-radius: 0; padding: 0; display: flex; flex-direction: column; align-items: center; gap: 8px; } .soon-home-new-card .rect img { width: 72px; height: 72px; object-fit: contain; margin: 0; } .soon-home-new-card .tip { color: var(--soon-text); font-size: var(--soon-font-sm); font-weight: 400; text-align: center; line-height: 1.4; } .soon-home-new-card:hover .tip { color: var(--soon-text-strong); } .soon-home .left .card { margin: 0; } .soon-home .layui-col-md10 { flex: 1; background: var(--soon-bg-content); height: 100%; overflow: hidden; } .soon-home .right { padding: 20px 24px; height: 100%; display: flex; flex-direction: column; overflow: hidden; gap: 16px; box-sizing: border-box; } .soon-home-panel { background: var(--soon-bg-panel); border: 1px solid var(--soon-border-subtle); border-radius: var(--soon-radius); padding: 16px; display: flex; flex-direction: column; min-height: 0; } .soon-section--recent.soon-home-panel { flex: 1; min-height: 430px; } .soon-templates-section.soon-home-panel { flex-shrink: 0; } .soon-home .card-list, .soon-home-recent-grid { margin-top: 0; flex: 1 1 auto; min-height: 340px; overflow: hidden; display: grid; grid-template-columns: repeat(auto-fill, 168px); gap: 16px; align-content: start; justify-content: start; padding: 4px 2px 8px; } .soon-home .card-list > .card, .soon-home-recent-grid > .card, .soon-home .soon-templates-strip > .card { width: 168px; max-width: 168px; flex-shrink: 0; margin: 0; } .soon-section--recent #filePager { flex-shrink: 0; margin-top: auto; padding-top: 10px; border-top: 1px solid var(--soon-border-subtle); } .soon-home .card-list .rect, .soon-home .soon-templates-strip .rect { width: 168px; height: 160px; background: var(--soon-bg-panel); border: 1px solid var(--soon-border-subtle); border-radius: var(--soon-radius-sm); padding: 0; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; transition: transform 0.2s, border-color 0.2s, box-shadow 0.2s; position: relative; cursor: pointer; overflow: hidden; box-sizing: border-box; } .soon-home .card-list .rect:hover, .soon-home .soon-templates-strip .rect:hover { border-color: var(--soon-accent); background: var(--soon-bg-elevated); } .soon-home .card-list .rect img, .soon-home .soon-templates-strip .rect img { display: block; width: 100%; height: 135px; flex-shrink: 0; object-fit: contain; object-position: center center; margin: 0; background: var(--soon-bg-deep); padding: 2px; box-sizing: border-box; border-radius: 4px; transition: transform 0.3s; } .soon-home .card-list .rect1 img, .soon-home .soon-templates-strip .rect1 img { transform: scale(0.8); } .soon-home .card-list .rect1:hover img, .soon-home .soon-templates-strip .rect1:hover img { transform: scale(0.85); } .soon-home .card-list .tip, .soon-home .soon-templates-strip .tip { flex-shrink: 0; width: 100%; height: 25px; line-height: 25px; color: var(--soon-text-muted); font-size: 12px; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding: 0 8px; box-sizing: border-box; border-top: 1px solid var(--soon-border-subtle); background: rgba(0, 0, 0, 0.15); } .soon-home .card-list .rect:hover .tip, .soon-home .soon-templates-strip .rect:hover .tip { color: var(--soon-text-strong); } .soon-home .card-list .soon-file-card__actions { position: absolute; top: 6px; right: 6px; z-index: 4; display: flex; align-items: center; gap: 2px; padding: 3px; border-radius: 9px; background: rgba(16, 20, 24, 0.82); border: 1px solid rgba(255, 255, 255, 0.1); box-shadow: 0 4px 14px rgba(0, 0, 0, 0.32); backdrop-filter: blur(8px); opacity: 0; pointer-events: none; transform: translateY(-2px); transition: opacity 0.2s, transform 0.2s; } .soon-home .card-list .rect:hover .soon-file-card__actions { opacity: 1; pointer-events: auto; transform: translateY(0); } .soon-home .soon-file-card__action { display: flex; align-items: center; justify-content: center; width: 26px; height: 26px; padding: 0; border: none; border-radius: 6px; background: transparent; color: rgba(255, 255, 255, 0.88); cursor: pointer; transition: background 0.15s, color 0.15s, transform 0.15s; } .soon-home .soon-file-card__action:active { transform: scale(0.94); } .soon-home .soon-file-card__icon { display: block; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; } .soon-home .soon-file-card__download:hover { background: rgba(0, 150, 136, 0.22); color: #b2dfdb; } .soon-home .soon-file-card__delete:hover { background: rgba(229, 115, 115, 0.2); color: #ffcdd2; } .soon-home .rect:not(.rect1) { position: relative; } .soon-home-recent-grid .soon-empty--inline { grid-column: 1 / -1; width: 100%; max-width: none; } .soon-home .card-list .rect:not(.rect1)::after, .soon-home .soon-templates-strip .rect:not(.rect1)::after { content: ''; position: absolute; left: 50%; top: 50%; transform: translate(-50%, calc(-50% - 12.5px)); width: 24px; height: 24px; border-radius: 50%; background: var(--soon-bg-panel); box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.8); border: 1px solid rgba(255, 255, 255, 0.1); z-index: 3; pointer-events: none; } .soon-portal-topbar__brand a { display: flex; align-items: center; gap: var(--soon-space-sm); color: inherit; text-decoration: none; } .soon-portal-topbar__brand a:hover { color: inherit; text-decoration: none; } .soon-portal-topbar select, .soon-portal-topbar__lang { display: inline-flex; align-items: center; margin: 0; background: var(--soon-bg-panel); color: var(--soon-text); border: 1px solid var(--soon-border-subtle); height: 32px; border-radius: var(--soon-radius-sm); padding: 0 28px 0 10px; font-size: var(--soon-font-sm); line-height: 1; cursor: pointer; box-sizing: border-box; vertical-align: middle; } .soon-pay-banner.is-visible { display: block; } .soon-pay-banner { display: none; } .soon-input--textarea { height: auto; min-height: 88px; padding: 8px 12px; resize: vertical; line-height: 1.5; } .soon-home ::-webkit-scrollbar, .soon-member-page ::-webkit-scrollbar, .soon-admin-layout ::-webkit-scrollbar { width: 8px; height: 8px; } .soon-home ::-webkit-scrollbar-track, .soon-member-page ::-webkit-scrollbar-track, .soon-admin-layout ::-webkit-scrollbar-track { background: #2a2a2a; border-radius: 4px; } .soon-home ::-webkit-scrollbar-thumb, .soon-member-page ::-webkit-scrollbar-thumb, .soon-admin-layout ::-webkit-scrollbar-thumb { background: #555; border-radius: 4px; } @media (max-width: 768px) { .soon-home .layui-row { flex-direction: column; overflow-y: auto; } .soon-home .layui-col-md2, .soon-home .layui-col-md10 { width: 100%; flex: none; height: auto; min-height: 0; } .soon-home .layui-col-md10 { flex: 1; min-height: 280px; } .soon-section-title--bar { flex-direction: column; align-items: stretch; } .soon-section-title--bar .soon-btn { align-self: flex-end; } .soon-home-recent-grid { grid-template-columns: repeat(auto-fill, 148px); min-height: 300px; } .soon-home .card-list > .card, .soon-home-recent-grid > .card, .soon-home .soon-templates-strip > .card { width: 148px; max-width: 148px; } .soon-home .card-list .rect, .soon-home .soon-templates-strip .rect { width: 148px; height: 150px; } .soon-home .card-list .rect img, .soon-home .soon-templates-strip .rect img { height: 125px; } .soon-home .card-list .rect:not(.rect1)::after, .soon-home .soon-templates-strip .rect:not(.rect1)::after { transform: translate(-50%, calc(-50% - 12px)); width: 20px; height: 20px; } .soon-portal-topbar { padding: 0 var(--soon-space-md); gap: var(--soon-space-sm); } .soon-portal-topbar__actions { gap: var(--soon-space-sm); flex-wrap: wrap; justify-content: flex-end; } } .soon-file-pager { display: flex; align-items: center; justify-content: center; gap: 12px; margin: 0; padding: 0; font-size: 13px; color: var(--soon-text-muted); } .soon-file-pager__info { min-width: 140px; text-align: center; }