.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);border-radius:var(--radius-pill);border:1px solid var(--color-ink);font-size:var(--text-small);font-weight:var(--weight-bold);line-height:1;transition:opacity var(--transition-fast),background var(--transition-fast);white-space:nowrap}.btn:hover:not(:disabled){opacity:.8}.btn:disabled{opacity:.4;cursor:not-allowed}.btn--primary{background:var(--color-ink);color:var(--color-paper)}.btn--secondary{background:var(--color-paper);color:var(--color-ink)}.btn--ghost{background:transparent;border-color:transparent;color:var(--color-ink);padding:var(--space-2)}.btn--block{width:100%}.field{display:flex;flex-direction:column;gap:var(--space-2)}.field__label{font-size:var(--text-small);font-weight:var(--weight-bold)}.field__hint{font-size:var(--text-tiny);color:var(--color-muted)}.input{width:100%;padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-paper);color:var(--color-ink)}.input:focus{outline:none;border-color:var(--color-ink)}input[type=range]{width:100%;accent-color:var(--color-ink)}.auth{min-height:100%;display:flex;align-items:center;justify-content:center;padding:var(--space-6)}.auth__card{width:100%;max-width:380px;display:flex;flex-direction:column;gap:var(--space-6)}.auth__chrome{display:flex;align-items:center;justify-content:space-between}.auth__back{background:none;border:none;padding:0;font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-ink);cursor:pointer}.auth__close{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:var(--space-1);color:var(--color-muted);cursor:pointer}.auth__close:hover{color:var(--color-ink)}.auth__brand{font-size:var(--text-title);font-weight:var(--weight-black);letter-spacing:-.02em}.auth__tagline{color:var(--color-muted);font-size:var(--text-small);margin-top:var(--space-1)}.auth__form{display:flex;flex-direction:column;gap:var(--space-4)}.auth__row{display:flex;justify-content:space-between;align-items:center;font-size:var(--text-small)}.auth__link{background:none;border:none;padding:0;font-size:var(--text-small);text-decoration:underline;text-underline-offset:2px;color:var(--color-ink)}.auth__error{font-size:var(--text-small);color:var(--color-danger)}.auth__notice{font-size:var(--text-small);color:var(--color-success)}.auth__hint{font-size:var(--text-tiny);color:var(--color-muted)}.panel{border-bottom:1px solid var(--color-border)}.panel__title{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4) 0;font-weight:var(--weight-bold);font-size:var(--text-body);list-style:none;cursor:pointer;-webkit-user-select:none;user-select:none}.panel__title::-webkit-details-marker{display:none}.panel__indicator{position:relative;width:14px;height:14px}.panel__indicator:before,.panel__indicator:after{content:"";position:absolute;background:var(--color-ink)}.panel__indicator:before{top:6px;left:0;width:14px;height:2px}.panel__indicator:after{top:0;left:6px;width:2px;height:14px;transition:transform var(--transition-fast)}.panel[open] .panel__indicator:after{transform:scaleY(0)}.panel__body{display:flex;flex-direction:column;gap:var(--space-3);padding-bottom:var(--space-4)}.modal__overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--color-overlay);display:flex;align-items:center;justify-content:center;padding:var(--space-4);z-index:100}.modal__dialog{width:100%;max-width:420px;background:var(--color-paper);border-radius:var(--radius-md);box-shadow:var(--shadow-popover)}.modal__header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4);border-bottom:1px solid var(--color-border)}.modal__title{font-size:var(--text-heading);font-weight:var(--weight-bold)}.modal__close{background:none;border:none;font-size:24px;line-height:1;color:var(--color-ink)}.modal__body{padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-4)}.editable{display:flex;flex-direction:column;gap:var(--space-1)}.editable__row{display:flex;align-items:center;gap:var(--space-2)}.editable__value{flex:1;min-width:0;word-break:break-word}.editable__value--h2{font-size:var(--text-heading);font-weight:var(--weight-bold)}.editable__value--p{font-size:var(--text-body);color:var(--color-ink)}.editable__value--placeholder{color:var(--color-muted)}.editable__input{flex:1;min-width:0;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-paper);color:var(--color-ink);font-family:inherit}.editable__input:focus{outline:none;border-color:var(--color-ink)}.editable__input--h2{font-size:var(--text-heading);font-weight:var(--weight-bold)}.editable__input--p{font-size:var(--text-body)}.editable__btn{flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:none;border:none;border-radius:var(--radius-sm);color:var(--color-muted);cursor:pointer;transition:color var(--transition-fast),background var(--transition-fast),opacity var(--transition-fast)}.editable__row:not(:focus-within) .editable__btn--pencil{opacity:0}.editable__row:hover .editable__btn--pencil,.editable__btn--pencil:focus-visible{opacity:1}.editable__btn:hover{color:var(--color-ink);background:var(--color-panel)}.editable__limit{font-size:var(--text-tiny);color:var(--color-muted)}.editable__error{font-size:var(--text-tiny);font-weight:var(--weight-bold);color:var(--color-danger)}.color-modal{display:flex;flex-direction:column;gap:var(--space-4)}.color-modal .react-colorful{width:100%;height:180px}.color-modal__hex{display:flex;align-items:center;gap:var(--space-2);font-family:var(--font-mono);text-transform:uppercase;border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3)}.color-modal__hex span{color:var(--color-muted)}.color-modal__hex input{flex:1;min-width:0;border:none;outline:none;font:inherit;text-transform:uppercase;background:transparent}.color-modal__palette{display:flex;flex-direction:column;gap:var(--space-2)}.color-modal__label{font-size:var(--text-small);font-weight:var(--weight-bold)}.color-modal__swatches{display:flex;flex-wrap:wrap;gap:var(--space-2)}.color-modal__swatch{width:28px;height:28px;padding:0;border-radius:var(--radius-sm);border:1px solid var(--color-border);cursor:pointer}.color-modal__swatch--active{outline:2px solid var(--color-ink);outline-offset:1px}.color-section{display:flex;flex-direction:column;gap:var(--space-3)}.color-section__toolbar{display:flex;align-items:center;gap:var(--space-2);min-height:28px}.color-section__eyedropper{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-paper);color:var(--color-ink);cursor:pointer}.color-section__eyedropper--on{background:var(--color-ink);color:var(--color-paper);border-color:var(--color-ink)}.color-section__caption{font-size:var(--text-tiny);color:var(--color-muted)}.color-section__hint{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--text-tiny);color:var(--color-muted)}.color-section__hint-chip{width:14px;height:14px;border-radius:var(--radius-sm);border:1px solid var(--color-border)}.color-section__swatches{display:flex;flex-wrap:wrap;gap:var(--space-2)}.color-section__swatch{width:32px;height:32px;padding:0;border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer}.color-section__swatch--armed{outline:2px solid var(--color-ink);outline-offset:1px}.color-section__swatch--add{display:inline-flex;align-items:center;justify-content:center;background:transparent;border-style:dashed;color:var(--color-muted)}.color-section__swatch--add:hover{color:var(--color-ink);border-color:var(--color-muted)}.color-context-menu{position:fixed;z-index:200;min-width:130px;padding:var(--space-1);background:var(--color-paper);border:1px solid var(--color-border);border-radius:var(--radius-sm);box-shadow:var(--shadow-popover)}.color-context-menu__item{display:block;width:100%;padding:var(--space-2) var(--space-3);border:none;border-radius:var(--radius-sm);background:none;font:inherit;text-align:left;color:var(--color-danger);cursor:pointer}.color-context-menu__item:hover:not(:disabled){background:var(--color-panel)}.color-context-menu__item:disabled{color:var(--color-muted);cursor:default}.toolbar{display:flex;flex-direction:column;padding:0 var(--space-4)}.toolbar__header{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-4) 0}.toolbar__settings{display:flex;flex-direction:column;gap:var(--space-2);padding-bottom:var(--space-4);border-bottom:1px solid var(--color-border)}.toolbar__confirm-note{font-size:var(--text-small);color:var(--color-muted);margin-bottom:var(--space-4)}.toolbar__confirm-actions{display:flex;justify-content:flex-end;gap:var(--space-2)}.toolbar__save{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-4) 0}.toolbar__note{font-size:var(--text-tiny);color:var(--color-muted)}.toolbar__segment{display:flex;gap:var(--space-1)}.toolbar__status{font-size:var(--text-small);font-weight:var(--weight-bold)}.toolbar__error{font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-danger)}.grip{position:absolute;z-index:5}.grip__bubble{display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;color:var(--color-muted);background:var(--color-paper);border:1px solid var(--color-border);border-radius:var(--radius-pill);box-shadow:var(--shadow-menu);cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--transition-fast),color var(--transition-fast)}.grip:hover .grip__bubble,.grip--open .grip__bubble{opacity:1;pointer-events:auto}.grip__bubble:hover{color:var(--color-ink)}.grip__bubble--drag{cursor:grab;touch-action:none}.grip__bubble--drag:active{cursor:grabbing}.grip__menu{position:fixed;min-width:132px;padding:var(--space-1);background:var(--color-paper);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-popover);z-index:100}.grip__item{display:flex;align-items:center;gap:var(--space-2);width:100%;padding:var(--space-2) var(--space-3);font-size:var(--text-small);color:var(--color-ink);background:none;border:none;border-radius:var(--radius-sm);text-align:left;white-space:nowrap;cursor:pointer}.grip__item:hover:not(:disabled){background:var(--color-panel)}.grip__item:disabled{color:var(--color-muted);cursor:not-allowed}.grip__item--danger{color:var(--color-danger)}.grip__item-icon{display:flex;align-items:center;justify-content:center}.shaft{position:relative;min-width:0;overflow:hidden;background-color:transparent;background-image:linear-gradient(to right,var(--color-grid-inactive) 1px,transparent 1px),linear-gradient(to bottom,var(--color-grid-inactive) 1px,transparent 1px)}.shaft:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-top:1px solid var(--color-grid);border-bottom:1px solid var(--color-grid);pointer-events:none;z-index:4}.shaft__active{position:absolute;top:0;z-index:2;background-color:var(--color-paper);background-image:linear-gradient(to right,var(--color-grid) 1px,transparent 1px),linear-gradient(to bottom,var(--color-grid) 1px,transparent 1px)}.shaft-row{position:relative;display:flex;transition:background-color var(--transition-fast)}.shaft-row--highlight{background:var(--color-highlight)}.shaft-row--dragging{opacity:.4}.shaft-row--highlight .control-cell--on{background:var(--cell-on-highlight)}.shaft-grip{display:flex;align-items:center;justify-content:flex-start;width:30px}.shaft-reorder-grip{display:flex;align-items:center;justify-content:flex-end}.tieup-wrap{position:relative;justify-self:end;align-self:start}.tieup{position:relative;background-color:var(--color-paper);background-image:linear-gradient(to right,var(--color-grid) 1px,transparent 1px),linear-gradient(to bottom,var(--color-grid) 1px,transparent 1px)}.tieup:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border:1px solid var(--color-grid);pointer-events:none;z-index:4}.tieup-row{display:flex}.tieup .control-cell--on{background:var(--color-ink)}.treadle{position:relative;min-height:0;overflow:hidden;background-color:transparent;background-image:linear-gradient(to right,var(--color-grid-inactive) 1px,transparent 1px),linear-gradient(to bottom,var(--color-grid-inactive) 1px,transparent 1px)}.treadle:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-left:1px solid var(--color-grid);border-right:1px solid var(--color-grid);pointer-events:none;z-index:4}.treadle__active{position:absolute;left:0;display:flex;z-index:2;background-color:var(--color-paper);background-image:linear-gradient(to right,var(--color-grid) 1px,transparent 1px),linear-gradient(to bottom,var(--color-grid) 1px,transparent 1px)}.treadle-col{position:relative;display:flex;flex-direction:column;transition:background-color var(--transition-fast)}.treadle-col--highlight{background:var(--color-highlight)}.treadle-col--dragging{opacity:.4}.treadle-col--highlight .control-cell--on{background:var(--cell-on-highlight)}.treadle-grip{display:flex;align-items:flex-end;justify-content:center}.treadle-reorder-grip{display:flex;align-items:flex-start;justify-content:center}.drawdown{position:relative;overflow:hidden;min-width:0;min-height:0}.drawdown__plane{position:absolute;line-height:0}.drawdown__canvas{display:block;width:100%;height:100%;image-rendering:pixelated}.drawdown__overlay{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;image-rendering:pixelated}.color-strip{position:relative;min-width:0;min-height:0;overflow:hidden}.color-strip__track{position:absolute;display:flex;z-index:2;background:transparent}.color-strip__track--h{top:0;flex-direction:row}.color-strip__track--v{left:0;flex-direction:column}.color-strip__cell{flex:none;margin:0;padding:1px;border:none;cursor:pointer;background-clip:content-box}.color-strip__cell:disabled{cursor:default;opacity:.5}.control-cell{position:relative;flex:none;margin:0;padding:0;border:none;background:transparent;cursor:pointer;transition:background-color var(--transition-fast),opacity var(--transition-fast);--cell-on-highlight: linear-gradient(var(--color-highlight), var(--color-highlight)), linear-gradient(var(--color-highlight), var(--color-highlight)), var(--color-ink)}.control-cell--on{background:var(--color-ink)}.control-cell:hover,.control-cell--linked{background:var(--color-highlight)}.control-cell--on:hover,.control-cell--on.control-cell--linked{background:var(--cell-on-highlight)}.control-cell--preview{background:var(--color-highlight)}.control-cell--on.control-cell--preview{background:var(--cell-on-highlight)}.control-cell--preview-erase{box-shadow:inset 0 0 0 2px var(--color-highlight-strong);opacity:.4}.control-cell--dim{pointer-events:none}.control-cell--dim:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--color-scrim);z-index:5}.control-cell--selected{box-shadow:inset 0 0 0 2px var(--color-highlight-strong);z-index:6}.control-divider{position:absolute;background:var(--color-active-edge);z-index:3;touch-action:none}.control-divider:before{content:"";position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px}.control-divider--v{top:0;bottom:0;width:2px;cursor:col-resize}.control-divider--h{left:0;right:0;height:2px;cursor:row-resize}.control-divider--start{left:-1px}.control-divider--end{right:-1px}.control-divider--top{top:-1px}.control-divider--bottom{bottom:-1px}.control-drop{position:absolute;background:var(--color-highlight-strong);z-index:6;pointer-events:none}.control-drop--h{height:2px;transform:translateY(-1px)}.control-drop--v{width:2px;transform:translate(-1px)}.control-ghost{position:absolute;z-index:3;background:var(--color-highlight);box-shadow:inset 0 0 0 1px var(--color-highlight-strong);pointer-events:none}.weave-workspace{position:relative;flex:1;min-width:0;min-height:0;--canvas-tools-h: 40px;display:grid;grid-template-columns:1fr calc(var(--treadles) * var(--ctrl-cell)) calc(var(--ctrl-half) * 3);grid-template-rows:calc(var(--ctrl-half) * 3) calc(var(--shafts) * var(--ctrl-cell)) 1fr;overflow:hidden}.weave-workspace>.warp-color{grid-area:1 / 1}.weave-workspace>.shaft{grid-area:2 / 1}.weave-workspace>.tieup-wrap{grid-area:2 / 2}.weave-workspace>.drawdown{grid-area:3 / 1}.weave-workspace>.treadle{grid-area:3 / 2}.weave-workspace>.weft-color{grid-area:3 / 3}.weave-workspace--eyedrop .shaft,.weave-workspace--eyedrop .tieup-wrap,.weave-workspace--eyedrop .treadle{pointer-events:none}.weave-workspace--pannable .drawdown{cursor:grab}.weave-workspace--panning,.weave-workspace--panning *{cursor:grabbing!important}.weave-workspace__measure{position:absolute;z-index:6;padding:0 var(--space-1);border-radius:var(--radius-sm);font-size:var(--text-tiny);color:var(--color-muted);background:var(--color-panel);white-space:nowrap;pointer-events:none}.weave-workspace__measure--width{left:var(--space-2)}.weave-workspace__measure--length{bottom:calc(var(--space-4) + var(--canvas-tools-h) + var(--space-2))}.weave-workspace__measure--disabled{opacity:.45}.inspect-scrim{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;background:var(--color-scrim)}.weave-workspace--inspect .shaft__active,.weave-workspace--inspect .treadle__active,.weave-workspace--inspect .tieup,.weave-workspace--inspect .drawdown__plane{z-index:5}.inspect-menu{position:fixed;z-index:30;min-width:120px;padding:var(--space-1);background:var(--color-paper);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-popover)}.inspect-menu__item{display:block;width:100%;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);text-align:left;font-size:var(--text-small);font-weight:var(--weight-medium);color:var(--color-ink);background:transparent;cursor:pointer}.inspect-menu__item:hover{background:var(--color-panel)}.canvas-tools{position:absolute;left:var(--space-4);right:calc(var(--treadles) * var(--ctrl-cell) + var(--ctrl-half) * 3 + var(--space-4));bottom:var(--space-4);min-height:var(--canvas-tools-h);z-index:6;display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);pointer-events:none}.canvas-tools>*{pointer-events:auto}.canvas-tools .btn:hover:not(:disabled){background:var(--color-ink);color:var(--color-paper);opacity:1}.canvas-tools .btn--end{gap:var(--space-1);border-color:transparent}.display-mode{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-paper);box-shadow:var(--shadow-popover)}.display-mode__option{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-muted);font-size:var(--text-small);font-weight:var(--weight-medium);line-height:1;cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.display-mode__option:hover:not(.display-mode__option--active){color:var(--color-ink)}.display-mode__option--active{background:var(--color-ink);color:var(--color-paper)}.flip-toggle{display:inline-flex;align-items:center;gap:var(--space-2);padding:0;border:none;background:transparent;color:var(--color-ink)}.flip-toggle__label{font-size:var(--text-small);font-weight:var(--weight-bold);line-height:1;opacity:.4;transition:opacity var(--transition-fast)}.flip-toggle:not(.is-back) .flip-toggle__label:first-of-type,.flip-toggle.is-back .flip-toggle__label:last-of-type{opacity:1}.flip-toggle__track{position:relative;width:32px;height:16px;border-radius:var(--radius-pill);background:var(--color-ink)}.flip-toggle__thumb{position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--color-paper);transition:transform var(--transition-fast)}.flip-toggle.is-back .flip-toggle__thumb{transform:translate(16px)}.control-panel{flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.app-header{height:var(--topbar-height);flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 var(--space-4);border-bottom:1px solid var(--color-border)}.app-header__left,.app-header__right{display:flex;align-items:center;gap:var(--space-3)}.app-header__brand{font-size:var(--text-heading);font-weight:var(--weight-black);letter-spacing:-.01em;text-decoration:none}.app-header__nav{display:flex;align-items:center;gap:var(--space-3);margin-left:var(--space-3)}.app-header__link{font-size:var(--text-small);font-weight:var(--weight-bold);text-decoration:none;color:var(--color-muted);padding-bottom:2px;border-bottom:2px solid transparent}.app-header__link--active{color:var(--color-ink);border-bottom-color:var(--color-ink)}.app-header__account{position:relative;display:flex;align-items:center}.app-header__account-trigger{display:flex;align-items:center;padding:0;background:none;border:none;border-radius:var(--radius-pill);cursor:pointer}.app-header__avatar{width:32px;height:32px;border-radius:var(--radius-pill);border:1px solid var(--color-border);background:var(--color-panel);object-fit:cover}.app-header__menu{position:absolute;top:calc(100% + var(--space-2));right:0;min-width:160px;padding:var(--space-1);background:var(--color-paper);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-popover);z-index:100}.app-header__menu-item{display:block;width:100%;padding:var(--space-2) var(--space-3);font-size:var(--text-small);color:var(--color-ink);background:none;border:none;border-radius:var(--radius-sm);text-align:left;white-space:nowrap;cursor:pointer}.app-header__menu-item:hover{background:var(--color-panel)}.app-header__menu-item--danger{color:var(--color-danger)}.studio{display:flex;flex-direction:column;height:100%}.studio__toggle{background:none;border:none;font-size:var(--text-heading);line-height:1}.studio__body{flex:1;display:flex;min-height:0}.studio__body--eyedrop *{cursor:inherit!important}.studio__body--eyedrop button.color-section__eyedropper{cursor:pointer!important}.studio__sidebar{width:var(--sidebar-width);flex-shrink:0;border-right:1px solid var(--color-border);background:var(--color-paper);overflow-y:auto;padding:var(--space-4) 0;transition:margin-left var(--transition-fast)}.studio__sidebar--collapsed{margin-left:calc(-1 * var(--sidebar-width))}.studio__sidebar--disabled{opacity:.45;pointer-events:none}.studio__workspace{flex:1;min-width:0;min-height:0;overflow:hidden;display:flex;background:var(--color-panel)}@media (max-width: 720px){.studio__sidebar{position:absolute;top:var(--topbar-height);bottom:0;left:0;z-index:30;box-shadow:var(--shadow-popover)}}.gallery{display:flex;flex-direction:column;min-height:100%}.gallery__main{flex:1;padding:var(--space-6);max-width:1100px;width:100%;margin:0 auto}.gallery__bar{display:flex;gap:var(--space-3);align-items:center;margin-bottom:var(--space-6);flex-wrap:wrap}.gallery__search{flex:1;min-width:220px}.gallery__controls{display:flex;gap:var(--space-2);align-items:center}.gallery__sort{position:relative;display:flex;align-items:center}.gallery__sort-trigger{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-paper);color:var(--color-ink);cursor:pointer}.gallery__sort-trigger:disabled{opacity:.5;cursor:not-allowed}.gallery__sort-menu{position:absolute;top:calc(100% + var(--space-2));left:0;min-width:160px;padding:var(--space-1);background:var(--color-paper);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-popover);z-index:100}.gallery__sort-menu-item{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);width:100%;padding:var(--space-2) var(--space-3);font-size:var(--text-small);color:var(--color-ink);background:none;border:none;border-radius:var(--radius-sm);text-align:left;white-space:nowrap;cursor:pointer}.gallery__sort-menu-item:hover{background:var(--color-panel)}.gallery__sort-check{flex-shrink:0;color:var(--color-ink)}.gallery__fav-filter{padding:var(--space-3) var(--space-4);border:1px solid var(--color-ink);border-radius:var(--radius-pill);background:var(--color-paper);color:var(--color-ink);font-size:var(--text-small);font-weight:var(--weight-bold);white-space:nowrap;transition:background var(--transition-fast),color var(--transition-fast)}.gallery__fav-filter--on{background:var(--color-ink);color:var(--color-paper)}.gallery__view-toggle{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-paper);box-shadow:var(--shadow-popover)}.gallery__view-toggle-option{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-2);border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-muted);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.gallery__view-toggle-option:hover:not(.gallery__view-toggle-option--active){color:var(--color-ink)}.gallery__view-toggle-option--active{background:var(--color-ink);color:var(--color-paper)}.gallery__note{color:var(--color-muted);font-size:var(--text-small)}.gallery__note--error{color:var(--color-danger)}.gallery__field-error{font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-danger)}.gallery__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--space-6)}.gallery__grid--list{grid-template-columns:1fr;gap:var(--space-3)}.gallery-card{position:relative;display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-3);margin:calc(-1 * var(--space-3));border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.gallery-card:hover,.gallery-card:focus-visible{background:var(--color-panel);box-shadow:var(--shadow-popover);transform:translateY(-2px);outline:none}.gallery-card--list{flex-direction:row;align-items:center}.gallery-card--list .gallery-card__thumb{width:64px;flex-shrink:0}.gallery-card--list .gallery-card__meta{flex:1;min-width:0}.gallery-card__thumb{display:block;width:100%;aspect-ratio:1 / 1;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-canvas);overflow:hidden}.gallery-card__thumb img{width:100%;height:100%;object-fit:contain;image-rendering:pixelated;background:var(--color-paper)}.gallery-card__thumb-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--color-muted);font-size:var(--text-small)}.gallery-card__new-body{display:flex;align-items:center;justify-content:center;gap:var(--space-2);width:100%;aspect-ratio:1 / 1;border:1px dashed var(--color-highlight-strong);border-radius:var(--radius-md)}.gallery-card--list .gallery-card__new-body{aspect-ratio:auto;min-height:64px;padding:0 var(--space-3);justify-content:flex-start}.gallery-card__new-icon{font-size:28px;line-height:1;color:var(--color-highlight-strong)}.gallery-card__new-label{font-size:var(--text-body);font-weight:var(--weight-bold);color:var(--color-highlight-strong)}.gallery-card__star{flex-shrink:0;border:none;background:none;padding:0;color:var(--color-ink);font-size:20px;line-height:1;transition:color var(--transition-fast),transform var(--transition-fast)}.gallery-card__star:hover:not(:disabled){transform:scale(1.1)}.gallery-card__star:disabled{cursor:default;opacity:.7}.gallery-card__star--on{color:var(--color-favorite)}.gallery-card__meta{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-2)}.gallery-card__meta-text{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}.gallery-card__name{font-size:var(--text-body);font-weight:var(--weight-bold)}.gallery-card__desc{font-size:var(--text-small);color:var(--color-ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.gallery-card__date{font-size:var(--text-tiny);color:var(--color-muted)}.gallery__menu{position:fixed;z-index:200;background:var(--color-paper);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-popover);padding:var(--space-1);display:flex;flex-direction:column}.gallery__menu-item{text-align:left;background:none;border:none;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-size:var(--text-small);color:var(--color-ink)}.gallery__menu-item:hover{background:var(--color-panel)}.gallery__menu-item--danger{color:var(--color-danger)}.gallery__confirm-actions{display:flex;justify-content:flex-end;gap:var(--space-2)}.gallery__overlay{position:fixed;inset:var(--topbar-height) 0 0 0;z-index:50;display:flex;align-items:center;justify-content:center;padding:var(--space-6);background:var(--color-overlay-light);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.gallery__overlay-card{text-align:center;max-width:360px;display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-8);background:var(--color-paper);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-popover)}.gallery__overlay-title{font-size:var(--text-heading);font-weight:var(--weight-bold)}.gallery__overlay-text{font-size:var(--text-small);color:var(--color-muted)}.gallery__overlay-actions{display:flex;gap:var(--space-2);justify-content:center}.account{display:flex;flex-direction:column;height:100%}.account__body{flex:1;min-height:0;overflow-y:auto;background:var(--color-panel);padding:var(--space-8) var(--space-4)}.account__container{width:100%;max-width:560px;margin:0 auto;display:flex;flex-direction:column;gap:var(--space-6)}.account__title{font-size:var(--text-title);font-weight:var(--weight-black);letter-spacing:-.02em}.account__email{color:var(--color-muted);font-size:var(--text-small);margin-top:calc(-1 * var(--space-4))}.account__section{background:var(--color-paper);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-6);display:flex;flex-direction:column;gap:var(--space-4)}.account__section--danger{border-color:var(--color-danger)}.account__section-title{font-size:var(--text-heading);font-weight:var(--weight-bold)}.account__form{display:flex;flex-direction:column;gap:var(--space-4)}.account__actions,.account__confirm-actions{display:flex;justify-content:flex-end;gap:var(--space-3)}.account__hint{font-size:var(--text-tiny);color:var(--color-muted)}.account__username-row{display:flex;align-items:center;gap:var(--space-2)}.account__username-value{flex:1;min-width:0;padding:var(--space-2) var(--space-3);font-size:var(--text-body);color:var(--color-ink);word-break:break-word}.account__edit-btn{flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:none;border:none;border-radius:var(--radius-sm);color:var(--color-muted);cursor:pointer;transition:color var(--transition-fast),background var(--transition-fast)}.account__edit-btn:hover{color:var(--color-ink);background:var(--color-panel)}.account__error{font-size:var(--text-small);color:var(--color-danger)}.account__notice{font-size:var(--text-small);color:var(--color-success)}.account__avatar-row{display:flex;align-items:center;gap:var(--space-4)}.account__avatar{width:64px;height:64px;border-radius:var(--radius-pill);border:1px solid var(--color-border);background:var(--color-panel);object-fit:cover;flex-shrink:0}.account__avatar-controls,.account__avatar-options{display:flex;flex-wrap:wrap;gap:var(--space-3)}.account__avatar-option{padding:0;border:2px solid transparent;border-radius:var(--radius-pill);background:var(--color-panel);cursor:pointer;line-height:0}.account__avatar-option img{width:48px;height:48px;border-radius:var(--radius-pill);display:block}.account__avatar-option--selected{border-color:var(--color-ink)}.account__danger-btn{color:var(--color-danger);border-color:var(--color-danger)}.not-found{min-height:60vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3)}.not-found__title{font-size:var(--text-heading);font-weight:700}.not-found__link{font-size:var(--text-small);color:var(--color-muted)}.error-fallback{min-height:60vh;display:flex;align-items:center;justify-content:center;padding:var(--space-8)}.error-fallback__card{max-width:420px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:var(--space-4)}.error-fallback__title{font-size:var(--text-heading);font-weight:700}.error-fallback__body{font-size:var(--text-small);color:var(--color-muted)}:root{--color-ink: #000;--color-paper: #fff;--color-panel: #eaeaea;--color-canvas: #ddd;--color-canvas-alt: #d9d9d9;--color-border: #ccc;--color-muted: #999;--color-overlay: rgba(0, 0, 0, .35);--color-danger: rgb(240, 72, 66);--color-success: #1e7e46;--color-favorite: #f5b301;--color-overlay-light: rgba(255, 255, 255, .75);--color-grid: #cccccc;--color-grid-inactive: #dcdcdc;--color-active-edge: #555555;--color-highlight: rgba(120, 170, 255, .35);--color-highlight-strong: #78aaff;--color-scrim: rgba(20, 20, 22, .62);--font-sans: "DM Sans", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;--font-mono: "DM Mono", ui-monospace, "SF Mono", "Menlo", monospace;--text-title: 42px;--text-heading: 20px;--text-body: 16px;--text-small: 14px;--text-tiny: 12px;--weight-regular: 400;--weight-medium: 500;--weight-bold: 700;--weight-black: 800;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-6: 24px;--space-8: 32px;--space-12: 48px;--radius-sm: 6px;--radius-md: 8px;--radius-pill: 999px;--sidebar-width: 320px;--topbar-height: 56px;--weave-cell: 18px;--shadow-popover: 0 8px 24px rgba(0, 0, 0, .18);--shadow-menu: 0 1px 3px rgba(0, 0, 0, .14);--transition-fast: .12s ease}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:var(--font-sans);font-size:var(--text-body);color:var(--color-ink);background:var(--color-paper);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:inherit;text-decoration:underline;text-underline-offset:2px}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:var(--text-body)}h1,h2,h3{line-height:1.1}.mono{font-family:var(--font-mono)}.route-loading{min-height:60vh;display:flex;align-items:center;justify-content:center;color:var(--color-muted);font-size:var(--text-small)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
