:root {
    /* Color system */
    --bg-panel: #ffffff;
    --bg-input: #f7f9fb;
    --bg-subtle: #f1f4f9;

    --border: #e4e8ee;
    --border-light: #cbd5e1;

    --text: #1a2233;
    --text-dim: #5b6779;
    --text-faint: #94a0b2;

    --accent: #1b2fe7;
    --accent-hover: #1626c2;
    --accent-dim: rgba(27, 47, 231, 0.08);
    --accent-ring: rgba(27, 47, 231, 0.18);

    --accent-2: #159a82;
    --accent-2-hover: #117e6a;
    --accent-2-dim: rgba(21, 154, 130, 0.09);
    --accent-2-ring: rgba(21, 154, 130, 0.18);

    --danger: #dc3d2e;
    --danger-dim: rgba(220, 61, 46, 0.08);
    --danger-ring: rgba(220, 61, 46, 0.2);

    --control-h: 40px;
    --radius-sm: 6px;
    --radius: 9px;
    --radius-lg: 14px;
    --shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.05);
    --shadow-md: 0 6px 18px rgba(15, 23, 42, 0.07);

    --ease: cubic-bezier(0.4, 0, 0.2, 1);

    --mono: 'JetBrains Mono', ui-monospace, monospace;
    --sans: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    --display: 'Space Grotesk', var(--sans);
}

/* Layout */

.workspace {
    max-width: 1280px;
    margin: 0 auto;
    padding: 32px 24px 72px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px;
    align-items: start;
    color: var(--text);
    font-family: var(--sans);
    -webkit-font-smoothing: antialiased;
}

@media (max-width: 960px) {
    .workspace {
        grid-template-columns: 1fr;
    }
}

.panel {
    background: var(--bg-panel);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-md);
    padding: 26px;
}

.panel-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    padding-bottom: 16px;
    margin-bottom: 22px;
    border-bottom: 1px solid var(--border);
}

.panel-head h2 {
    font-family: var(--display);
    font-size: 19px;
    font-weight: 700;
    margin: 0;
    letter-spacing: 0.1px;
    color: var(--text);
}

.panel-head span {
    font-family: var(--mono);
    font-size: 11px;
    font-weight: 500;
    color: var(--accent);
    background: var(--accent-dim);
    padding: 4px 9px;
    border-radius: 999px;
}

/* Toolbar */

.toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    padding: 6px;
    background: var(--bg-subtle);
    border-radius: var(--radius);
    margin-bottom: 20px;
}

.tbtn {
    display: flex;
    align-items: center;
    gap: 6px;
    height: 34px;
    padding: 0 13px;
    border: 1px solid transparent;
    border-radius: 7px;
    background: transparent;
    color: var(--text-dim);
    font-family: var(--sans);
    font-size: 12.5px;
    font-weight: 600;
    cursor: pointer;
    white-space: nowrap;
    transition: border-color 0.12s var(--ease), background-color 0.12s var(--ease), color 0.12s var(--ease), box-shadow 0.12s var(--ease);
}

.tbtn svg {
    width: 15px;
    height: 15px;
    flex-shrink: 0;
}

.tbtn:hover {
    background: #ffffff;
    color: var(--text);
    box-shadow: var(--shadow-sm);
}

.tbtn.active {
    background: var(--accent);
    color: #ffffff;
    box-shadow: 0 2px 8px var(--accent-ring);
}

.tbtn.danger {
    color: var(--danger);
    margin-left: auto;
}

.tbtn.danger:hover {
    background: var(--danger-dim);
    color: var(--danger);
    box-shadow: none;
}

.sep {
    width: 1px;
    align-self: stretch;
    background: var(--border-light);
    margin: 4px 2px;
}

/* Stage / canvas */

.stage {
    display: flex;
    justify-content: center;
    padding: 22px;
    background:
        linear-gradient(45deg, var(--bg-subtle) 25%, transparent 25%, transparent 75%, var(--bg-subtle) 75%, var(--bg-subtle)),
        linear-gradient(45deg, var(--bg-subtle) 25%, #ffffff 25%, #ffffff 75%, var(--bg-subtle) 75%, var(--bg-subtle));
    background-size: 16px 16px;
    background-position: 0 0, 8px 8px;
    background-color: #ffffff;
    border: 1px solid var(--border);
    border-radius: var(--radius);
    margin-bottom: 10px;
}

#stampCanvas {
    background: transparent;
    border-radius: 4px;
    max-width: 100%;
    box-shadow: 0 2px 10px rgba(15, 23, 42, 0.08);
}

.stage-caption {
    font-family: var(--mono);
    font-size: 11px;
    color: var(--text-faint);
    text-align: center;
    margin: 0 0 24px;
    line-height: 1.6;
}

/* Groups (sections) */

.group {
    margin-bottom: 24px;
    padding-bottom: 24px;
    border-bottom: 1px solid var(--border);
}

.group:last-of-type {
    margin-bottom: 0;
    padding-bottom: 0;
    border-bottom: none;
}

