Files
tougao/application/api/view/author/_styles.html
2026-06-05 11:11:16 +08:00

316 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<style>
:root {
--primary: #2563eb;
--primary-dark: #1d4ed8;
--primary-light: #dbeafe;
--accent: #0d9488;
--accent-light: #ccfbf1;
--bg: #f1f5f9;
--bg-gradient: linear-gradient(135deg, #eef2ff 0%, #f0fdfa 50%, #f8fafc 100%);
--card: #ffffff;
--text: #1e293b;
--text-muted: #64748b;
--border: #e2e8f0;
--radius: 14px;
--radius-sm: 8px;
--shadow: 0 4px 24px rgba(15, 23, 42, 0.06);
--shadow-hover: 0 8px 32px rgba(37, 99, 235, 0.12);
--success: #059669;
--success-bg: #d1fae5;
--warn: #d97706;
--warn-bg: #fef3c7;
--danger: #dc2626;
--danger-bg: #fee2e2;
}
* { box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
background: var(--bg-gradient);
min-height: 100vh;
margin: 0;
padding: 32px 20px 48px;
color: var(--text);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
}
a { color: var(--primary); text-decoration: none; transition: color .15s; }
a:hover { color: var(--primary-dark); }
.page { max-width: 920px; margin: 0 auto; }
.page-narrow { max-width: 560px; margin: 0 auto; }
.page-form { max-width: 480px; margin: 0 auto; }
/* 顶栏 */
.topbar {
display: flex; align-items: center; gap: 10px;
margin-bottom: 20px; font-size: 14px; color: var(--text-muted);
}
.topbar a {
display: inline-flex; align-items: center; gap: 6px;
padding: 8px 14px; background: var(--card); border-radius: 999px;
border: 1px solid var(--border); box-shadow: 0 1px 3px rgba(0,0,0,.04);
}
.topbar a:hover { border-color: var(--primary-light); background: #f8fafc; }
/* 卡片 */
.card {
background: var(--card);
border-radius: var(--radius);
box-shadow: var(--shadow);
border: 1px solid rgba(255,255,255, .8);
padding: 32px 36px;
overflow: hidden;
}
.card-header {
text-align: center;
margin-bottom: 28px;
padding-bottom: 24px;
border-bottom: 1px solid var(--border);
}
.card-icon {
width: 56px; height: 56px; margin: 0 auto 14px;
background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%);
border-radius: 16px;
display: flex; align-items: center; justify-content: center;
font-size: 26px; box-shadow: 0 4px 14px rgba(37, 99, 235, .25);
}
.card-title { font-size: 22px; font-weight: 700; color: var(--text); margin: 0 0 6px; letter-spacing: -.02em; }
.card-subtitle { font-size: 14px; color: var(--text-muted); margin: 0; }
/* 提示框 */
.alert {
padding: 12px 16px; border-radius: var(--radius-sm);
font-size: 13px; line-height: 1.65; margin-bottom: 20px;
}
.alert-info { background: var(--primary-light); color: #1e40af; border: 1px solid #bfdbfe; }
.alert-error { background: var(--danger-bg); color: #991b1b; border: 1px solid #fecaca; }
.alert-warn { background: var(--warn-bg); color: #92400e; border: 1px solid #fde68a; }
/* 表单 */
.form-group { margin-bottom: 18px; }
.form-label {
display: block; font-size: 13px; font-weight: 600;
color: var(--text); margin-bottom: 6px;
}
.form-label .opt { font-weight: 400; color: var(--text-muted); font-size: 12px; }
.form-input {
width: 100%; padding: 11px 14px;
border: 1px solid var(--border); border-radius: var(--radius-sm);
font-size: 15px; color: var(--text);
background: #fafbfc; transition: border-color .15s, box-shadow .15s, background .15s;
}
.form-input:focus {
outline: none; border-color: var(--primary);
background: #fff; box-shadow: 0 0 0 3px rgba(37, 99, 235, .12);
}
.form-input::placeholder { color: #94a3b8; }
.btn-primary {
width: 100%; margin-top: 8px; padding: 13px 20px;
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%);
color: #fff; border: none; border-radius: var(--radius-sm);
font-size: 16px; font-weight: 600; cursor: pointer;
box-shadow: 0 4px 14px rgba(37, 99, 235, .3);
transition: transform .15s, box-shadow .15s;
}
.btn-primary:hover {
transform: translateY(-1px);
box-shadow: 0 6px 20px rgba(37, 99, 235, .35);
}
.form-foot { font-size: 12px; color: var(--text-muted); margin-top: 20px; text-align: center; line-height: 1.7; }
/* 标签 */
.badge {
display: inline-block; padding: 3px 10px; border-radius: 999px;
font-size: 11px; font-weight: 700; letter-spacing: .02em;
}
.badge-success { background: var(--success-bg); color: var(--success); }
.badge-info { background: var(--primary-light); color: var(--primary-dark); }
.badge-warn { background: var(--warn-bg); color: var(--warn); }
.badge-danger { background: var(--danger-bg); color: var(--danger); }
/* 候选列表 */
.candidate-list { display: flex; flex-direction: column; gap: 12px; }
.candidate-card {
display: block; position: relative;
padding: 18px 20px 18px 72px;
border: 1px solid var(--border); border-radius: var(--radius-sm);
background: #fafbfc; text-decoration: none; color: inherit;
transition: border-color .2s, box-shadow .2s, transform .2s, background .2s;
}
.candidate-card:hover {
border-color: var(--primary); background: #fff;
box-shadow: var(--shadow-hover); transform: translateY(-2px);
}
.candidate-card.match {
border-color: #6ee7b7; background: linear-gradient(135deg, #f0fdf4 0%, #fff 100%);
}
.candidate-card.match:hover { border-color: var(--success); }
.candidate-avatar {
position: absolute; left: 18px; top: 50%; transform: translateY(-50%);
width: 44px; height: 44px; border-radius: 12px;
background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);
color: #fff; font-size: 18px; font-weight: 700;
display: flex; align-items: center; justify-content: center;
}
.candidate-card.match .candidate-avatar {
background: linear-gradient(135deg, var(--success) 0%, #34d399 100%);
}
.candidate-name { font-size: 16px; font-weight: 700; color: var(--text); margin-bottom: 4px; padding-right: 100px; }
.candidate-orcid { font-size: 13px; color: var(--primary); font-family: ui-monospace, monospace; margin-bottom: 4px; }
.candidate-affil { font-size: 13px; color: var(--text-muted); line-height: 1.5; }
.candidate-meta { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.candidate-action {
position: absolute; right: 18px; top: 50%; transform: translateY(-50%);
font-size: 13px; font-weight: 600; color: var(--primary);
display: flex; align-items: center; gap: 4px;
}
.candidate-card:hover .candidate-action { color: var(--primary-dark); }
/* 信息块 */
.info-panel {
background: #f8fafc; border: 1px solid var(--border);
border-radius: var(--radius-sm); padding: 16px 18px; margin-bottom: 22px;
}
.info-panel dt { font-size: 12px; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: .04em; margin-top: 10px; }
.info-panel dt:first-child { margin-top: 0; }
.info-panel dd { margin: 4px 0 0; font-size: 15px; color: var(--text); }
/* 报告页 */
.report-hero {
background: linear-gradient(135deg, #1e3a5f 0%, #2563eb 55%, #0d9488 100%);
color: #fff; margin: -32px -36px 28px; padding: 28px 36px 24px;
}
.report-hero h1 { font-size: 22px; margin: 0 0 12px; font-weight: 700; letter-spacing: -.02em; }
.report-meta { display: flex; flex-wrap: wrap; gap: 8px; }
.report-chip {
font-size: 12px; padding: 5px 12px; border-radius: 999px;
background: rgba(255,255,255,.15); backdrop-filter: blur(4px);
border: 1px solid rgba(255,255,255,.2);
}
.risk-banner {
padding: 16px 20px; border-radius: var(--radius-sm); margin-bottom: 24px;
font-size: 15px; font-weight: 600; display: flex; align-items: flex-start; gap: 12px;
}
.risk-banner::before { font-size: 22px; line-height: 1; }
.risk-low { background: var(--success-bg); color: #065f46; border: 1px solid #a7f3d0; }
.risk-low::before { content: "✓"; }
.risk-mid { background: var(--warn-bg); color: #92400e; border: 1px solid #fde68a; }
.risk-mid::before { content: "⚠"; }
.risk-high { background: var(--danger-bg); color: #991b1b; border: 1px solid #fecaca; }
.risk-high::before { content: "✕"; }
.risk-default { background: #f1f5f9; color: var(--text); border: 1px solid var(--border); }
.risk-default::before { content: ""; }
.sec-title {
font-size: 16px; font-weight: 700; color: var(--text);
margin: 28px 0 14px; padding-left: 14px;
border-left: 4px solid var(--primary);
display: flex; align-items: center; gap: 8px;
}
.sec-num {
display: inline-flex; width: 24px; height: 24px; border-radius: 6px;
background: var(--primary-light); color: var(--primary);
font-size: 12px; font-weight: 800; align-items: center; justify-content: center;
}
.data-table {
width: 100%; border-collapse: separate; border-spacing: 0;
font-size: 14px; margin-bottom: 8px;
border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden;
}
.data-table th, .data-table td {
padding: 12px 16px; text-align: left; border-bottom: 1px solid var(--border);
}
.data-table tr:last-child th, .data-table tr:last-child td { border-bottom: none; }
.data-table th {
background: #f8fafc; width: 30%; font-weight: 600;
color: var(--text-muted); font-size: 13px;
}
.data-table td { color: var(--text); }
.data-table tr:hover td { background: #fafbfc; }
.tag { display: inline-block; padding: 4px 10px; border-radius: 6px; font-size: 12px; font-weight: 700; }
.tag-ok { background: var(--success-bg); color: var(--success); }
.tag-warn { background: var(--warn-bg); color: var(--warn); }
.tag-bad { background: var(--danger-bg); color: var(--danger); }
.paper-item { font-size: 14px; padding: 10px 0; border-bottom: 1px dashed var(--border); line-height: 1.65; }
.paper-item:last-child { border-bottom: none; }
.paper-link { color: var(--primary); font-weight: 500; }
.paper-link:hover { text-decoration: underline; }
.paper-meta { color: var(--text-muted); font-size: 12px; margin-left: 6px; }
.dup-card {
margin: 12px 0; padding: 14px 16px;
background: #fffbeb; border: 1px solid #fde68a;
border-left: 4px solid var(--warn); border-radius: var(--radius-sm);
}
.src-tag {
display: inline-block; padding: 2px 8px; border-radius: 4px;
font-size: 11px; font-weight: 700; margin-right: 4px;
}
.src-orcid { background: var(--accent-light); color: #0f766e; }
.src-pubmed { background: var(--primary-light); color: var(--primary-dark); }
.match-doi { background: var(--success-bg); color: var(--success); }
.match-name { background: var(--warn-bg); color: var(--warn); }
.match-loose { background: var(--danger-bg); color: var(--danger); }
.btn-scopus {
display: inline-flex; align-items: center; gap: 8px; margin-top: 10px;
padding: 12px 22px; background: linear-gradient(135deg, #ea580c 0%, #c2410c 100%);
color: #fff !important; border-radius: var(--radius-sm);
font-size: 14px; font-weight: 700; text-decoration: none;
box-shadow: 0 4px 14px rgba(234, 88, 12, .25);
transition: transform .15s, box-shadow .15s;
}
.btn-scopus:hover { transform: translateY(-1px); box-shadow: 0 6px 18px rgba(234, 88, 12, .3); color: #fff !important; }
a.ext { color: var(--primary); font-weight: 500; }
a.ext:hover { text-decoration: underline; }
.report-notes {
margin-top: 32px;
padding: 18px 22px;
background: #f8fafc;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
font-size: 13px;
color: var(--text-muted);
line-height: 1.75;
}
.report-notes-title {
font-size: 13px;
font-weight: 600;
color: var(--text);
margin: 0 0 10px;
}
.report-notes ul {
margin: 0;
padding-left: 18px;
}
.report-notes li {
margin: 6px 0;
}
.report-foot {
margin-top: 20px; padding-top: 20px; border-top: 1px solid var(--border);
font-size: 12px; color: var(--text-muted); text-align: center; line-height: 1.7;
}
.stat-row { display: flex; flex-wrap: wrap; gap: 12px; margin: 16px 0 8px; }
.stat-box {
flex: 1; min-width: 120px; padding: 14px 16px;
background: #f8fafc; border: 1px solid var(--border); border-radius: var(--radius-sm);
text-align: center;
}
.stat-box strong { display: block; font-size: 24px; color: var(--primary); font-weight: 800; line-height: 1.2; }
.stat-box span { font-size: 12px; color: var(--text-muted); }
@media (max-width: 640px) {
body { padding: 16px 12px 32px; }
.card { padding: 24px 20px; }
.report-hero { margin: -24px -20px 20px; padding: 22px 20px; }
.candidate-card { padding-left: 18px; padding-top: 52px; }
.candidate-avatar { top: 16px; left: 18px; transform: none; }
.candidate-name { padding-right: 0; }
.candidate-action { top: auto; bottom: 16px; right: 18px; transform: none; }
.data-table th, .data-table td { padding: 10px 12px; font-size: 13px; }
}
</style>