/* Shared editorial controls for the four Swiss pages. Loaded after swiss.css. */
.swiss { --ui-radius:7px; --ui-line:#c9ccd3; --ui-shadow:0 8px 24px #10111412; --ui-focus:0 0 0 3px #123dff24; }
.swiss :is(button,input,textarea,select,summary,[role="button"]) { -webkit-tap-highlight-color:transparent; }
.swiss :is(button,[role="button"],summary) { touch-action:manipulation; }
.swiss :is(button,input,textarea,select,summary,[role="button"]):focus-visible { outline:2px solid var(--swiss-blue)!important; outline-offset:3px; box-shadow:var(--ui-focus); }
.swiss :is(button,input,textarea,select):disabled { opacity:.54; cursor:not-allowed!important; box-shadow:none!important; transform:none!important; }
.swiss [aria-busy="true"] { cursor:progress; }
.swiss :is(input:not([type=checkbox]):not([type=radio]):not([type=file]),textarea,select) { border-color:var(--ui-line); border-radius:var(--ui-radius)!important; min-height:44px; }
.swiss :is(input,textarea,select)[aria-invalid="true"] { border-color:#b63b32!important; box-shadow:0 0 0 3px #b63b321c!important; }
.swiss :is(#gallery-upload-status,#image-upload-status,#prompt-library-status,#login-status)[role="status"]:not(:empty) { display:block; padding:11px 13px; border:1px solid var(--ui-line); border-left:3px solid var(--swiss-blue); border-radius:var(--ui-radius); background:#f4f6ff; color:var(--swiss-ink)!important; font-size:13px; }
.swiss :is(#gallery-upload-status,#image-upload-status,#prompt-library-status,#login-status)[role="status"].error { border-color:#e2b5b0; border-left-color:#b63b32; background:#fff3f1; color:#8c2923!important; }
.swiss :is(#gallery-upload-status,#image-upload-status,#prompt-library-status,#image-to-image-status,#login-status,[data-detail-status]).text-error:not(:empty) { border-color:#e2b5b0; border-left-color:#b63b32; background:#fff3f1; color:#8c2923!important; }
.swiss :is(#image-to-image-status,[data-detail-status]):not(:empty) { display:block; padding:11px 13px; border:1px solid var(--ui-line); border-left:3px solid var(--swiss-blue); border-radius:var(--ui-radius); background:#f4f6ff; font-size:13px; }

/* Primary and secondary actions share one quiet depth, never a hard offset shadow. */
.swiss :is(.swiss-button,#gallery-upload-submit,#gallery-load-more,#image-to-image-submit,#save-current-prompt,.editor-button,.modal-button.primary,#edit-save,.swiss-login-panel form button,#password-modal button.bg-primary,#crud-modal button.bg-primary,#projects-grid button.bg-primary) { border:1px solid var(--swiss-blue)!important; border-radius:var(--ui-radius)!important; background:var(--swiss-blue)!important; color:#fff!important; box-shadow:0 3px 10px #123dff26!important; font-weight:700; transition:background-color .18s ease,border-color .18s ease,box-shadow .18s ease,transform .18s ease!important; }
.swiss :is(.swiss-button,#gallery-upload-submit,#gallery-load-more,#image-to-image-submit,#save-current-prompt,.editor-button,.modal-button.primary,#edit-save,.swiss-login-panel form button,#password-modal button.bg-primary,#crud-modal button.bg-primary,#projects-grid button.bg-primary):not(:disabled):hover { background:#092fcf!important; border-color:#092fcf!important; box-shadow:0 6px 16px #123dff32!important; transform:translateY(-2px)!important; }
.swiss :is(.swiss-button,#gallery-upload-submit,#gallery-load-more,#image-to-image-submit,#save-current-prompt,.editor-button,.modal-button.primary,#edit-save,.swiss-login-panel form button,#password-modal button.bg-primary,#crud-modal button.bg-primary,#projects-grid button.bg-primary):not(:disabled):active { box-shadow:0 2px 5px #123dff25!important; transform:translateY(0)!important; }
.swiss :is(.swiss-quiet-button,.swiss-nav-tools button,.swiss-menu,#refresh-prompt-library,.modal-button:not(.primary),#edit-cancel,.add-button,.small-edit-button:not(.delete),#password-modal button:not(.bg-primary),#crud-modal button:not(.bg-primary),.swiss-detail-top button,#gallery-upload-preview-remove) { border:1px solid var(--ui-line)!important; border-radius:var(--ui-radius)!important; background:#fff!important; color:var(--swiss-ink)!important; box-shadow:none!important; }
.swiss :is(.swiss-quiet-button,.swiss-nav-tools button,.swiss-menu,#refresh-prompt-library,.modal-button:not(.primary),#edit-cancel,.add-button,.small-edit-button:not(.delete),#password-modal button:not(.bg-primary),#crud-modal button:not(.bg-primary),.swiss-detail-top button,#gallery-upload-preview-remove):not(:disabled):hover { border-color:var(--swiss-blue)!important; background:var(--swiss-wash)!important; color:var(--swiss-blue)!important; transform:translateY(-1px); }
.swiss :is(.swiss-quiet-button,.swiss-nav-tools button,.swiss-menu,#refresh-prompt-library,.modal-button:not(.primary),#edit-cancel,.add-button,.small-edit-button:not(.delete),#password-modal button:not(.bg-primary),#crud-modal button:not(.bg-primary),.swiss-detail-top button,#gallery-upload-preview-remove):active { transform:translateY(0); }
.swiss :is(.small-edit-button.delete,#projects-grid button.bg-error,[data-delete]) { border:1px solid #d9a9a6!important; border-radius:var(--ui-radius)!important; background:#fff6f5!important; color:#9d312b!important; box-shadow:none!important; }
.swiss :is(.small-edit-button.delete,#projects-grid button.bg-error,[data-delete]):hover { background:#fee8e5!important; border-color:#b63b32!important; }
.swiss .add-button { border-style:dashed!important; }
.swiss :is(.editor-button,.modal-button,.small-edit-button,.add-button,#gallery-upload-submit,#image-to-image-submit,#save-current-prompt,#refresh-prompt-library,#gallery-load-more,#password-modal button,#crud-modal button,#projects-grid button) { min-height:38px; padding-inline:14px; }

/* Selectors, chips, cards and upload affordances. */
.swiss .swiss-gallery-tabs { position:relative; }
.swiss .swiss-gallery-tabs button { position:relative; border-radius:var(--ui-radius) var(--ui-radius) 0 0; transition:background-color .18s ease,color .18s ease; }
.swiss .swiss-gallery-tabs.has-indicator button[aria-selected=true] { border-bottom-color:transparent; }
.swiss .swiss-tab-indicator { position:absolute; left:0; bottom:-1px; width:calc(100% / 3); height:3px; background:var(--swiss-blue); box-shadow:0 -2px 10px #123dff36; pointer-events:none; z-index:2; will-change:transform; }
.swiss .swiss-workspace-stage { position:relative; display:grid; grid-template-columns:minmax(0,1fr); align-items:start; }
.swiss .swiss-stage-sweep { position:absolute; top:0; left:0; right:0; height:2px; background:linear-gradient(90deg,transparent 0%,var(--swiss-blue) 42%,#6382ff 58%,transparent 100%); pointer-events:none; z-index:5; visibility:hidden; opacity:0; will-change:transform,opacity; }
.swiss .swiss-workspace-stage > [role="tabpanel"] { grid-area:1/1; min-width:0; transform-origin:center top; }
.swiss :is(#gallery-upload-panel,#image-to-image-entry) { margin-top:22px!important; padding:clamp(22px,3vw,38px)!important; border:1px solid var(--swiss-line)!important; border-radius:12px; background:#fff; box-shadow:0 10px 35px #1011140c; }
.swiss .swiss-gallery-tabs button[aria-selected=true] { background:#f0f3ff; }
.swiss :is(.swiss-filters button,.swiss-tag-options button) { border-radius:var(--ui-radius); min-height:38px; transition:background-color .18s ease,border-color .18s ease,color .18s ease,transform .18s ease; }
.swiss :is(.swiss-filters button,.swiss-tag-options button):not(:disabled):hover { transform:translateY(-1px); }
.swiss :is(.swiss-filters button,.swiss-tag-options button):active { transform:translateY(0); }
.swiss .swiss-art-tags > span,.swiss #projects-grid .rounded-full { border-radius:5px; }
.swiss .swiss-art-image { border:1px solid #e0e2e7; border-radius:var(--ui-radius); }
.swiss .swiss-art:hover .swiss-art-image { border-color:#b5c0ff; box-shadow:var(--ui-shadow); }
.swiss .swiss-art-meta { transition:border-color .18s ease; }
.swiss .swiss-art:hover .swiss-art-meta { border-color:var(--swiss-blue); }
.swiss #projects-grid > div > .h-64 { overflow:hidden; border-radius:var(--ui-radius); }
.swiss #projects-grid > div:hover { border-top-color:var(--swiss-blue)!important; }
.swiss .image-upload-dropzone { border:1px dashed #9fa9bd; border-radius:var(--ui-radius)!important; background:#f6f7fb; transition:background-color .18s ease,border-color .18s ease,box-shadow .18s ease; }
.swiss .image-upload-dropzone:is(:hover,:focus-visible,:focus-within) { border-color:var(--swiss-blue); background:#eef1ff; box-shadow:inset 0 0 0 1px #123dff33; }
.swiss :is(.gallery-generation-toggle,#image-to-image-form fieldset[aria-label="生成模式"] label,.prompt-library-panel,.generation-task-card,.reference-preview-card,.gallery-upload-preview) { border-radius:var(--ui-radius)!important; }
.swiss .gallery-generation-toggle:focus-within,.swiss #image-to-image-form fieldset[aria-label="生成模式"] label:focus-within { outline:2px solid var(--swiss-blue); outline-offset:2px; }
.swiss :is(.generation-task-card,.reference-preview-card,.gallery-upload-preview) { box-shadow:0 2px 10px #1011140a; }
.swiss .generation-task-card.is-running { border-color:#9bafff; background:#f8f9ff; }
.swiss .generation-task-card.is-success { border-color:#a6cbb7; }
.swiss .generation-task-card.is-error { border-color:#e2b5b0; background:#fff7f6; }
.swiss .generation-task-status { border-radius:4px; font-weight:700; }
.swiss .delete-saved-prompt { border:1px solid #d9a9a6!important; border-radius:var(--ui-radius)!important; background:#fff6f5; color:#9d312b!important; }
.swiss .delete-saved-prompt:hover { background:#fee8e5; border-color:#b63b32!important; }
.swiss .prompt-library-summary { cursor:pointer; }
.swiss .prompt-library-summary .prompt-library-chevron { transition:transform .2s ease; }
.swiss .prompt-library-panel[open] .prompt-library-chevron { transform:rotate(180deg); }
.swiss #image-to-image-result { border-radius:var(--ui-radius); }

/* Dialogs retain their existing layout and behavior while gaining a coherent surface. */
.swiss :is(#password-modal-content,#crud-modal-content,.edit-panel,.swiss-detail) { border:1px solid var(--ui-line)!important; border-radius:10px!important; background:var(--swiss-paper)!important; box-shadow:0 22px 64px #10111430!important; }
.swiss :is(#password-modal-content,#crud-modal-content,.edit-panel) { padding:clamp(20px,3vw,32px); }
.swiss .swiss-detail { overflow:hidden auto; }
.swiss .swiss-detail-top { border-radius:10px 10px 0 0; }
.swiss .swiss-detail-media > img,.swiss .swiss-source-images img { border-radius:5px; }
.swiss .edit-panel label { color:var(--swiss-ink); }

/* Shared, persistent page shell and reversible detail drawers. */
html:has(body.swiss) { scroll-behavior:auto!important; }
.swiss [data-aos] { opacity:1!important; transform:none!important; visibility:visible!important; }
.swiss-app-view { min-height:calc(100dvh - 150px); }
.swiss-route-mask { position:fixed; inset:0; z-index:900; pointer-events:none; visibility:hidden; display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); overflow:hidden; }
.swiss-route-col { position:relative; background:linear-gradient(180deg,#f2f0e8 0%,#ebe8df 56%,#e3e0d6 100%); border-right:1px solid #d3cfc4; border-top:2px solid var(--swiss-blue); border-bottom:1px solid #d3cfc4; transform:scaleY(0); will-change:transform; }
.swiss-route-col:last-of-type { border-right:0; }
.swiss-route-col::before { content:'GRID // ' attr(data-col); position:absolute; top:24px; left:22px; font-size:9px; font-weight:700; letter-spacing:.2em; color:#10111442; }
.swiss-route-col::after { content:''; position:absolute; inset:0; background:linear-gradient(180deg,transparent calc(50% - .5px),#10111412 calc(50% - .5px),#10111412 calc(50% + .5px),transparent calc(50% + .5px)),linear-gradient(90deg,#123dff05 0%,transparent 36%); pointer-events:none; }
.swiss-route-cross { position:absolute; top:calc(50% - 6px); right:-6px; width:11px; height:11px; z-index:3; pointer-events:none; }
.swiss-route-cross::before,.swiss-route-cross::after { content:''; position:absolute; background:var(--swiss-blue); opacity:.55; }
.swiss-route-cross::before { top:5px; left:0; width:11px; height:1px; }
.swiss-route-cross::after { left:5px; top:0; width:1px; height:11px; }
.swiss-route-col:last-of-type .swiss-route-cross { display:none; }
.swiss-route-badge { position:absolute; inset:0; z-index:4; display:flex; align-items:center; justify-content:center; padding:24px; visibility:hidden; opacity:0; will-change:transform,opacity; }
.swiss-route-card { display:flex; flex-direction:column; align-items:center; gap:12px; min-width:min(380px,86vw); padding:26px 40px 24px; background:#f7f5efeb; border:1px solid #cbc6b9; border-top:2px solid var(--swiss-blue); box-shadow:0 24px 60px #1011141a,inset 0 0 0 4px #f1efe7; backdrop-filter:blur(8px); }
.swiss-route-meta { display:inline-flex; align-items:center; gap:10px; font-size:11px; font-weight:700; letter-spacing:.18em; color:var(--swiss-muted); }
.swiss-route-num { color:var(--swiss-blue); font-weight:900; font-size:12px; letter-spacing:.08em; padding:2px 8px; border:1px solid #123dff36; border-radius:3px; background:#edf0ff; }
.swiss-route-rule { width:108px; height:1px; background:linear-gradient(90deg,transparent,var(--swiss-blue),transparent); transform-origin:center; }
.swiss-route-title { font-size:clamp(28px,3.4vw,42px); font-weight:900; letter-spacing:-.045em; line-height:1.15; color:var(--swiss-ink); }
.swiss-route-progress { display:flex; align-items:center; gap:8px; margin-top:4px; padding-top:10px; border-top:1px solid #dfdcd2; width:100%; justify-content:center; }
.swiss-route-step { display:inline-flex; align-items:center; gap:5px; font-size:10px; font-weight:700; letter-spacing:.1em; color:#8b8e94; transition:color .2s ease; }
.swiss-route-step::before { content:''; width:5px; height:5px; border-radius:50%; background:#c8c5ba; transition:background-color .2s ease,transform .2s ease; }
.swiss-route-step.is-active { color:var(--swiss-blue); }
.swiss-route-step.is-active::before { background:var(--swiss-blue); transform:scale(1.35); box-shadow:0 0 0 3px #123dff21; }
.swiss-route-step-line { width:18px; height:1px; background:#d5d2c8; }

/* Gallery access locks, homepage 03 strip captions & shared curation drawer. */
.swiss-tab-lock { display:inline-flex; align-items:center; justify-content:center; margin-left:8px; font-size:15px!important; vertical-align:middle; color:var(--swiss-muted); opacity:.8; }
.swiss-photo-strip a { position:relative; display:block; border:1px solid var(--swiss-line); background:#eeefef; }
.swiss-strip-caption { position:absolute; inset:auto 0 0 0; display:flex; align-items:center; justify-content:space-between; gap:6px; padding:6px 10px; background:linear-gradient(180deg,transparent 0%,#101114b8 100%); color:#fff; font-size:11px; font-weight:600; pointer-events:none; }
.swiss-strip-caption small { color:#cbd3ff; font-size:10px; font-weight:700; letter-spacing:.08em; }
.swiss-curate-trigger { margin-top:8px; padding:6px 10px!important; min-height:34px!important; font-size:11px!important; display:inline-flex; align-items:center; gap:4px; width:fit-content; white-space:nowrap; }
.swiss-curate-trigger .material-symbols-outlined { font-size:14px!important; }
.swiss-archive-actions { display:flex; flex-wrap:wrap; align-items:center; gap:10px; }
.swiss-curation-drawer { width:min(680px,100vw); }
.swiss-curation-drawer .swiss-drawer-panel { padding:clamp(24px,3.5vw,40px); gap:14px; }
.swiss-curation-drawer .swiss-drawer-panel h2 { font-size:clamp(26px,3vw,36px); margin:2px 0; }
.swiss-curation-list { width:100%; display:grid; gap:8px; max-height:46vh; overflow-y:auto; padding-right:4px; }
.swiss-curation-item { display:grid; grid-template-columns:32px 60px minmax(0,1fr) auto auto; align-items:center; gap:12px; padding:10px 12px; background:#fff; border:1px solid var(--swiss-line); border-radius:6px; }
.swiss-curation-item.is-featured { border-color:#9bafff; background:#f8f9ff; }
.swiss-curation-rank { font-size:12px; font-weight:800; color:var(--swiss-blue); text-align:center; }
.swiss-curation-thumb { width:60px; height:44px; object-fit:cover; border-radius:4px; background:#eeefef; border:1px solid #e2e4e9; }
.swiss-curation-info { min-width:0; }
.swiss-curation-info strong { display:block; font-size:14px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.swiss-curation-info small { display:block; font-size:11px; color:var(--swiss-muted); }
.swiss-curation-home { display:inline-flex!important; align-items:center; gap:6px; width:auto!important; padding:6px 10px; border:1px solid var(--swiss-line); border-radius:5px; background:#fff; font-size:12px!important; font-weight:600; cursor:pointer; user-select:none; }
.swiss-curation-home input { width:15px!important; height:15px!important; margin:0; padding:0!important; min-height:0!important; }
.swiss-curation-controls { display:inline-flex; align-items:center; gap:5px; }
.swiss-curation-controls button { min-height:32px!important; padding:4px 9px!important; font-size:12px!important; }
.swiss-curation-footer { position:sticky; bottom:0; width:100%; display:flex; align-items:center; justify-content:space-between; gap:12px; padding-top:12px; background:var(--swiss-paper); border-top:1px solid var(--swiss-line); z-index:2; }
.swiss-detail-locked { display:flex; align-items:center; gap:12px; padding:12px 14px; border:1px dashed var(--swiss-line); border-radius:6px; background:#f6f7fb; color:var(--swiss-muted); font-size:13px; }
.swiss-route-status { position:fixed; z-index:920; right:24px; bottom:24px; max-width:min(400px,calc(100vw - 32px)); display:flex; align-items:center; gap:12px; padding:14px 16px; color:var(--swiss-ink); background:#fff; border:1px solid var(--swiss-line); box-shadow:0 14px 40px #10111425; border-radius:8px; font-size:13px; }
.swiss-route-status[hidden] { display:none; }
.swiss-route-status button { border:1px solid var(--swiss-line); background:var(--swiss-wash); border-radius:5px; padding:7px 10px; white-space:nowrap; }
.swiss-app-drawer { position:fixed; inset:0 0 0 auto; margin:0 0 0 auto; padding:0; height:100dvh; max-height:100dvh; width:min(620px,100vw); max-width:100vw; border:0; background:var(--swiss-paper); color:var(--swiss-ink); box-shadow:-24px 0 60px #10111433; }
.swiss-app-drawer::backdrop { background:#10111499; }
.swiss-drawer-panel { position:relative; min-height:100%; padding:clamp(28px,5vw,58px); display:flex; flex-direction:column; align-items:flex-start; gap:20px; overflow:auto; }
.swiss-drawer-panel h2 { font-size:clamp(35px,4vw,54px); line-height:1.1; margin:8px 0; }
.swiss-drawer-panel p:not(.eyebrow) { line-height:1.8; color:var(--swiss-muted); white-space:pre-wrap; }
.swiss-drawer-panel img { width:100%; max-height:45vh; object-fit:contain; background:#ecedf1; border-radius:5px; }
.swiss-drawer-close { align-self:flex-end; width:42px; height:42px; border:1px solid var(--swiss-line); border-radius:5px; background:#fff; font-size:24px; line-height:1; }
.swiss-drawer-close:hover { color:var(--swiss-blue); border-color:var(--swiss-blue); }
.swiss-drawer-panel label { width:100%; display:grid; gap:8px; font-size:13px; font-weight:700; }
.swiss-drawer-panel input { width:100%; padding:14px; border:1px solid var(--swiss-line); border-radius:5px; background:#fff; }
.swiss-drawer-message { min-height:1.5em; }
.swiss-drawer-tags { display:flex; flex-wrap:wrap; gap:8px; }
.swiss-drawer-tags span { border:1px solid var(--swiss-line); padding:6px 10px; border-radius:4px; color:var(--swiss-blue); font-size:12px; }
.swiss-app-drawer :focus-visible { outline:2px solid var(--swiss-blue); outline-offset:3px; }
.swiss #projects-grid [data-project-id]:focus-visible { outline:2px solid var(--swiss-blue); outline-offset:4px; }
.swiss .avatar-fallback:not([hidden]) { display:grid; place-items:center; width:96px; height:96px; margin-bottom:20px; background:var(--swiss-blue); color:#fff; font-size:36px; font-weight:800; border-radius:50%; }
.swiss:has(#crud-modal:not(.pointer-events-none)) .swiss-nav,.swiss:has(#resume-edit-modal.open) .swiss-nav { z-index:150; }
.swiss #projects-grid [data-project-id] { cursor:pointer; }
.swiss #password-modal.pointer-events-none,.swiss #crud-modal.pointer-events-none { display:none!important; }
.swiss #password-modal:not(.pointer-events-none),.swiss #crud-modal:not(.pointer-events-none) { position:fixed; inset:0; z-index:110; display:flex; align-items:center; justify-content:center; }
.swiss-detail-flying { position:fixed; z-index:10; pointer-events:none; object-fit:contain; border-radius:5px; box-shadow:0 14px 40px #10111444; }

@media (max-width:700px) {
 .swiss :is(button,[role="button"]) { min-height:42px; }
 .swiss .swiss-gallery-tabs button { min-height:60px; }
 .swiss :is(#password-modal-content,#crud-modal-content,.edit-panel) { max-height:calc(100dvh - 32px); }
 .swiss .swiss-detail { max-height:96dvh; width:calc(100vw - 16px); }
 .swiss-route-mask { grid-template-columns:repeat(2,minmax(0,1fr)); }
 .swiss-route-col:nth-child(n+3) { display:none; }
 .swiss-route-col:nth-child(2) { border-right:0; }
 .swiss-route-col:nth-child(2) .swiss-route-cross { display:none; }
 .swiss-route-card { padding:18px 24px 20px; min-width:min(280px,86vw); }
 .swiss-curation-item { grid-template-columns:28px 50px minmax(0,1fr); gap:8px; }
 .swiss-curation-home,.swiss-curation-controls { grid-column:2/-1; justify-self:start; }
}
@media (prefers-reduced-motion:reduce) {
 .swiss *, .swiss *::before, .swiss *::after { scroll-behavior:auto!important; animation-duration:.01ms!important; transition-duration:.01ms!important; }
 .swiss :is(button,[role="button"]):hover { transform:none!important; }
}
