.tour-list{flex-direction:column;gap:18px;display:flex}.tour-list__grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:18px;margin:0;padding:0;list-style:none;display:grid}.tour-list__item{display:flex;position:relative}.tour-card__download{width:var(--tap);height:var(--tap);color:var(--ink);border:1px solid var(--line);background:#ffffffeb;border-radius:10px;place-items:center;padding:0;font-size:18px;line-height:1;display:grid;position:absolute;top:8px;right:8px;box-shadow:0 1px 3px #1f29332e}.tour-card__download:active{background:var(--surface-2)}.tour-card__download:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.tour-card__download:disabled{cursor:default}.tour-card__spinner{border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;width:16px;height:16px;animation:.7s linear infinite tour-card-spin}@keyframes tour-card-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.tour-card__spinner{animation-duration:1.6s}}.tour-card{text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);width:100%;color:inherit;flex-direction:column;padding:0;display:flex;overflow:hidden}.tour-card:active{background:var(--surface-2)}.tour-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.tour-card__cover{aspect-ratio:4/3;background:var(--surface-2);width:100%;display:block}.tour-card__img{object-fit:cover;border-radius:0;width:100%;height:100%;max-height:none}.tour-card__cover-quote{background:#181818;place-items:center;width:100%;height:100%;display:grid}.tour-card__quote-mark{color:#c9b27a;font-family:Georgia,Times New Roman,serif;font-size:64px;line-height:.7}.tour-card__meta{flex-direction:column;gap:2px;padding:12px 14px;display:flex}.tour-card__title{font-size:17px;font-weight:700;line-height:1.2}.tour-card__count{color:var(--ink-faint);font-size:14px}.tour-list__untagged{color:var(--ink-faint);margin:0;font-size:13px}.tour-list__toolbar{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;gap:8px;padding:14px;display:flex}.tour-list__download-all{min-height:var(--tap);color:var(--accent-ink);background:var(--accent);border:1px solid var(--accent);border-radius:10px;justify-content:center;align-self:flex-start;align-items:center;gap:10px;padding:0 18px;font-size:16px;font-weight:700;display:inline-flex}.tour-list__download-all:active{filter:brightness(.94)}.tour-list__download-all:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.tour-list__download-all:disabled{cursor:default;opacity:.75}.tour-list__download-all .tour-card__spinner{border-color:#fff #ffffff80 #ffffff80}.tour-list__download-all-note{color:var(--ink-faint);margin:0;font-size:13px}.tour-list__download-all-note--error{color:var(--danger)}@media (min-width:560px){.tour-list__toolbar{flex-direction:row;justify-content:space-between;align-items:center}.tour-list__download-all-note{text-align:right;max-width:52ch}}.tour-detail-grid{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.tdg-row{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);align-items:center;gap:14px;padding:12px 14px;transition:box-shadow .12s,border-color .12s,opacity .12s;display:flex}.tdg-row--dragging{opacity:.4;background:var(--surface-2);border-style:dashed;border-color:var(--accent);box-shadow:none}.tdg-row--drop{border-color:var(--accent);box-shadow:inset 0 0 0 2px var(--accent)}.tdg-ghost{z-index:1000;background:var(--surface);border:2px solid var(--accent);border-radius:var(--radius);opacity:.85;pointer-events:none;align-items:center;gap:14px;padding:12px 14px;display:flex;position:fixed;box-shadow:0 12px 30px #1f293347}.tdg-ghost__cover{background:var(--surface-2);border-radius:10px;flex:none;width:96px;height:96px;overflow:hidden}.tdg-ghost__label{-webkit-line-clamp:2;-webkit-box-orient:vertical;flex:auto;min-width:0;font-size:17px;font-weight:700;line-height:1.25;display:-webkit-box;overflow:hidden}.tdg-row__handle{border:1px solid var(--line);background:var(--surface-2);min-width:40px;color:var(--ink-faint);cursor:grab;touch-action:none;border-radius:10px;flex:none;align-self:stretch;place-items:center;padding:0;font-size:24px;line-height:1;display:grid}.tdg-row__handle:active{cursor:grabbing;background:var(--surface);color:var(--ink-soft)}.tdg-row__handle:disabled{opacity:.5;cursor:default}.tdg-row__cover{background:var(--surface-2);border-radius:10px;flex:none;width:96px;height:96px;overflow:hidden}.tdg-row__img{object-fit:cover;border-radius:0;width:100%;height:100%;max-height:none}.tdg-row__cover--quote{background:#181818;border:1px solid #2c2c2c;place-items:center;display:grid}.tdg-row__quote-mark{color:#c9b27a;font-family:Georgia,Times New Roman,serif;font-size:54px;line-height:.7}.tdg-row__kind{color:var(--ink-soft);font-size:14px;font-style:italic}.tdg-row__meta{flex-direction:column;flex:auto;gap:2px;min-width:0;display:flex}.tdg-row__pos{color:var(--ink-faint);letter-spacing:.02em;font-size:12px;font-weight:700}.tdg-row__label{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:17px;font-weight:700;line-height:1.25;display:-webkit-box;overflow:hidden}.tdg-row__artist{color:var(--ink-soft);text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}.tdg-row__error{text-align:left;color:var(--danger);background:var(--error-bg);border:1px solid var(--error-line);border-radius:8px;align-self:flex-start;margin-top:4px;padding:6px 10px;font-size:13px}.tdg-row__actions{flex-direction:column;flex:none;align-items:stretch;gap:8px;display:flex}.tdg-row__move{gap:8px;display:flex}.tdg-row__btn{min-height:var(--tap);white-space:nowrap;flex:auto}.tdg-row__remove{min-height:var(--tap);white-space:nowrap}@media (max-width:560px){.tdg-row{flex-wrap:wrap}.tdg-row__actions{flex-flow:wrap;flex-basis:100%}.tdg-row__move{flex:auto}.tdg-row__remove{flex:100%}}.add-panel{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;gap:14px;padding:16px;display:flex}.add-panel__head{justify-content:space-between;align-items:center;gap:12px;display:flex}.add-panel__title{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:18px;font-weight:700;line-height:1.2;overflow:hidden}.add-panel__search{display:flex}.add-panel__search-input{width:100%;min-height:var(--tap);font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);appearance:none;border-radius:10px;padding:0 14px}.add-panel__search-input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.add-panel__empty{text-align:center;color:var(--ink-faint);margin:0;padding:24px 8px;font-size:16px}.add-panel__list{-webkit-overflow-scrolling:touch;flex-direction:column;gap:10px;max-height:60vh;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.add-panel__row{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);align-items:center;gap:14px;padding:10px;display:flex}.add-panel__thumb{background:var(--surface-2);border-radius:10px;flex:none;width:64px;height:64px;overflow:hidden}.add-panel__img{object-fit:cover;border-radius:0;width:100%;height:100%;max-height:none}.add-panel__info{flex-direction:column;flex:auto;gap:2px;min-width:0;display:flex}.add-panel__name{text-overflow:ellipsis;white-space:nowrap;font-size:16px;font-weight:700;line-height:1.25;overflow:hidden}.add-panel__artist{color:var(--ink-soft);text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}.add-panel__error{color:var(--danger);font-size:13px;line-height:1.3}.add-panel__add{flex:none}.tour-detail{flex-direction:column;gap:18px;display:flex}.tour-detail__header{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.tour-detail__heading{flex-direction:column;min-width:0;line-height:1.15;display:flex}.tour-detail__title{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:22px;font-weight:700;overflow:hidden}.tour-detail__count{color:var(--ink-faint);font-size:14px}.tour-detail__actions{flex-wrap:wrap;align-items:center;gap:10px;margin-left:auto;display:flex}.tour-detail__download-btn{align-items:center;gap:8px;display:inline-flex}.tour-detail__spinner{border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;width:15px;height:15px;animation:.7s linear infinite tour-detail-spin}@keyframes tour-detail-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.tour-detail__spinner{animation-duration:1.6s}}.tour-detail__export-note{color:var(--ink-faint);margin:-6px 0 0;font-size:13px}.tour-detail__export-note--error{color:var(--danger)}.tour-detail__hint{color:var(--ink-faint);margin:-6px 0 0;font-size:13px}.tour-detail__hint .tdg-grip{vertical-align:-1px;font-size:15px}.qsp-frame{justify-content:center;width:100%;display:flex}.qsp-scaled{flex:none;position:relative}.qsp-canvas{transform-origin:0 0;color:#fff;background:#000;border-radius:36px;width:1032px;height:1376px;font-family:Georgia,Times New Roman,serif;position:absolute;top:0;left:0;overflow:hidden;box-shadow:inset 0 0 0 2px #2b2b2b,0 18px 50px #00000059}.qsp-body{box-sizing:border-box;text-align:center;flex-direction:column;justify-content:center;align-items:center;font-size:24px;display:flex;position:absolute;inset:0;overflow:hidden}.qsp-content{width:100%;max-width:640px;margin:0 auto}.qsp-title{color:#f4f4f4;border-bottom:2px solid #c9b27a;margin:0 0 .9em;padding-bottom:.25em;font-size:1.5em;font-weight:600;line-height:1.2}.qsp-quote{margin:0 0 1.05em;padding:0}.qsp-quote:last-child{margin-bottom:0}.qsp-text{color:#f4f4f4;margin:0;font-size:1em;line-height:1.4}.qsp-attr{color:#b3b3b3;margin:.5em 0 0;font-size:.62em;font-style:italic;line-height:1.3}.qsp-placeholder{color:#888;text-align:center;font-size:.8em;font-style:italic}.qsb{padding:16px}.qsb__header{align-items:center;gap:16px;margin-bottom:16px;display:flex}.qsb__title{margin:0;font-size:22px;font-weight:800}.qsb__layout{grid-template-columns:1fr;align-items:start;gap:24px;display:grid}@media (min-width:880px){.qsb__layout{grid-template-columns:minmax(0,1fr) clamp(320px,38vw,460px)}}.qsb__editor{flex-direction:column;gap:16px;min-width:0;display:flex}.qsb__field{flex-direction:column;gap:6px;display:flex}.qsb__label{color:var(--ink-soft);font-size:14px;font-weight:700}.qsb__req{color:var(--danger);font-weight:700}.qsb__select,.qsb__input,.qsb__text,.qsb__attr,.qsb__pastebox{width:100%;min-height:var(--tap);font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px}.qsb__text,.qsb__pastebox{resize:vertical;line-height:1.35}.qsb__select:focus,.qsb__input:focus,.qsb__text:focus,.qsb__attr:focus,.qsb__pastebox:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}.qsb__quotes{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;gap:10px;padding:14px;display:flex}.qsb__empty{color:var(--ink-faint);margin:0;font-style:italic}.qsb__list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.qsb__row{align-items:stretch;gap:10px;display:flex}.qsb__rowfields{flex-direction:column;flex:auto;gap:6px;min-width:0;display:flex}.qsb__rowctl{flex-direction:column;flex:none;gap:6px;display:flex}.qsb__move{min-width:var(--tap);min-height:36px}.qsb__rowadd{display:flex}.qsb__hint{color:var(--ink-faint);margin:0;font-size:13px}.qsb__savebar{flex-wrap:wrap;align-items:center;gap:14px;padding-top:4px;display:flex}.qsb__submit{min-height:var(--tap);padding:0 20px;font-weight:700}.qsb__status{color:var(--ink-soft);font-size:14px}.qsb__status--error{color:var(--danger)}.qsb__preview{flex-direction:column;gap:8px;display:flex}@media (min-width:880px){.qsb__preview{position:sticky;top:12px}}.qsb__preview-label{color:var(--ink-faint);letter-spacing:.02em;margin:0;font-size:13px;font-weight:700}:root{--bg:#f4f5f7;--surface:#fff;--surface-2:#eef1f4;--ink:#1f2933;--ink-soft:#52606d;--ink-faint:#7b8794;--line:#d2d9e0;--accent:#2563eb;--accent-ink:#fff;--danger:#c0392b;--ok:#1f8a4c;--warn-bg:#fff4d6;--warn-line:#e0b840;--error-bg:#fdecea;--error-line:#e0a8a0;--radius:12px;--tap:44px;--maxw:1400px;font-synthesis:none;-webkit-text-size-adjust:100%}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:17px;line-height:1.4}button{font:inherit;cursor:pointer}code{background:var(--surface-2);border-radius:5px;padding:1px 5px;font-size:.9em}.app{flex-direction:column;height:100dvh;display:flex;overflow:hidden}.app__header{z-index:10;padding:10px max(16px, env(safe-area-inset-left)) 10px max(16px, env(safe-area-inset-right));padding-top:max(10px, env(safe-area-inset-top));background:var(--surface);border-bottom:1px solid var(--line);align-items:center;gap:16px;display:flex;position:sticky;top:0}.app__title{flex-direction:column;line-height:1.1;display:flex}.app__title-main{font-size:18px;font-weight:700}.app__title-sub{color:var(--ink-faint);font-size:12px}.app__refresh{min-width:var(--tap);min-height:var(--tap);margin-left:auto;font-size:20px}.app__main{width:100%;min-height:0;max-width:var(--maxw);padding:16px;padding-left:max(16px, env(safe-area-inset-left));padding-right:max(16px, env(safe-area-inset-right));padding-bottom:max(16px, env(safe-area-inset-bottom));flex:1;margin:0 auto;overflow-y:auto}.banner{border-bottom:1px solid #0000;margin:0;padding:10px 16px;font-size:15px}.banner--warn{background:var(--warn-bg);border-color:var(--warn-line)}.banner--error{background:var(--error-bg);border-color:var(--error-line)}.btn{min-height:var(--tap);border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:10px;padding:0 18px;font-weight:600}.btn:disabled{opacity:.5;cursor:default}.btn--primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn--danger{color:var(--danger);border-color:#e6b8b2}.btn--danger.btn--primary{background:var(--danger);border-color:var(--danger);color:#fff}.btn--ghost{background:0 0;border-color:#0000}.btn--large{min-height:52px;padding:0 26px;font-size:18px}.btn--block{width:100%;display:block}.btn--small{min-height:40px;padding:0 14px}.btn--tiny{border-radius:8px;min-height:36px;padding:0 12px;font-size:14px}.empty-state{text-align:center;color:var(--ink-faint);padding:48px 16px;font-size:17px}.empty-state p{margin:0 0 10px}.empty-state p:last-child{margin-bottom:0}.art-image{background:var(--surface-2);object-fit:contain;border-radius:10px;width:100%;max-height:320px;display:block}.art-image--empty{aspect-ratio:1;color:var(--ink-faint);place-items:center;font-size:14px;display:grid}.auth-screen{background:var(--bg);justify-content:center;align-items:center;min-height:100%;padding:24px;display:flex}.auth-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;gap:14px;width:100%;max-width:360px;padding:28px 24px;display:flex;box-shadow:0 6px 24px #1f293314}.auth-card--plain{text-align:center;color:var(--ink-soft);align-items:center}.auth-card__title{margin:0;font-size:22px}.auth-card__sub{color:var(--ink-soft);margin:0 0 6px;font-size:15px}.auth-field{color:var(--ink-soft);flex-direction:column;gap:6px;font-size:14px;display:flex}.auth-field input{min-height:var(--tap);color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:16px}.auth-field input:focus{outline:2px solid var(--accent);outline-offset:1px}.auth-error{background:var(--error-bg);border:1px solid var(--error-line);color:var(--danger);border-radius:10px;padding:10px 12px;font-size:14px}.auth-submit{min-height:var(--tap);background:var(--accent);color:var(--accent-ink);cursor:pointer;border:none;border-radius:10px;font-size:16px;font-weight:600}.auth-submit:disabled{opacity:.6;cursor:default}.auth-toggle{color:var(--accent);cursor:pointer;background:0 0;border:none;padding:4px;font-size:14px}.auth-bar{background:var(--surface-2);border-bottom:1px solid var(--line);color:var(--ink-soft);justify-content:flex-end;align-items:center;gap:12px;padding:6px 14px;font-size:13px;display:flex}.auth-bar__signout{border:1px solid var(--line);color:var(--ink);cursor:pointer;background:0 0;border-radius:8px;padding:4px 10px;font-size:13px}