.group h3 {
    display: flex;
    align-items: center;
    gap: 9px;
    font-family: var(--display);
    font-size: 14px;
    font-weight: 700;
    margin: 0 0 16px;
    color: var(--text);
}

.group h3 svg {
    width: 15px;
    height: 15px;
    color: var(--accent);
    flex-shrink: 0;
    padding: 5px;
    box-sizing: content-box;
    background: var(--accent-dim);
    border-radius: 7px;
}

/* Form controls */

.row {
    display: flex;
    gap: 14px;
    flex-wrap: wrap;
    margin-bottom: 14px;
}

.row:last-child {
    margin-bottom: 0;
}

.field {
    flex: 1 1 120px;
    min-width: 120px;
    display: flex;
    flex-direction: column;
    gap: 7px;
}

.field label {
    font-size: 11.5px;
    font-weight: 600;
    color: var(--text-dim);
    text-transform: uppercase;
    letter-spacing: 0.3px;
}

input[type="text"],
input[type="number"],
select,
textarea {
    width: 100%;
    height: var(--control-h);
    padding: 0 12px;
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    background: var(--bg-input);
    font-family: var(--sans);
    font-size: 13px;
    color: var(--text);
    box-sizing: border-box;
    transition: border-color 0.12s var(--ease), box-shadow 0.12s var(--ease), background-color 0.12s var(--ease);
}

select {
    text-overflow: ellipsis;
    cursor: pointer;
    background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a0b2' stroke-width='2'%3e%3cpath d='M6 9l6 6 6-6' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-position: right 10px center;
    background-size: 14px;
    appearance: none;
    padding-right: 32px;
}

textarea {
    height: auto;
    min-height: 78px;
    padding: 10px 12px;
    resize: vertical;
    line-height: 1.5;
}

input[type="text"]:hover,
input[type="number"]:hover,
select:hover,
textarea:hover {
    border-color: var(--border-light);
}

input[type="text"]:focus,
input[type="number"]:focus,
select:focus,
textarea:focus {
    outline: none;
    border-color: var(--accent-2);
    background: #ffffff;
    box-shadow: 0 0 0 3px var(--accent-2-ring);
}

input[type="color"] {
    width: 100%;
    height: var(--control-h);
    padding: 4px;
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    background: var(--bg-input);
    cursor: pointer;
}

input[type="color"]:hover {
    border-color: var(--border-light);
}

input[type="file"] {
    width: 100%;
    font-family: var(--sans);
    font-size: 12.5px;
    color: var(--text-faint);
    display: flex;
    align-items: center;
    height: var(--control-h);
    padding: 0 4px;
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    background: var(--bg-input);
}

input[type="file"]::file-selector-button {
    height: 30px;
    padding: 0 14px;
    margin-right: 12px;
    border: 1px solid var(--border-light);
    border-radius: 7px;
    background: #ffffff;
    color: var(--text);
    font-family: var(--sans);
    font-size: 12px;
    font-weight: 600;
    cursor: pointer;
    transition: border-color 0.12s var(--ease), color 0.12s var(--ease);
}

input[type="file"]::file-selector-button:hover {
    border-color: var(--accent-2);
    color: var(--accent-2);
}

.field-suffix {
    position: relative;
}

.field-suffix input {
    padding-right: 36px;
}

.field-suffix span {
    position: absolute;
    right: 12px;
    top: 50%;
    transform: translateY(calc(50% + 3px));
    font-family: var(--mono);
    font-size: 11px;
    font-weight: 600;
    color: var(--text-faint);
    pointer-events: none;
}

.check {
    display: inline-flex;
    width: auto;
    align-items: center;
    gap: 9px;
    font-size: 12.5px;
    font-weight: 500;
    color: var(--text-dim);
    cursor: pointer;
    margin-top: 6px;
}

.check input {
    width: 16px;
    height: 16px;
    margin: 0;
    flex-shrink: 0;
    accent-color: var(--accent-2);
    cursor: pointer;
}

/* Buttons */

.btn-row {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    align-items: center;
}

.btn-row select {
    width: auto;
    max-width: 170px;
    flex: 1 1 140px;
}

.btn {
    height: var(--control-h);
    padding: 0 16px;
    border: 1px solid var(--border-light);
    border-radius: var(--radius-sm);
    background: #ffffff;
    color: var(--text);
    font-family: var(--sans);
    font-size: 12.5px;
    font-weight: 600;
    cursor: pointer;
    white-space: nowrap;
    transition: border-color 0.12s var(--ease), color 0.12s var(--ease), background-color 0.12s var(--ease);
}

.btn:hover {
    border-color: var(--accent-2);
    color: var(--accent-2);
    background: var(--accent-2-dim);
}

.btn-ghost {
    width: 100%;
    height: 44px;
    border: 1.5px solid var(--accent);
    border-radius: var(--radius);
    background: #ffffff;
    color: var(--accent);
    font-family: var(--sans);
    font-weight: 700;
    font-size: 13.5px;
    cursor: pointer;
    transition: background-color 0.12s var(--ease), color 0.12s var(--ease), box-shadow 0.12s var(--ease);
}

.btn-ghost:hover {
    background: var(--accent);
    color: #ffffff;
    box-shadow: 0 4px 12px var(--accent-ring);
}

