scn-consultation-api / src /template /system_design /component_detail.html
SS-2005's picture
Upload 10 files
49f5735 verified
Raw
History Blame Contribute Delete
7.33 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ component_name }} — Component Detail</title>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Plus+Jakarta+Sans:wght@300;400;600;700;800&display=swap" rel="stylesheet">
<style>
:root{
--primary: #4f46e5;
--primary-light: #818cf8;
--accent: #ec4899;
--text-main: #0f172a;
--text-muted: #64748b;
--glass-bg: rgba(255, 255, 255, 0.75);
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: "Plus Jakarta Sans", sans-serif;
background: #eef2f6;
background-image:
radial-gradient(at 0% 0%, rgba(99, 102, 241, 0.15) 0px, transparent 50%),
radial-gradient(at 100% 100%, rgba(236, 72, 153, 0.15) 0px, transparent 50%);
color: var(--text-main);
width: 100vw;
height: 100vh;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.slide-wrap {
width: 1920px;
height: 1080px;
background: var(--glass-bg);
backdrop-filter: blur(20px);
box-shadow:
0 25px 50px -12px rgba(0, 0, 0, 0.1),
0 0 0 1px rgba(255, 255, 255, 0.5) inset;
border-radius: 24px;
overflow: hidden;
position: relative;
display: flex;
}
.sidebar-decor {
width: 12px;
height: 100%;
background: linear-gradient(180deg, var(--primary) 0%, var(--accent) 100%);
flex-shrink: 0;
}
.slide {
flex: 1;
padding: 80px 100px;
box-sizing: border-box;
z-index: 10;
display: flex;
flex-direction: column;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 60px;
animation: slideInDown 0.6s ease-out;
}
@keyframes slideInDown {
from { opacity: 0; transform: translateY(-30px); }
to { opacity: 1; transform: translateY(0); }
}
.header-accent {
height: 6px;
width: 240px;
background: linear-gradient(90deg, #4f46e5 0%, #818cf8 50%, transparent 100%);
border-radius: 4px;
}
.content {
flex: 1;
display: grid;
grid-template-columns: 0.8fr 1.2fr;
gap: 80px;
align-items: center;
}
.title-section {
position: relative;
animation: slideInLeft 0.7s ease-out 0.2s both;
}
@keyframes slideInLeft {
from { opacity: 0; transform: translateX(-40px); }
to { opacity: 1; transform: translateX(0); }
}
.main-title {
font-size: 72px;
line-height: 1.1;
font-weight: 800;
color: var(--text-main);
letter-spacing: -0.03em;
margin-bottom: 40px;
position: relative;
z-index: 2;
}
.title-decoration {
position: relative;
margin-top: 60px;
}
.deco-circle {
width: 140px;
height: 140px;
border-radius: 50%;
background: linear-gradient(135deg, #4f46e5 0%, #818cf8 100%);
opacity: 0.1;
position: absolute;
animation: pulse 4s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { transform: scale(1); opacity: 0.1; }
50% { transform: scale(1.1); opacity: 0.15; }
}
.deco-circle:nth-child(1) { top: -60px; left: 20px; }
.deco-circle:nth-child(2) {
top: 40px;
left: -40px;
width: 90px;
height: 90px;
animation-delay: 1.5s;
background: linear-gradient(135deg, #ec4899 0%, #f472b6 100%);
}
.bullets-section {
animation: fadeIn 0.7s ease-out 0.5s both;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.bullet-list {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 40px;
}
.bullet-item {
display: flex;
align-items: flex-start;
gap: 24px;
animation: slideInRight 0.6s ease-out both;
opacity: 0;
}
.bullet-item:nth-child(1) { animation-delay: 0.7s; }
.bullet-item:nth-child(2) { animation-delay: 0.9s; }
.bullet-item:nth-child(3) { animation-delay: 1.1s; }
.bullet-item:nth-child(4) { animation-delay: 1.3s; }
.bullet-item:nth-child(5) { animation-delay: 1.5s; }
@keyframes slideInRight {
from { opacity: 0; transform: translateX(30px); }
to { opacity: 1; transform: translateX(0); }
}
.bullet-icon {
flex-shrink: 0;
width: 16px;
height: 16px;
border-radius: 50%;
background: var(--primary);
margin-top: 10px;
box-shadow: 0 0 0 4px rgba(79, 70, 229, 0.15);
}
.bullet-text {
font-size: 26px;
color: #333;
line-height: 1.5;
font-weight: 400;
}
.bullet-text b, .bullet-text strong {
font-weight: 700;
color: var(--primary);
}
.bg-shape {
position: absolute;
z-index: 1;
opacity: 0.04;
pointer-events: none;
}
.bg-shape-1 {
width: 500px;
height: 500px;
background: radial-gradient(circle, var(--primary) 0%, transparent 70%);
top: -150px;
right: -150px;
}
.float-element {
position: absolute;
font-family: 'JetBrains Mono', monospace;
font-size: 14px;
color: rgba(79,70,229,0.15);
z-index: 1;
}
.float-1 { top: 15%; right: 10%; }
.float-2 { bottom: 15%; right: 8%; }
</style>
</head>
<body>
<div class="slide-wrap">
<div class="sidebar-decor"></div>
<div class="bg-shape bg-shape-1"></div>
<div class="float-element float-1">&lt;{{ component_name | lower | replace(' ', '-') }} /&gt;</div>
<div class="float-element float-2">import { config } from 'core';</div>
<div class="slide">
<div class="header">
<div class="header-accent"></div>
</div>
<div class="content">
<div class="title-section">
<h1 class="main-title">{{ component_name }}</h1>
<div class="title-decoration">
<div class="deco-circle"></div>
<div class="deco-circle"></div>
</div>
</div>
<div class="bullets-section">
<ul class="bullet-list">
{% for characteristic in characteristics %}
<li class="bullet-item">
<div class="bullet-icon"></div>
<div class="bullet-text js-format-text">{{ characteristic }}</div>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function() {
const items = document.querySelectorAll('.js-format-text');
items.forEach(item => {
let text = item.innerHTML;
text = text.replace(/\*\*(.*?)\*\*/g, '<b>$1</b>');
item.innerHTML = text;
});
});
</script>
</body>
</html>