Files
startup/web/src/styles/app.css

499 lines
8.8 KiB
CSS

.app-shell {
min-height: 100vh;
padding: 28px;
}
.app-shell__header {
display: flex;
justify-content: space-between;
gap: 24px;
align-items: start;
margin-bottom: 18px;
}
.app-shell__eyebrow,
.panel-frame__eyebrow,
.prompt-composer__label,
.status-strip__label {
margin: 0 0 8px;
font-family: var(--font-display);
font-size: 0.58rem;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--accent-amber);
}
.app-shell h1,
.panel-frame__title {
margin: 0;
font-family: var(--font-display);
line-height: 1.3;
text-transform: uppercase;
}
.app-shell h1 {
font-size: clamp(1.3rem, 2vw, 2rem);
}
.app-shell__title {
min-width: 0;
}
.app-shell__project {
margin: 10px 0 0;
max-width: min(70vw, 760px);
color: var(--text-dim);
font-size: 0.78rem;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.app-shell__project span {
color: var(--accent-amber);
}
.app-shell__meta {
display: flex;
gap: 10px;
flex-wrap: wrap;
justify-content: flex-end;
}
.app-shell__meta span {
padding: 6px 10px;
border: 1px solid rgba(70, 121, 84, 0.45);
background: rgba(15, 22, 17, 0.56);
color: var(--text-dim);
font-size: 0.7rem;
}
.shell-frame {
position: relative;
padding: 16px;
border: 4px solid #374739;
background: linear-gradient(180deg, #2a352b 0%, #161d17 100%);
box-shadow: 0 16px 50px rgba(0, 0, 0, 0.45);
}
.shell-frame__bezel {
position: absolute;
inset: 8px;
border: 2px solid rgba(255, 255, 255, 0.08);
pointer-events: none;
}
.shell-frame__screen {
position: relative;
overflow: hidden;
min-height: 78vh;
padding: 18px;
border: 4px solid #081108;
background:
radial-gradient(circle at center, rgba(34, 65, 43, 0.35), transparent 50%),
linear-gradient(180deg, rgba(11, 18, 12, 0.98) 0%, rgba(7, 12, 8, 0.98) 100%);
}
.shell-frame__content {
position: relative;
z-index: 1;
}
.panel-frame,
.prompt-composer,
.error-banner {
border: 3px solid var(--border-dark);
box-shadow: inset 0 0 0 2px var(--border-light), var(--shadow-panel);
background: linear-gradient(180deg, rgba(26, 34, 29, 0.95) 0%, rgba(14, 19, 16, 0.95) 100%);
}
.is-green {
color: var(--accent-green);
}
.is-red {
color: var(--accent-red);
}
.is-cyan {
color: var(--accent-cyan);
}
.is-amber {
color: var(--accent-amber);
}
.session-toolbar {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.session-toolbar--inline {
justify-content: flex-end;
margin-bottom: 0;
flex-wrap: nowrap;
}
.pixel-button {
position: relative;
border: 0;
padding: 0;
cursor: pointer;
text-transform: uppercase;
background: transparent;
min-width: 128px;
}
.pixel-button span {
display: block;
padding: 12px 12px;
border: 3px solid var(--border-dark);
box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.06);
font-family: var(--font-display);
font-size: 0.56rem;
letter-spacing: 0.12em;
}
.pixel-button:hover span {
transform: translate(-1px, -1px);
}
.pixel-button:active span {
transform: translate(1px, 1px);
}
.pixel-button:disabled {
cursor: not-allowed;
opacity: 0.45;
}
.pixel-button--green span {
background: linear-gradient(180deg, rgba(55, 112, 68, 0.9), rgba(20, 58, 28, 0.96));
color: var(--text-main);
}
.pixel-button--cyan span {
background: linear-gradient(180deg, rgba(35, 104, 112, 0.9), rgba(16, 49, 54, 0.96));
color: #d8feff;
}
.pixel-button--red span {
background: linear-gradient(180deg, rgba(125, 56, 56, 0.9), rgba(63, 21, 21, 0.96));
color: #ffe6e6;
}
.pixel-button--amber span {
background: linear-gradient(180deg, rgba(132, 95, 37, 0.9), rgba(70, 45, 12, 0.96));
color: #fff2d5;
}
.error-banner {
margin-bottom: 16px;
padding: 12px 14px;
color: var(--accent-red);
}
.toast-stack {
position: absolute;
right: 18px;
bottom: 18px;
z-index: 5;
display: grid;
gap: 10px;
width: min(420px, calc(100vw - 64px));
}
.toast {
display: grid;
gap: 8px;
width: 100%;
padding: 12px 14px;
text-align: left;
border: 3px solid var(--border-dark);
box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.05), var(--shadow-panel);
background: linear-gradient(180deg, rgba(60, 22, 22, 0.98), rgba(18, 8, 8, 0.98));
color: #ffd9d9;
cursor: pointer;
}
.toast--info {
background: linear-gradient(180deg, rgba(18, 52, 55, 0.98), rgba(8, 17, 20, 0.98));
color: #d8feff;
}
.toast__label {
font-family: var(--font-display);
font-size: 0.58rem;
letter-spacing: 0.16em;
color: var(--accent-amber);
}
.toast__message {
font-size: 0.82rem;
line-height: 1.45;
word-break: break-word;
}
.console-grid {
display: grid;
grid-template-columns: minmax(0, 1.55fr) minmax(320px, 0.9fr);
gap: 16px;
align-items: start;
}
.console-grid__main,
.console-grid__side {
display: flex;
flex-direction: column;
gap: 16px;
min-width: 0;
}
.console-grid__side {
min-width: 0;
}
.console-grid__main {
min-width: 0;
}
.panel-frame__header {
padding: 14px 16px 0;
display: flex;
justify-content: space-between;
gap: 14px;
align-items: start;
}
.panel-frame__body {
padding: 14px 16px 16px;
}
.panel-frame__extra {
flex-shrink: 0;
}
.chat-panel {
display: flex;
flex-direction: column;
}
.chat-panel .panel-frame__body {
height: 62vh;
min-height: 62vh;
}
.chat-stream,
.team-card__body {
min-height: 420px;
max-height: 62vh;
overflow: auto;
padding: 16px;
border: 2px solid var(--border-mid);
background:
linear-gradient(180deg, rgba(4, 8, 5, 0.88) 0%, rgba(8, 12, 9, 0.92) 100%);
}
.chat-panel .chat-stream {
height: 100%;
min-height: 100%;
max-height: none;
}
.chat-stream pre,
.team-message pre {
margin: 0;
white-space: pre-wrap;
word-break: break-word;
font-family: var(--font-body);
}
.chat-stream pre {
color: var(--accent-green);
line-height: 1.55;
}
.empty-state {
display: grid;
gap: 10px;
min-height: 100%;
place-content: center;
text-align: center;
color: var(--text-dim);
font-family: var(--font-display);
font-size: 0.62rem;
line-height: 1.9;
}
.empty-state--small {
font-size: 0.56rem;
}
.prompt-composer {
padding: 14px;
}
.prompt-composer textarea {
width: 100%;
min-height: 110px;
resize: vertical;
border: 3px solid var(--border-dark);
box-shadow: inset 0 0 0 2px var(--border-mid);
background: rgba(5, 10, 6, 0.95);
color: var(--text-main);
padding: 14px;
outline: none;
}
.prompt-composer textarea::placeholder {
color: var(--text-muted);
}
.prompt-composer__actions {
display: flex;
justify-content: space-between;
gap: 12px;
align-items: center;
margin-top: 12px;
color: var(--text-muted);
font-size: 0.78rem;
}
.team-board {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 14px;
align-items: start;
}
.team-card {
border: 2px solid var(--border-mid);
background: linear-gradient(180deg, rgba(10, 16, 11, 0.92), rgba(8, 12, 9, 0.96));
box-shadow: inset 0 0 0 1px rgba(114, 255, 132, 0.08);
min-height: 348px;
}
.team-card__header {
display: flex;
justify-content: space-between;
gap: 10px;
align-items: center;
padding: 12px 14px;
border-bottom: 1px dashed rgba(70, 121, 84, 0.32);
}
.team-card__identity {
display: flex;
gap: 10px;
align-items: center;
min-width: 0;
}
.team-card__icon {
display: grid;
place-items: center;
width: 34px;
height: 34px;
border: 1px solid var(--border-light);
background: rgba(35, 52, 41, 0.72);
font-size: 1rem;
}
.team-card__identity h3,
.team-card__identity p {
margin: 0;
}
.team-card__identity h3 {
font-size: 0.9rem;
}
.team-card__identity p {
color: var(--text-muted);
font-size: 0.72rem;
}
.team-card__count {
display: inline-flex;
min-width: 28px;
justify-content: center;
padding: 4px 6px;
border: 1px solid var(--accent-cyan);
color: var(--accent-cyan);
font-family: var(--font-display);
font-size: 0.62rem;
}
.team-card__body {
min-height: 276px;
max-height: 276px;
}
.team-message {
display: grid;
gap: 8px;
padding: 0 0 10px;
margin-bottom: 10px;
border-bottom: 1px dashed rgba(70, 121, 84, 0.22);
}
.team-message:last-child {
margin-bottom: 0;
border-bottom: 0;
padding-bottom: 0;
}
.team-message__speaker {
color: var(--accent-cyan);
font-family: var(--font-display);
font-size: 0.6rem;
}
.team-message pre {
color: var(--text-main);
line-height: 1.45;
font-size: 0.84rem;
}
@media (max-width: 1024px) {
.console-grid {
grid-template-columns: 1fr;
}
.team-board {
grid-template-columns: 1fr;
}
}
@media (max-width: 640px) {
.app-shell {
padding: 14px;
}
.app-shell__header,
.prompt-composer__actions {
flex-direction: column;
align-items: stretch;
}
.app-shell__project {
max-width: 100%;
}
.shell-frame__screen {
min-height: auto;
padding: 12px;
}
.panel-frame__header {
flex-direction: column;
align-items: stretch;
}
.session-toolbar--inline {
justify-content: stretch;
flex-wrap: wrap;
}
}