carprint / web /src /styles /studio.css
Azamaka's picture
deploy CarPrint
b69909e verified
Raw History Blame Contribute Delete
16.3 kB
.studio {
min-height: 100svh;
background: var(--paper);
display: flex;
flex-direction: column;
}
.studio__bar {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--s-5);
padding: 0 var(--gutter);
min-height: 64px;
background: var(--ink);
color: var(--ink-text);
}
.studio__tabs {
display: flex;
gap: 4px;
margin-left: var(--s-5);
}
.studio__tabs button {
border: 0;
background: transparent;
color: var(--ink-muted);
padding: 22px 14px 20px;
font-size: 15px;
border-bottom: 2px solid transparent;
}
.studio__tabs button[aria-selected="true"] {
color: var(--ink-text);
border-bottom-color: var(--signal);
}
.studio__bar-right {
margin-left: auto;
display: flex;
align-items: center;
gap: var(--s-4);
}
.studio__home {
color: var(--ink-muted);
font-size: 14px;
text-decoration: none;
}
.studio__home:hover {
color: var(--ink-text);
}
.studio__main {
flex: 1 1 auto;
}
/* ---------- quick check ---------- */
.quick,
.plan {
padding-top: var(--s-8);
padding-bottom: var(--s-9);
}
.quick__head {
display: flex;
flex-wrap: wrap;
align-items: flex-end;
justify-content: space-between;
gap: var(--s-5);
}
.quick__intro {
margin-top: 16px;
max-width: 640px;
font-size: 17px;
}
.quick__drops {
margin-top: var(--s-7);
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--s-5);
}
.drop {
background: var(--sheet);
border: 1px solid var(--line);
border-radius: var(--radius);
padding: 20px;
transition: border-color var(--t-fast) var(--ease), background-color var(--t-fast) var(--ease);
}
.drop.is-over {
border-color: var(--signal);
background: #fff8f4;
}
.drop__head {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 12px;
}
.drop__title {
font-size: 22px;
font-weight: 600;
letter-spacing: -0.01em;
}
.drop__empty {
margin-top: 16px;
width: 100%;
min-height: 240px;
border: 1px dashed #bdbab2;
background: var(--paper-2);
border-radius: var(--radius);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 10px;
color: var(--text-2);
font-size: 16px;
}
.drop__empty:hover {
border-color: var(--text);
}
.drop__grid {
margin-top: 16px;
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 8px;
}
.drop__thumb {
position: relative;
aspect-ratio: 4 / 3;
background: var(--paper-2);
}
.drop__thumb img {
width: 100%;
height: 100%;
object-fit: cover;
}
.drop__thumb button {
position: absolute;
top: 4px;
right: 4px;
width: 28px;
height: 28px;
border: 0;
border-radius: 50%;
background: rgba(12, 13, 15, 0.7);
color: var(--ink-text);
display: inline-flex;
align-items: center;
justify-content: center;
}
.drop__add {
width: 100%;
aspect-ratio: 4 / 3;
border: 1px dashed #bdbab2;
background: transparent;
display: inline-flex;
align-items: center;
justify-content: center;
}
.quick__run {
margin-top: var(--s-5);
display: flex;
flex-wrap: wrap;
align-items: flex-end;
justify-content: space-between;
gap: var(--s-5);
}
.field {
display: flex;
flex-direction: column;
gap: 8px;
border: 0;
padding: 0;
margin: 0;
}
.field select,
.field input {
height: 48px;
min-width: 280px;
padding: 0 14px;
border: 1px solid #c9c7c0;
border-radius: var(--radius);
background: var(--sheet);
font-size: 16px;
}
.field select:focus,
.field input:focus {
border-color: var(--text);
outline: none;
}
.alert {
margin-top: var(--s-5);
display: flex;
align-items: center;
gap: 10px;
padding: 14px 16px;
border: 1px solid var(--different);
color: var(--different-text);
background: #fff5f6;
font-size: 15px;
}
.quick__lang-note {
margin-top: var(--s-5);
}
/* honest progress */
.progress {
margin-top: var(--s-6);
border: 1px solid var(--line);
background: var(--sheet);
padding: 20px 24px;
position: relative;
overflow: hidden;
}
.progress__scan {
position: absolute;
inset: 0 0 auto 0;
height: 2px;
background: var(--line-soft);
}
.progress__scan span {
position: absolute;
top: 0;
height: 2px;
width: 30%;
background: var(--signal);
animation: sweep 1.4s var(--ease-in-out) infinite;
}
@keyframes sweep {
from {
left: -30%;
}
to {
left: 100%;
}
}
.progress__stages {
display: flex;
flex-wrap: wrap;
gap: 8px 24px;
font-size: 15px;
color: var(--faint);
}
.progress__stages li {
display: inline-flex;
gap: 8px;
align-items: baseline;
transition: color var(--t-mid) var(--ease);
}
.progress__stages .mono {
font-size: 11px;
}
.progress__stages li.is-done {
color: var(--text);
}
.progress__stages li.is-now {
color: var(--signal-text);
}
.progress__time {
display: block;
margin-top: 12px;
font-size: 12px;
color: var(--muted);
}
/* ---------- result ---------- */
.result {
display: grid;
grid-template-columns: 260px minmax(0, 1fr) 380px;
min-height: calc(100svh - 64px);
}
.result__frames {
border-right: 1px solid var(--line);
background: var(--paper-2);
padding: 24px 20px 32px;
}
.frames + .frames {
margin-top: 28px;
}
.frames ul {
margin-top: 12px;
display: flex;
flex-direction: column;
gap: 8px;
}
.frames li {
display: grid;
grid-template-columns: 64px minmax(0, 1fr);
grid-template-rows: auto auto;
column-gap: 12px;
align-items: center;
padding-bottom: 8px;
border-bottom: 1px solid var(--line);
}
.frames img,
.frames__ph {
grid-row: 1 / span 2;
width: 64px;
height: 48px;
object-fit: cover;
background: var(--line-soft);
}
.frames__slot {
font-size: 14px;
font-weight: 500;
}
.frames__q {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 11px;
color: var(--ok);
}
.frames__q.is-bad {
color: var(--review-text);
}
.result__integrity {
margin-top: 20px;
}
.result__center {
padding: 24px 28px 40px;
min-width: 0;
}
.result__toolbar {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.result__meta {
font-size: 12px;
color: var(--muted);
}
.seg {
display: inline-flex;
border: 1px solid #c9c7c0;
border-radius: var(--radius);
}
.seg button {
border: 0;
background: transparent;
padding: 9px 14px;
font-size: 14px;
}
.seg button + button {
border-left: 1px solid #c9c7c0;
}
.seg button[aria-selected="true"],
.seg button[aria-pressed="true"] {
background: var(--text);
color: var(--paper);
}
.result__viewer {
margin-top: 16px;
background: var(--ink);
border-radius: var(--radius);
padding: 10px;
min-height: 360px;
display: flex;
align-items: center;
justify-content: center;
}
.result__empty {
color: var(--ink-muted);
font-size: 15px;
padding: 40px;
text-align: center;
max-width: 480px;
}
.result__pairs {
margin-top: 14px;
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.result__pairs button {
border: 1px solid #c9c7c0;
background: var(--sheet);
border-radius: var(--radius);
padding: 8px 12px;
font-size: 13px;
}
.result__pairs button[aria-pressed="true"] {
background: var(--text);
color: var(--paper);
border-color: var(--text);
}
.slider {
position: relative;
width: 100%;
user-select: none;
touch-action: none;
cursor: ew-resize;
}
.slider img {
width: 100%;
height: auto;
display: block;
}
.slider__after {
position: absolute;
inset: 0;
height: 100% !important;
object-fit: fill;
}
.slider__divider {
position: absolute;
top: 0;
bottom: 0;
width: 2px;
margin-left: -1px;
background: var(--ink-text);
}
.slider__knob {
position: absolute;
top: 50%;
left: 50%;
width: 40px;
height: 40px;
margin: -20px 0 0 -20px;
border-radius: 50%;
background: var(--ink-text);
color: var(--ink);
display: flex;
align-items: center;
justify-content: center;
}
.slider__tag {
position: absolute;
top: 12px;
font-size: 11px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--ink-text);
background: rgba(12, 13, 15, 0.6);
padding: 6px 8px;
}
.slider__tag--left {
left: 12px;
}
.slider__tag--right {
right: 12px;
}
.slider__range {
position: absolute;
left: 0;
right: 0;
bottom: 0;
width: 100%;
opacity: 0;
height: 32px;
cursor: ew-resize;
}
.slider__range:focus-visible {
opacity: 0.6;
}
.timeline {
margin-top: 28px;
border-top: 1px solid var(--text);
}
.timeline__head {
display: flex;
justify-content: space-between;
padding: 14px 0;
}
.timeline__empty {
color: var(--muted);
font-size: 15px;
padding: 8px 0;
}
.timeline__grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
border-top: 1px solid var(--line);
}
.timeline__grid li {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 8px;
padding: 16px 16px 16px 0;
border-bottom: 1px solid var(--line);
font-size: 14px;
color: var(--muted);
}
.timeline__grid strong {
color: var(--text);
font-size: 15px;
}
.result__side {
border-left: 1px solid var(--line);
background: var(--sheet);
padding: 28px;
display: flex;
flex-direction: column;
gap: 18px;
}
.verdict {
display: flex;
align-items: center;
gap: 12px;
font-size: 30px;
line-height: 1.1;
font-weight: 600;
letter-spacing: -0.02em;
}
.verdict svg {
flex: 0 0 auto;
}
.verdict--same svg {
color: var(--same);
}
.verdict--review svg,
.verdict--recapture_required svg {
color: var(--review);
}
.verdict--different svg {
color: var(--different);
}
.reasons {
display: flex;
flex-direction: column;
gap: 6px;
font-size: 15px;
line-height: 1.5;
color: var(--text-2);
}
.reasons li {
padding-left: 14px;
position: relative;
}
.reasons li::before {
content: "";
position: absolute;
left: 0;
top: 0.7em;
width: 6px;
height: 1px;
background: var(--text);
}
.result__facts {
display: flex;
flex-wrap: wrap;
gap: 8px;
font-size: 11px;
}
.result__facts span {
padding: 5px 8px;
border: 1px solid var(--line);
}
.result__cost .cost {
border: 0;
border-top: 1px solid var(--line);
border-radius: 0;
}
.result__cost .cost__head,
.result__cost .cost__strip,
.result__cost .cost__foot {
padding-left: 0;
padding-right: 0;
}
.result__cost .cost__value {
font-size: 32px;
}
.result__cost .cost__table th:first-child,
.result__cost .cost__table td:first-child {
padding-left: 0;
}
.result__cost .cost__table th:last-child,
.result__cost .cost__table td:last-child {
padding-right: 0;
}
.result__nocost {
font-size: 15px;
color: var(--muted);
padding-top: 16px;
border-top: 1px solid var(--line);
}
.result__actions {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
/* ---------- guided inspection ---------- */
.plan__form {
margin-top: var(--s-6);
display: flex;
flex-wrap: wrap;
align-items: flex-end;
gap: var(--s-5);
}
.plan__top {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: baseline;
gap: 12px;
}
.plan__progress {
margin-top: 16px;
display: grid;
grid-template-columns: repeat(9, minmax(0, 1fr));
gap: 4px;
}
.plan__progress span {
height: 3px;
background: var(--line);
}
.plan__progress .is-done {
background: var(--signal);
}
.plan__progress .is-bad {
background: var(--review);
}
.plan__grid {
margin-top: var(--s-6);
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: var(--s-5);
}
.shot {
display: flex;
flex-direction: column;
gap: 10px;
}
.shot__frame {
position: relative;
aspect-ratio: 4 / 3;
background: var(--ink-2);
color: var(--ink-muted);
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.shot__frame img {
width: 100%;
height: 100%;
object-fit: cover;
}
.silhouette {
width: 82%;
}
.shot__num {
position: absolute;
left: 10px;
top: 8px;
font-size: 11px;
color: var(--ink-text);
}
.shot__text {
font-size: 15px;
line-height: 1.4;
}
.shot__status {
font-size: 12px;
min-height: 16px;
}
.shot__status .is-ok {
color: var(--ok);
display: inline-flex;
gap: 6px;
align-items: center;
}
.shot__status .is-bad {
color: var(--review-text);
display: inline-flex;
gap: 6px;
align-items: center;
}
.shot__btn {
align-self: flex-start;
cursor: pointer;
}
.plan__finish {
margin-top: var(--s-6);
}
.plan__after {
margin-top: var(--s-7);
display: grid;
grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
gap: var(--s-6);
align-items: start;
}
.plan__compare {
display: flex;
flex-direction: column;
gap: 14px;
align-items: flex-start;
}
.plan__compare ul {
display: flex;
flex-direction: column;
gap: 8px;
}
@media (max-width: 1180px) {
.result {
grid-template-columns: minmax(0, 1fr) 360px;
}
.result__frames {
grid-column: 1 / -1;
border-right: 0;
border-bottom: 1px solid var(--line);
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--s-5);
}
.frames + .frames {
margin-top: 0;
}
}
@media (max-width: 860px) {
.quick__drops,
.plan__after {
grid-template-columns: minmax(0, 1fr);
}
.result {
grid-template-columns: minmax(0, 1fr);
}
.result__side {
border-left: 0;
border-top: 1px solid var(--line);
}
.result__frames {
grid-template-columns: minmax(0, 1fr);
}
.studio__tabs {
order: 3;
width: 100%;
margin-left: 0;
}
.studio__tabs button {
padding: 12px 10px;
}
.field select,
.field input {
min-width: 0;
width: 100%;
}
.quick__run .field {
flex: 1 1 100%;
}
}
.result__overlay {
width: 100%;
height: auto;
display: block;
}
.timeline__check {
font-style: normal;
color: var(--signal-text);
}
.findings {
grid-column: 1 / -1;
display: flex;
flex-direction: column;
gap: 14px;
}
.findings__grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: var(--s-5, 24px);
}
.findings__grid > li {
display: flex;
flex-direction: column;
gap: 10px;
position: relative;
}
.findings__grid img {
width: 100%;
height: auto;
display: block;
border: 1px solid var(--line);
}
.findings__slot {
position: absolute;
top: 8px;
left: 8px;
padding: 2px 8px;
background: var(--ink);
color: var(--ink-text);
font-size: 12px;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.findings__list li {
display: flex;
flex-direction: column;
gap: 2px;
padding: 10px 0;
border-bottom: 1px solid var(--line);
font-size: 14px;
color: var(--muted);
}
.findings__list strong {
color: var(--text);
font-size: 15px;
}
.examples {
padding-top: var(--s-7, 48px);
padding-bottom: var(--s-8, 64px);
}
.examples__grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: var(--s-5, 24px);
margin: var(--s-6, 32px) 0;
}
.examples__grid > li {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 8px;
padding-bottom: 12px;
border-bottom: 1px solid var(--line);
}
.examples__grid > li.is-active {
border-bottom-color: var(--signal);
}
.examples__grid img {
width: 100%;
aspect-ratio: 4 / 3;
object-fit: cover;
display: block;
border: 1px solid var(--line);
}