Files
micarrsim/apps/dataset-builder/styles.css
T
2026-08-28 16:04:55 +09:00

646 lines
11 KiB
CSS

.builder-shell {
min-width: 320px;
}
.builder-header {
position: sticky;
z-index: 20;
top: 0;
}
.header-actions,
.workspace-tools,
.runtime-line {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 10px;
min-width: 0;
max-width: 100%;
}
.button {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 38px;
padding: 9px 14px;
border: 1px solid var(--line);
border-radius: 11px;
color: var(--text);
background: var(--surface-raised);
cursor: pointer;
font-size: 0.82rem;
font-weight: 720;
text-decoration: none;
transition: border-color 140ms ease, background 140ms ease, transform 140ms ease;
}
.button:hover,
.button:focus-visible {
border-color: var(--mint);
outline: none;
transform: translateY(-1px);
}
.button:disabled {
cursor: wait;
opacity: 0.55;
transform: none;
}
.button--primary {
border-color: rgb(101 242 191 / 55%);
color: #06130f;
background: var(--mint);
}
.button--ghost {
background: rgb(255 255 255 / 3%);
}
.button--danger {
border-color: rgb(255 123 115 / 35%);
color: var(--danger);
background: rgb(255 123 115 / 7%);
}
.button--full {
width: 100%;
}
.file-button input {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip: rect(0 0 0 0);
clip-path: inset(50%);
}
.builder-layout {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(330px, 400px);
min-height: calc(100vh - 65px);
}
.scene-workspace {
min-width: 0;
padding: clamp(22px, 3vw, 42px);
}
.workspace-heading,
.source-strip-heading,
.asset-shelf {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 24px;
}
.workspace-heading {
margin-bottom: 22px;
}
.workspace-heading h1 {
margin-bottom: 0;
font-size: clamp(1.8rem, 4vw, 3.2rem);
letter-spacing: -0.055em;
}
.workspace-heading .eyebrow {
margin-bottom: 7px;
}
.canvas-card {
position: relative;
overflow: hidden;
min-height: 520px;
border: 1px solid var(--line);
border-radius: 22px;
background: #0a1512;
box-shadow: var(--shadow);
}
#scene-canvas {
display: block;
width: 100%;
height: clamp(520px, 61vh, 720px);
cursor: crosshair;
touch-action: none;
}
.canvas-empty {
position: absolute;
top: 34px;
left: 50%;
display: grid;
width: min(430px, calc(100% - 48px));
gap: 7px;
color: var(--muted);
text-align: center;
pointer-events: none;
transform: translateX(-50%);
}
.canvas-empty strong {
color: #cfe2db;
font-size: 0.95rem;
}
.canvas-empty strong,
.canvas-empty span {
overflow-wrap: anywhere;
}
.canvas-empty.is-hidden {
display: none;
}
.canvas-badge {
position: absolute;
right: 14px;
bottom: 14px;
padding: 7px 10px;
border: 1px solid rgb(255 255 255 / 10%);
border-radius: 999px;
color: #d7e8e2;
background: rgb(8 17 15 / 78%);
backdrop-filter: blur(10px);
font: 650 0.72rem ui-monospace, SFMono-Regular, Consolas, monospace;
pointer-events: none;
overflow: hidden;
max-width: calc(100% - 28px);
text-overflow: ellipsis;
white-space: nowrap;
}
.source-strip-heading {
margin-top: 32px;
}
.source-actions {
display: flex;
flex: 0 0 auto;
flex-wrap: wrap;
justify-content: flex-end;
gap: 10px;
}
.source-strip-heading h2,
.asset-shelf h2 {
margin-bottom: 5px;
font-size: 1rem;
}
.source-strip-heading p,
.asset-shelf p {
margin-bottom: 0;
color: var(--muted);
font-size: 0.78rem;
line-height: 1.55;
}
.source-strip {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
gap: 11px;
margin-top: 13px;
}
.source-card {
display: grid;
gap: 10px;
padding: 15px;
border: 1px solid var(--line);
border-radius: 15px;
color: inherit;
background: rgb(255 255 255 / 2%);
text-align: left;
cursor: pointer;
}
.source-card:hover,
.source-card:focus-visible,
.source-card.is-selected {
border-color: var(--source-color, var(--mint));
outline: none;
background: rgb(255 255 255 / 5%);
}
.source-card__heading {
display: flex;
align-items: center;
gap: 8px;
}
.source-card__dot {
width: 10px;
height: 10px;
flex: 0 0 auto;
border-radius: 50%;
background: var(--source-color, var(--mint));
box-shadow: 0 0 0 4px color-mix(in srgb, var(--source-color, var(--mint)) 16%, transparent);
}
.source-card strong {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.source-card small {
color: var(--muted);
font: 600 0.72rem ui-monospace, SFMono-Regular, Consolas, monospace;
}
.asset-shelf {
align-items: flex-start;
margin-top: 28px;
padding: 20px;
border: 1px solid var(--line);
border-radius: 18px;
background: rgb(255 255 255 / 2%);
}
.asset-shelf > div:first-child {
max-width: 470px;
}
.asset-list {
display: flex;
flex: 1 1 320px;
flex-wrap: wrap;
justify-content: flex-end;
gap: 8px;
}
.asset-chip {
display: flex;
align-items: center;
gap: 8px;
max-width: 100%;
padding: 8px 9px 8px 11px;
border: 1px solid var(--line);
border-radius: 999px;
background: var(--surface);
}
.asset-chip__label {
overflow: hidden;
max-width: 210px;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 0.74rem;
}
.asset-chip__state {
color: var(--muted);
font-size: 0.66rem;
}
.asset-chip__remove {
display: grid;
width: 23px;
height: 23px;
padding: 0;
border: 0;
border-radius: 50%;
place-items: center;
color: var(--muted);
background: rgb(255 255 255 / 5%);
cursor: pointer;
}
.asset-chip__remove:disabled {
cursor: not-allowed;
opacity: 0.35;
}
.control-panel {
position: sticky;
top: 65px;
align-self: start;
overflow-y: auto;
max-height: calc(100vh - 65px);
padding: 18px;
border-left: 1px solid var(--line);
background: rgb(12 24 21 / 86%);
backdrop-filter: blur(18px);
}
.runtime-line {
justify-content: space-between;
margin-bottom: 12px;
}
.save-state {
color: var(--muted);
font-size: 0.7rem;
}
.control-section,
.validation-card {
padding: 17px;
border: 1px solid var(--line);
border-radius: 16px;
background: rgb(255 255 255 / 2%);
}
.control-section + .control-section,
.validation-card {
margin-top: 12px;
}
.section-title {
display: flex;
align-items: center;
gap: 9px;
margin-bottom: 14px;
}
.section-title > span {
color: var(--mint);
font: 750 0.68rem ui-monospace, SFMono-Regular, Consolas, monospace;
}
.section-title h2 {
margin: 0;
font-size: 0.9rem;
}
.field {
display: grid;
min-width: 0;
gap: 6px;
}
.field > span {
color: var(--muted);
font-size: 0.69rem;
font-weight: 650;
}
.field input,
.field select {
width: 100%;
min-height: 38px;
padding: 8px 9px;
border: 1px solid var(--line);
border-radius: 9px;
color: var(--text);
background: #0b1714;
}
.field input:focus,
.field select:focus {
border-color: var(--mint);
outline: 2px solid rgb(101 242 191 / 11%);
}
.field input:disabled,
.field select:disabled {
cursor: not-allowed;
opacity: 0.45;
}
.check-field {
display: flex;
align-items: center;
align-self: end;
min-height: 38px;
gap: 8px;
color: var(--muted);
font-size: 0.72rem;
font-weight: 650;
}
.check-field input {
width: 17px;
height: 17px;
accent-color: var(--mint);
}
.field--wide + .field--wide,
.field-grid + .field--wide,
.field--wide + .field-grid,
#tone-fields,
#noise-fields,
#asset-fields,
.button--full {
margin-top: 10px;
}
.field-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
margin-top: 10px;
}
.field-grid--three {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.inline-note {
padding: 12px;
border: 1px dashed var(--line);
border-radius: 10px;
color: var(--muted);
font-size: 0.78rem;
text-align: center;
}
.section-note {
margin: 11px 0 0;
color: var(--muted);
font-size: 0.68rem;
line-height: 1.5;
}
.trajectory-editor {
margin: 12px 0;
padding: 12px;
border: 1px solid rgb(101 242 191 / 16%);
border-radius: 12px;
background: rgb(101 242 191 / 3%);
}
.trajectory-toggle {
min-height: 28px;
}
.trajectory-preview {
margin-top: 12px;
}
.trajectory-preview output {
color: var(--mint);
font: 700 0.7rem ui-monospace, SFMono-Regular, Consolas, monospace;
}
.trajectory-preview input[type="range"] {
min-height: 28px;
padding: 0;
accent-color: var(--mint);
}
.trajectory-list {
display: grid;
gap: 8px;
margin: 12px 0 10px;
}
.trajectory-row {
display: grid;
grid-template-columns: 42px repeat(4, minmax(0, 1fr)) 30px;
gap: 5px;
align-items: end;
}
.trajectory-row__select,
.trajectory-row__remove {
min-height: 36px;
padding: 6px;
border: 1px solid var(--line);
border-radius: 8px;
color: var(--muted);
background: #0b1714;
cursor: pointer;
}
.trajectory-row__select.is-selected {
border-color: var(--mint);
color: var(--mint);
}
.trajectory-row__remove:disabled {
cursor: not-allowed;
opacity: 0.3;
}
.trajectory-row .field > span {
font-size: 0.6rem;
}
.trajectory-row .field input {
min-height: 36px;
padding: 6px;
}
.is-hidden {
display: none !important;
}
.validation-card {
display: flex;
align-items: flex-start;
gap: 11px;
}
.validation-dot {
width: 10px;
height: 10px;
flex: 0 0 auto;
margin-top: 4px;
border-radius: 50%;
background: var(--muted);
box-shadow: 0 0 0 5px rgb(145 170 162 / 8%);
}
.validation-card strong {
font-size: 0.82rem;
}
.validation-card p {
margin: 4px 0 0;
color: var(--muted);
font-size: 0.72rem;
line-height: 1.5;
}
.validation-card.is-valid .validation-dot {
background: var(--mint);
box-shadow: 0 0 0 5px rgb(101 242 191 / 10%);
}
.validation-card.is-invalid .validation-dot {
background: var(--danger);
box-shadow: 0 0 0 5px rgb(255 123 115 / 10%);
}
@media (max-width: 1100px) {
.builder-layout {
grid-template-columns: 1fr;
}
.control-panel {
position: static;
max-height: none;
border-top: 1px solid var(--line);
border-left: 0;
}
}
@media (max-width: 760px) {
.builder-header,
.workspace-heading,
.source-strip-heading,
.asset-shelf {
align-items: stretch;
flex-direction: column;
}
.builder-header {
position: static;
}
.header-actions .button,
.workspace-tools .button {
min-width: 0;
flex: 1 1 calc(50% - 5px);
}
.header-actions,
.workspace-tools,
.source-actions {
width: 100%;
}
.source-actions .button {
min-width: 0;
flex: 1 1 calc(50% - 5px);
}
.scene-workspace {
padding: 18px;
}
.canvas-card {
min-height: 420px;
}
#scene-canvas {
height: 420px;
}
.asset-list {
justify-content: flex-start;
}
}
@media (max-width: 430px) {
.field-grid--three {
grid-template-columns: 1fr;
}
.trajectory-row {
grid-template-columns: 38px repeat(2, minmax(0, 1fr)) 30px;
}
.trajectory-row .field:nth-of-type(3),
.trajectory-row .field:nth-of-type(4) {
grid-row: 2;
}
}