:root,
[data-theme="light"] {
    --bg: #f3f3f3;
    --text: #222222;
    --muted: #666666;
    --title: #333333;
    --panel: #ffffff;
    --panel-border: #dddddd;
    --stage: #ececec;
    --bar: #fafafa;
    --line: #eeeeee;
    --accent: #0066ff;
    --btn-bg: #ffffff;
    --btn-border: #cccccc;
    --btn-hover: #f0f0f0;
    --resizer: #e4e4e4;
    --resizer-hover: #c5d8ff;
    --input-bg: #ffffff;
    --shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
    --modal-dim: rgba(0, 0, 0, 0.45);
    --check-a: #ffffff; 
    --check-b: #d5d5d5;
}
[data-theme="dark"] {
    --bg: #1c1c1f;
    --text: #ececec;
    --muted: #a3a3ad;
    --title: #f2f2f2;
    --panel: #2a2a2e;
    --panel-border: #3c3c42;
    --stage: #141416;
    --bar: #242428;
    --line: #3a3a40;
    --accent: #4c8dff;
    --btn-bg: #34343a;
    --btn-border: #4a4a52;
    --btn-hover: #404048;
    --resizer: #2e2e33;
    --resizer-hover: #3d5f99;
    --input-bg: #1e1e22;
    --shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
    --modal-dim: rgba(0, 0, 0, 0.62);
    --check-a: #2a2a2e; 
    --check-b: #3a3a40;
}
[data-theme="very-dark"] {
    --bg: #070708;
    --text: #e6e6e6;
    --muted: #8d8d96;
    --title: #f5f5f5;
    --panel: #101012;
    --panel-border: #242428;
    --stage: #030304;
    --bar: #0c0c0e;
    --line: #222226;
    --accent: #6aa2ff;
    --btn-bg: #18181c;
    --btn-border: #2e2e34;
    --btn-hover: #222228;
    --resizer: #161618;
    --resizer-hover: #2c4d82;
    --input-bg: #0c0c0e;
    --shadow: 0 2px 10px rgba(0, 0, 0, 0.55);
    --modal-dim: rgba(0, 0, 0, 0.72);
    --check-a: #161618; 
    --check-b: #2a2a2e;
}
@supports (scrollbar-color: auto) {
    html, body {
        scrollbar-color: var(--muted) var(--stage);
        scrollbar-width: thin;
    }
}
@supports selector(::-webkit-scrollbar) {
    html::-webkit-scrollbar-track, body::-webkit-scrollbar-track {
        background: var(--muted);
    }
    html::-webkit-scrollbar-thumb, body::-webkit-scrollbar-thumb {
        background: var(--stage);
    }
}
html, body {
    height: 100%;
    -webkit-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
body {
    font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    margin: 0;
    padding: 0;
    background: var(--bg);
    color: var(--text);
}
body.modal-open,
body.modal-open .controls,
body.modal-open .view-stage {
    overflow: hidden;
}
h1 { margin: 0; font-size: 1rem; font-weight: 650; }
.app {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}
.titlebar {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 10px 14px;
    background: var(--panel);
    border-bottom: 1px solid var(--panel-border);
}
.brand {
    display: flex;
    align-items: baseline;
    gap: 10px;
    min-width: 0;
}
.brand a:hover{filter: brightness(1.1);}
.titlebar .subtitle {
    font-size: 0.75rem;
    color: var(--muted);
}
.title-actions {
    display: flex;
    align-items: center;
    gap: 8px;
}
.workspace {
    display: flex;
    flex-direction: column;
    gap: 0;
    flex: 1;
}
#preview {
    background-color: var(--check-a);
    background-image:
        linear-gradient(45deg, var(--check-b) 25%, transparent 25%),
        linear-gradient(-45deg, var(--check-b) 25%, transparent 25%),
        linear-gradient(45deg, transparent 75%, var(--check-b) 75%),
        linear-gradient(-45deg, transparent 75%, var(--check-b) 75%);
    background-size: 20px 20px;
    background-position: 0 0, 0 10px, 10px -10px, -10px 0;
}
.preview-area {
    flex: 1 1 auto;
    min-width: 0;
    min-height: 280px;
    display: flex;
    flex-direction: column;
    background: var(--stage);
}
.view-bar {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 6px 10px;
    background: var(--bar);
    border-top: 1px solid var(--panel-border);
    overflow-x: auto;
}
.view-btn {
    padding: 4px 8px;
    font-size: 0.75rem;
    white-space: nowrap;
}
.view-btn.active {
    background: var(--accent);
    color: #fff;
    border-color: var(--accent);
}
.view-label {
    margin-left: auto;
    font-size: 0.75rem;
    color: var(--muted);
    font-family: ui-monospace, monospace;
    white-space: nowrap;
}
.view-stage {
    flex: 1;
    min-height: 240px;
    overflow: auto;
}
.view-center {
    position:relative;
    min-width: 100%;
    min-height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 12px;
    box-sizing: border-box;
}
.view-center.bg-white #preview { background: #ffffff; background-image: none; }
.view-center.bg-black #preview { background: #000000; background-image: none; }
.view-center.bg-gray #preview { background: #808080; background-image: none; }
canvas {
    border: 1px solid var(--panel-border);
    background-color: transparent;
    box-shadow: var(--shadow);
    image-rendering: auto;
    display: block;
}
.resizer {
    display: none;
}
.stats {
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid var(--line);
    font-size: 0.875rem;
    line-height: 1.5;
}
.stats strong { color: var(--title); }
.controls {
    flex: 1 1 auto;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
    background: var(--panel);
    border-top: 1px solid var(--panel-border);
    padding: 16px;
}
@media (min-width: 860px) {
    body {
        overflow: hidden;
    }
    .app {
        height: 100vh;
        min-height: 0;
    }
    .workspace {
        flex-direction: row;
        min-height: 0;
    }
    .preview-area {
        min-height: 0;
    }
    .view-stage {
        min-height: 0;
    }
    .resizer {
        display: block;
        flex: 0 0 6px;
        width: 6px;
        cursor: col-resize;
        background: var(--resizer);
        border-left: 1px solid var(--panel-border);
        border-right: 1px solid var(--panel-border);
    }
    .resizer:hover,
    .resizer.dragging {
        background: var(--resizer-hover);
    }
    .controls {
        flex: 0 0 340px;
        width: 340px;
        min-width: 250px;
        max-width: 38vw;
        height: 100%;
        overflow: auto;
        border-top: none;
    }
}
.modal {
    position: fixed;
    inset: 0;
    z-index: 20;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: var(--modal-dim);
}
.modal[hidden] { display: none; }
.modal-card {
    width: min(560px, 100%);
    max-height: 80vh;
    background: var(--panel);
    color: var(--text);
    border: 1px solid var(--panel-border);
    border-radius: 8px;
    box-shadow: var(--shadow);
    padding: 18px 18px 14px;
}
#exportModal .modal-card{
    width: min(360px, 100%);
}
.modal-card h2 {
    margin: 0 0 8px;
    font-size: 1.1rem;
}
.modal-card p {
    margin: 0 0 10px;
    font-size: 0.9rem;
    line-height: 1.45;
    color: var(--text);
}
.modal-content {
    max-height: calc(80vh - 76px);
    overflow-y: auto;
    overflow-x: hidden;
}
.modal-content h1{
    font-size:1.25em;
    margin-bottom: 18px;
}
.modal-content h2{
    font-size: 1.25em;
    background-image: linear-gradient(90deg, #3390a2 0%, #e4b03a 50%, #df7332 100%);;
    background-clip: text;
    -webkit-background-clip: text;
    color: transparent;
    display: inline-block;
}
.modal-content h3{
    font-size:1em;
    margin-bottom: 12px;
    color: var(--title);
}
.modal-actions {
    display: flex;
    justify-content: flex-end;
    margin-top: 12px;
    gap: 8px;
}
.modal-actions button.active {
    background: var(--accent);
    color: white;
    border-color: var(--accent);
    font-weight: 500;
}
.section {
    margin-bottom: 18px;
    padding-bottom: 14px;
    border-bottom: 1px solid var(--line);
}
.section:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
.section-title {
    font-size: 0.95rem;
    font-weight: 600;
    margin: 0 0 8px 0;
    color: var(--title);
    display:flex;
    gap:8px;
    align-items: center;
    flex-wrap: nowrap;
}
.control-row {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 6px 0;
}
.control-row label {
    min-width: 110px;
    font-size: 0.875rem;
    color: var(--text);
}
input[type="range"] {
    flex: 1;
    accent-color: var(--accent);
}
.value {
    min-width: 52px;
    text-align: right;
    font-family: ui-monospace, monospace;
    font-size: 0.8rem;
    color: var(--muted);
}
input[type="number"],
select {
    width: 80px;
    padding: 4px 6px;
    border: 1px solid var(--btn-border);
    border-radius: 4px;
    font-size: 0.875rem;
    background: var(--input-bg);
    color: var(--text);
}
input[type="color"] {
    width: 42px;
    height: 28px;
    padding: 0;
    border: none;
    background: none;
    cursor: pointer;
}
button {
    padding: 6px 12px;
    font-size: 0.875rem;
    border: 1px solid var(--btn-border);
    background: var(--btn-bg);
    color: var(--text);
    border-radius: 4px;
    cursor: pointer;
}
button:hover { background: var(--btn-hover); }
.note {
    font-size: 0.75rem;
    color: var(--muted);
    margin-top: 4px;
}
.hidden { display: none; }
.control-tabs {
    display: flex;
    flex-wrap: nowrap;
    gap: 6px;
    margin-bottom: 14px;
    border-bottom: 2px solid var(--line);
    padding-bottom: 8px;
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
}
.control-tabs button{
    display:flex;
    gap:8px;
    flex-wrap: nowrap;
    align-items: center;
}
.tab-btn {
    flex: 0 0 auto;
    white-space: nowrap;
    padding: 6px 12px;
    font-size: 0.82rem;
    border: 1px solid var(--btn-border);
    background: var(--btn-bg);
    color: var(--text);
    border-radius: 4px;
    cursor: pointer;
    transition: all 0.1s ease;
}
.tab-btn:hover { background: var(--btn-hover); }
.tab-btn.active {
    background: var(--accent);
    color: white;
    border-color: var(--accent);
    font-weight: 500;
}
.pick-list {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin-top: 10px;
}
.pick-row {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 6px 8px;
    background: var(--bar);
    border: 1px solid var(--panel-border);
    border-radius: 4px;
    font-size: 0.78rem;
}
.pick-swatch {
    width: 18px;
    height: 18px;
    border-radius: 3px;
    box-shadow: 0 0 0 1px #ccc;
    flex: 0 0 18px;
}
.pick-hex {
    font-family: ui-monospace, monospace;
    min-width: 62px;
}
.pick-rgb {
    color: var(--muted);
    font-size: 0.72rem;
    flex: 1;
    min-width: 0;
}
.pick-row button {
    font-size: 0.7rem;
    padding: 2px 7px;
}
.pick-row button.confirm {
    background: #c0392b;
    color: #fff;
    border-color: #a93226;
}
.file-actions {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
}
.file-actions button{
    width: 100%;
    display:flex;
    gap:8px;
    padding:12px;
    align-items: center;
    flex-wrap:nowrap;
    justify-content: center;
}
.file-actions input[type="file"] {
    width: 100%;
}
.file-field {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 0.85rem;
}
.file-field select {
    flex: 1;
    padding: 4px 6px;
    font-size: 0.85rem;
}
.export-size {
    display: flex;
    flex-direction: column;
    gap: 6px;
    padding: 8px;
    background: var(--bar);
    border: 1px solid var(--panel-border);
    border-radius: 6px;
}
.export-size .file-field label {
    min-width: 72px;
}
.export-size input[type="range"] {
    min-width: 0;
}
.export-dims {
    display: flex;
    align-items: center;
    gap: 6px;
}
.export-dims label {
    min-width: auto;
    font-size: 0.8rem;
    color: var(--muted);
}
.export-dims input {
    width: 72px;
}
.crop-workspace {
    display:flex;
    flex-direction:column;
    gap:8px;
    padding: 0px; /* 8px */
    margin:0 -2px 10px;
    /* background: var(--bar); */
    /* border: 1px solid var(--panel-border); */
    /* border-radius: 6px; */
}
.crop-mode-row, .crop-preset-row, .crop-anchor-row, .crop-action-row {
    display:flex;
    align-items:center;
    gap:6px;
    flex-wrap:wrap;
}
.crop-preset-row{
    flex-wrap: nowrap;
    gap: 12px;
}
.crop-preset-row label{
    font-size:2em;
}
.crop-workspace select, .crop-workspace input[type="number"] { width:auto; min-width:0; }
.mini-label { font-size:.72rem; color:var(--muted); font-weight:600; }
.crop-mode-btn.active { background:var(--accent); color:#fff; border-color:var(--accent); }
.crop-preset { 
    flex:1 1 135px;
    padding: 8px;
    background: var(--bar); 
}
.crop-anchor-grid {
    display:grid;
    grid-template-columns:repeat(3, 22px);
    grid-template-rows:repeat(3, 22px);
    gap:3px;
    padding:3px;
    border:1px solid var(--btn-border);
    border-radius:5px;
    background:var(--input-bg);
}
.crop-anchor-grid button {
    width:22px; height:22px; padding:0; border-radius:3px;
    display:flex; align-items:center; justify-content:center;
    font-size:.65rem; line-height:1;
}
.crop-anchor-grid button.active { background:var(--accent); color:#fff; border-color:var(--accent); }
.crop-size-grid { display:grid; grid-template-columns:1fr 1fr; gap:6px; }
.crop-size-grid label { font-size:.7rem; color:var(--muted); display:block; margin-bottom:2px; }
.crop-size-grid input { width:100% !important; box-sizing:border-box; }
.crop-hint { font-size:.7rem; color:var(--muted); line-height:1.35; }
.crop-overlay {
    position:absolute;
    left:0;
    top:0;
    display:none;
    pointer-events:auto;
    touch-action:none;
    z-index:3;
    cursor:move;
    background:transparent !important;
    border:none !important;
    box-shadow:none !important;
}
.view-center.crop-active .crop-overlay { display:block; }
.view-center.crop-active #preview { box-shadow:0 0 0 1px var(--accent), var(--shadow); }
.crop-status {
    display:flex; justify-content:space-between; gap:8px; align-items:center;
    font-size:.72rem; color:var(--muted); font-family:ui-monospace,monospace;
}
.fit-buttons { display:flex; gap:5px; flex-wrap:wrap; }
.fit-buttons button { font-size:.72rem; padding:4px 7px; }
.crop-divider { height:1px; background:var(--line); margin:2px 0; }
.justify-between{ display: flex;justify-content: space-between;gap:8px;flex-wrap: nowrap;margin-bottom:8px; }
#applyCrop,#applyResize { background:var(--accent); color:#fff; border-color:var(--accent); }
#contributeBtn {
    width: 100%;
    background: var(--accent);
    text-align: center;
    font-weight: bold;
    padding: 12px;
    display: flex;
    gap: 8px;
    justify-content: center;
    align-items: center;
    flex-wrap: nowrap;
    margin: auto;
}
.interface-warning {
    position: fixed;
    top: 0;
    left: 0;
    display: none;
    width: 0;
    height: 0;
}
@media screen and (max-width: 479px) {

  html, body {
    overflow: hidden;
  }

  .interface-warning {
    position:fixed;
    top:0; left:0;
    width: 100vw;
    max-width: 100vw;
    height: 100vh;
    max-height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 0;
    margin: 0;
    background-color: #07070e;
    text-align: center;
    overflow: hidden;
    isolation: isolate;
    z-index: 9999;
  }

  .interface-warning div{
    width: 80%;
  }
}