You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

517 lines
10 KiB

@import url('./base.css');
body {
margin: 0;
font-family: var(--font-family-mono);
color: var(--color-text-primary);
display: flex;
flex-direction: row;
min-height: 100vh;
background: radial-gradient(circle at 30% 50%, rgba(0, 255, 136, 0.1), transparent 50%),
radial-gradient(circle at 70% 80%, rgba(255, 107, 53, 0.1), transparent 50%),
var(--color-bg-body)
}
/* === LAYOUT === */
#page-container {
display: flex;
flex-direction: column;
width: 100%;
}
#sd-header {
width: 100%;
padding: 12px 24px;
font-weight: bold;
color: var(--color-text-accent);
border-bottom: 1px solid var(--color-text-dark);
display: flex;
align-items: center;
justify-content: space-between;
}
.header-text {
font-size: 24px;
margin: 0;
text-shadow: 0 0 10px rgba(0, 255, 136, 0.8);
}
#main-content {
display: flex;
flex-direction: row;
height: 100%;
}
/* === SIDEBAR === */
#sidebar {
width: 100%;
background-color: var(--color-bg-sidebar);
display: flex;
flex-wrap: wrap;
flex-direction: row;
gap: var(--component-gap);
}
.sidebar-title {
color: #8b949e;
font-size: 14px;
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: 15px;
padding-bottom: 8px;
padding-left: 8px;
border-bottom: 1px solid #303638;
}
/* === COMPONENT ICONS === */
.component-icon,
#arrow-tool {
position: relative;
padding: var(--component-padding) 12px;
background-color: var(--color-bg-component);
border: 1px solid var(--color-border);
border-radius: var(--radius-medium);
text-align: center;
cursor: grab;
user-select: none;
font-size: 16px;
color: var(--color-text-primary);
transition: background-color 0.1s ease;
}
.component-icon:hover,
#arrow-tool:hover {
background-color: var(--color-bg-hover);
border-color: var(--color-border-accent);
}
.component-icon:active,
#arrow-tool:active {
cursor: grabbing;
}
#arrow-tool.active {
background-color: var(--color-bg-accent);
color: var(--color-text-white);
border-color: var(--color-button);
}
/* === TOOLTIP === */
.tooltip {
visibility: hidden;
opacity: 0;
position: absolute;
top: 100%;
left: 0;
z-index: 10;
background: var(--color-tooltip-bg);
color: var(--color-tooltip-text);
padding: 6px 8px;
border-radius: var(--radius-small);
white-space: nowrap;
font-size: 14px;
line-height: 1.4;
margin-top: 4px;
transition: opacity 0.2s;
}
.component-icon:hover .tooltip {
visibility: visible;
opacity: 1;
z-index: 1000;
}
.component-icon.dragging .tooltip {
display: none;
}
/* === CANVAS === */
#canvas-wrapper {
flex: 1;
display: flex;
flex-direction: column;
border-radius: var(--radius-large);
border: 2px solid var(--color-border-panel);
overflow: hidden;
background: var(--color-bg-dark);
margin: 12px 12px 12px 0;
padding: 16px;
}
#canvas-container {
flex: 1;
position: relative;
background: var(--color-bg-dark);
height: 100%;
margin-top: 16px;
}
#canvas {
width: 100%;
height: 90%;
background: var(--color-bg-dark);
border: 2px dashed var(--color-border-panel);
border-radius: var(--radius-large);
}
.dropped {
cursor: move;
}
.dropped.selected rect {
stroke: var(--color-border-accent);
stroke-width: 2;
}
#canvas-toolbar {
display: flex;
gap: 8px;
padding: 8px 0;
border-bottom: 1px solid var(--color-border-panel);
background: var(--color-bg-dark);
align-items: center;
justify-content: flex-start;
}
.toolbar-btn {
padding: 6px 12px;
background: var(--color-bg-component);
border: 1px solid var(--color-border);
border-radius: var(--radius-small);
color: var(--color-text-primary);
cursor: pointer;
font-size: 14px;
}
.toolbar-btn:hover {
background: var(--color-bg-hover);
border-color: var(--color-border-accent);
}
.toolbar-btn.active {
background: var(--color-bg-accent);
color: var(--color-text-white);
border-color: var(--color-button);
}
#info-panel {
position: absolute;
top: 8px;
right: 8px;
background: var(--color-bg-component);
border: 1px solid var(--color-border-panel);
border-radius: var(--radius-medium);
padding: 12px;
min-width: 200px;
font-size: 14px;
color: var(--color-text-primary);
}
#node-props-panel {
position: absolute;
top: 8px;
left: 8px;
background: var(--color-bg-component);
border: 1px solid var(--color-border-panel);
border-radius: var(--radius-medium);
padding: 12px;
min-width: 250px;
display: none;
}
#node-props-panel h3 {
margin: 0 0 12px 0;
color: var(--color-text-accent);
font-size: 16px;
}
#node-props-panel .form-group {
margin-bottom: 12px;
}
#node-props-panel label {
display: block;
margin-bottom: 4px;
color: var(--color-text-primary);
font-size: 14px;
}
#node-props-panel select {
width: 100%;
padding: 6px;
background: var(--color-bg-dark);
border: 1px solid var(--color-border);
border-radius: var(--radius-small);
color: var(--color-text-primary);
}
.prop-group {
margin-bottom: 8px;
}
.prop-group label,
.prop-group input,
.prop-group select {
display: block;
width: 100%;
margin-bottom: 4px;
}
.panel-title {
font-size: 14px;
font-weight: bold;
color: var(--color-text-accent);
margin-bottom: 8px;
text-transform: uppercase;
}
.panel-metric {
margin-bottom: 6px;
font-size: 13px;
}
.panel-metric .label {
color: var(--color-text-muted);
margin-right: 8px;
}
input[type="text"],
input[type="number"],
select {
background: var(--color-bg-dark);
border: 1px solid var(--color-border);
color: var(--color-text-primary);
padding: 6px 8px;
border-radius: var(--radius-small);
}
#node-props-save,
#run-button {
background: var(--color-button);
color: var(--color-text-white);
border: none;
padding: 8px 16px;
border-radius: var(--radius-small);
cursor: pointer;
font-size: 14px;
}
#run-button:disabled,
#node-props-save:disabled {
background: var(--color-button-disabled);
cursor: not-allowed;
}
#github-login-btn {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 16px;
background: #238636;
color: white;
text-decoration: none;
border-radius: 6px;
font-weight: 500;
transition: background-color 0.2s;
border: 1px solid #2ea043;
}
#github-login-btn:hover {
background: #2ea043;
}
#github-login-btn img {
width: 20px;
height: 20px;
filter: invert(1);
}
.tabs {
display: flex;
flex-direction: column;
height: 100%;
}
.tab-labels {
display: flex;
border-bottom: 1px solid var(--color-border-panel);
}
.tab-labels label {
padding: 12px 24px;
cursor: pointer;
background: var(--color-bg-component);
border: 1px solid var(--color-border-panel);
margin-right: 2px;
color: var(--color-text-muted);
}
.tab-content {
padding: 16px;
flex: 1;
display: none;
}
input[name="tab"] {
display: none;
}
#tab1:checked ~ .tabs .tab-labels label[for="tab1"],
#tab2:checked ~ .tabs .tab-labels label[for="tab2"],
#tab3:checked ~ .tabs .tab-labels label[for="tab3"] {
background: var(--color-bg-tab-active);
color: var(--color-text-accent);
border-color: var(--color-border-accent);
}
#tab1:checked ~ .tabs #content1,
#tab2:checked ~ .tabs #content2,
#tab3:checked ~ .tabs #content3 {
display: block;
}
#challenge-container {
width: 280px;
background: var(--color-bg-component);
border-right: 1px solid var(--color-border-panel);
padding: 16px;
overflow-y: auto;
flex-shrink: 0;
}
.challenge-list {
list-style: none;
padding: 0;
margin: 0;
}
.challenge-item {
padding: 12px;
margin-bottom: 8px;
background: var(--color-bg-dark);
border: 1px solid var(--color-border);
border-radius: var(--radius-medium);
cursor: pointer;
transition: all 0.2s ease;
}
.challenge-item:hover {
border-color: var(--color-border-accent);
}
.challenge-item.active {
background: var(--color-bg-tab-active);
border-color: var(--color-border-accent);
}
.challenge-name {
font-weight: 500;
margin-bottom: 4px;
}
.challenge-difficulty {
font-size: 12px;
text-transform: uppercase;
letter-spacing: 1px;
}
.challenge-difficulty.easy {
color: #3fb950;
}
.challenge-difficulty.medium {
color: #d29922;
}
.challenge-difficulty.hard {
color: #f85149;
}
.requirements-section {
background: var(--color-bg-component);
border: 1px solid var(--color-border-panel);
border-radius: var(--radius-medium);
padding: 16px;
margin-bottom: 16px;
}
.requirements-list {
list-style: none;
padding: 0;
margin: 0;
}
.requirement-item {
padding: 8px 0;
border-bottom: 1px solid var(--color-border);
color: var(--color-text-primary);
line-height: 1.5;
}
.requirement-item:before {
content: "▶ ";
color: var(--color-text-accent);
font-size: 12px;
margin-right: 8px;
}
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.8);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.modal-content {
background: var(--color-bg-component);
padding: 24px;
border-radius: var(--radius-medium);
min-width: 300px;
border: 1px solid var(--color-border-panel);
}
.modal-content label {
display: block;
margin: 8px 0;
color: var(--color-text-primary);
}
.modal-actions {
display: flex;
gap: 8px;
margin-top: 16px;
}
.modal input,
.modal select {
width: 100%;
padding: 8px;
margin-top: 4px;
background: var(--color-bg-dark);
border: 1px solid var(--color-border);
border-radius: var(--radius-small);
color: var(--color-text-primary);
}
#score-panel {
margin-top: 16px;
}
.userbox {
display: flex;
align-items: center;
gap: 8px;
}
.avatar {
width: 32px;
height: 32px;
border-radius: 50%;
}