.btn-primary {
    width: 100%;
    height: 46px;
    background: var(--accent);
    color: #ffffff;
    border: none;
    border-radius: var(--radius);
    font-family: var(--sans);
    font-weight: 700;
    font-size: 14px;
    cursor: pointer;
    box-shadow: var(--shadow-sm);
    transition: background-color 0.12s var(--ease), box-shadow 0.12s var(--ease), transform 0.08s var(--ease);
}

.btn-primary:hover {
    background: var(--accent-hover);
    box-shadow: 0 6px 16px var(--accent-ring);
}

.btn-primary:active {
    transform: translateY(1px);
}

/* Steps (Apply panel) */

.steps {
    list-style: none;
    margin: 0 0 22px;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 22px;
}

.step {
    display: flex;
    gap: 14px;
}

.step-num {
    width: 27px;
    height: 27px;
    border-radius: 50%;
    background: var(--accent-dim);
    border: 1px solid var(--accent-ring);
    color: var(--accent);
    font-family: var(--mono);
    font-size: 12.5px;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.step-body {
    flex: 1 1 auto;
    min-width: 0;
}

.step-title {
    font-size: 14px;
    font-weight: 700;
    color: var(--text);
    margin: 0 0 4px;
}

.step-desc {
    font-size: 12px;
    color: var(--text-faint);
    margin: 0 0 12px;
    line-height: 1.5;
}

/* Stamp preview */

.stamp-preview {
    border: 1px dashed var(--border-light);
    border-radius: var(--radius-sm);
    background: var(--bg-input);
    padding: 20px;
    text-align: center;
}

.stamp-preview img {
    max-width: 140px;
    max-height: 140px;
    object-fit: contain;
}

#stampPreviewInfo {
    font-size: 12px;
    color: var(--text-faint);
    line-height: 1.55;
    margin: 0;
}

/* Dropzone + file chip */

.dropzone {
    border: 1.5px dashed var(--border-light);
    border-radius: var(--radius);
    padding: 28px 16px;
    text-align: center;
    cursor: pointer;
    background: var(--bg-input);
    transition: border-color 0.15s var(--ease), background-color 0.15s var(--ease), box-shadow 0.15s var(--ease);
}

.dropzone:hover {
    border-color: var(--accent-2);
    background: var(--accent-2-dim);
    box-shadow: 0 0 0 4px var(--accent-2-ring);
}

.done{
    text-transform: none !important;
    background-color: transparent !important;
    border: 0 !important;
}
.dropzone svg {
    width: 30px;
    color: var(--accent);
    margin-bottom: 8px;
}

.dropzone div {
    font-size: 13px;
    color: var(--text-dim);
}

.dropzone b {
    color: var(--text);
    font-weight: 700;
}

.file-chip {
    margin-top: 10px;
    font-family: var(--mono);
    font-size: 12px;
    color: var(--text-dim);
}

.file-chip:not(:empty) {
    padding: 11px 13px;
    background: var(--bg-input);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-sm);
}

/* Position grid */

.pos-field {
    flex: 1 1 140px;
    display: flex;
    flex-direction: column;
    gap: 7px;
}

.pos-field label {
    font-size: 11.5px;
    font-weight: 600;
    color: var(--text-dim);
    text-transform: uppercase;
    letter-spacing: 0.3px;
}

.page-pos {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 6px;
    width: 112px;
    padding: 6px;
    background: var(--bg-input);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
}

.page-pos > * {
    aspect-ratio: 1;
    border: 1px solid var(--border-light);
    border-radius: 4px;
    background: #ffffff;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    transition: border-color 0.12s var(--ease), background-color 0.12s var(--ease);
}

.page-pos > *:hover {
    border-color: var(--accent-2);
}

.page-pos > *::after {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--text-faint);
}

.page-pos > *.active {
    background: var(--accent);
    border-color: var(--accent);
}

.page-pos > *.active::after {
    background: #ffffff;
}

/* Range sliders */

.range-row {
    display: flex;
    align-items: center;
    gap: 10px;
    height: var(--control-h);
}

.range-row input[type="range"] {
    flex: 1;
    accent-color: var(--accent-2);
}

.range-val {
    font-family: var(--mono);
    font-size: 11.5px;
    font-weight: 600;
    color: var(--text-dim);
    min-width: 42px;
    text-align: right;
}

/* Status + download */

#status {
    margin-top: 14px;
    font-family: var(--mono);
    font-size: 12px;
    color: var(--text-dim);
    line-height: 1.5;
}

#dl {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 44px;
    margin-top: 14px;
    background: var(--accent-2);
    color: #ffffff;
    border-radius: var(--radius);
    text-decoration: none;
    font-family: var(--sans);
    font-weight: 700;
    font-size: 13.5px;
    box-shadow: var(--shadow-sm);
    transition: background-color 0.12s var(--ease), box-shadow 0.12s var(--ease);
}

#dl:hover {
    background: var(--accent-2-hover);
    box-shadow: 0 6px 16px var(--accent-2-ring);
}

.hidden {
    display: none !important;
}