/* Hallmark · genre: modern-minimal · macrostructure: app workbench · design-system: design.md · designed-as-app
 * pre-emit critique: P5 H5 E4 S5 R5 V5 · contrast: pass (40–41) · nav: N3 · footer: none
 * slop: pass (42–45) · honest: pass (46) · chrome: pass (47) · tokens: pass (48)
 * responsive: pass (49) · icons: pass (30) · mobile: static pass (34, 49–57)
 */

/* Hallmark · genre: modern-minimal · designed-as-app · tone: calm Apple-like utility
 * pre-emit critique: P5 H5 E4 S5 R5 V5
 */

:root {
  --font-display: -apple-system, BlinkMacSystemFont, "Hiragino Sans", "Yu Gothic UI", sans-serif;
  --font-body: -apple-system, BlinkMacSystemFont, "Hiragino Sans", "Yu Gothic UI", sans-serif;
  --color-page: oklch(96.8% 0.008 250);
  --color-page-deep: oklch(93.5% 0.012 250);
  --color-surface: oklch(99.8% 0.002 250);
  --color-surface-frosted: oklch(99.8% 0.002 250 / 0.88);
  --color-ink: oklch(22% 0.022 255);
  --color-body: oklch(38% 0.022 255);
  --color-muted: oklch(53% 0.025 255);
  --color-disabled: oklch(75% 0.012 255);
  --color-rule: oklch(88% 0.012 250);
  --color-rule-strong: oklch(78% 0.017 250);
  --color-accent: oklch(55% 0.205 255);
  --color-accent-hover: oklch(50% 0.205 255);
  --color-accent-soft: oklch(93% 0.038 255);
  --color-accent-ink: oklch(99% 0.002 250);
  --color-planned: oklch(47% 0.125 153);
  --color-planned-soft: oklch(95% 0.032 153);
  --color-costco: oklch(42% 0.13 258);
  --color-costco-soft: oklch(96% 0.012 258);
  --color-danger: oklch(52% 0.22 27);
  --color-danger-soft: oklch(95% 0.032 27);
  --color-viewer: oklch(15% 0.014 255);
  --color-viewer-raised: oklch(23% 0.018 255);
  --color-viewer-rule: oklch(34% 0.019 255);
  --color-viewer-ink: oklch(97% 0.006 250);
  --color-shadow: oklch(22% 0.025 255 / 0.10);
  --color-shadow-deep: oklch(18% 0.025 255 / 0.18);
  --color-overlay: oklch(15% 0.014 255 / 0.48);
  --space-3xs: 0.25rem;
  --space-2xs: 0.5rem;
  --space-xs: 0.75rem;
  --space-sm: 1rem;
  --space-md: 1.5rem;
  --space-lg: 2rem;
  --space-xl: 3rem;
  --text-xs: 0.75rem;
  --text-sm: 0.875rem;
  --text-base: 1rem;
  --text-md: 1.125rem;
  --text-lg: 1.375rem;
  --radius-xs: 0.5rem;
  --radius-sm: 0.75rem;
  --radius-md: 1rem;
  --radius-lg: 1.5rem;
  --radius-pill: 999px;
  --rule-thin: 1px;
  --shadow-card: 0 1px 2px var(--color-shadow), 0 8px 24px var(--color-shadow);
  --shadow-float: 0 16px 44px var(--color-shadow-deep);
  --dur-micro: 120ms;
  --dur-short: 220ms;
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
}

*, ::before, ::after {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}

::backdrop {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}

/* ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
 */

/*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/

*,
::before,
::after {
  box-sizing: border-box;
  /* 1 */
  border-width: 0;
  /* 2 */
  border-style: solid;
  /* 2 */
  border-color: #e5e7eb;
  /* 2 */
}

::before,
::after {
  --tw-content: '';
}

/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
7. Disable tap highlights on iOS
*/

html,
:host {
  line-height: 1.5;
  /* 1 */
  -webkit-text-size-adjust: 100%;
  /* 2 */
  -moz-tab-size: 4;
  /* 3 */
  -o-tab-size: 4;
     tab-size: 4;
  /* 3 */
  font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  /* 4 */
  font-feature-settings: normal;
  /* 5 */
  font-variation-settings: normal;
  /* 6 */
  -webkit-tap-highlight-color: transparent;
  /* 7 */
}

/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/

body {
  margin: 0;
  /* 1 */
  line-height: inherit;
  /* 2 */
}

/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/

hr {
  height: 0;
  /* 1 */
  color: inherit;
  /* 2 */
  border-top-width: 1px;
  /* 3 */
}

/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/

abbr:where([title]) {
  -webkit-text-decoration: underline dotted;
          text-decoration: underline dotted;
}

/*
Remove the default font size and weight for headings.
*/

h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: inherit;
  font-weight: inherit;
}

/*
Reset links to optimize for opt-in styling instead of opt-out.
*/

a {
  color: inherit;
  text-decoration: inherit;
}

/*
Add the correct font weight in Edge and Safari.
*/

b,
strong {
  font-weight: bolder;
}

/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/

code,
kbd,
samp,
pre {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  /* 1 */
  font-feature-settings: normal;
  /* 2 */
  font-variation-settings: normal;
  /* 3 */
  font-size: 1em;
  /* 4 */
}

/*
Add the correct font size in all browsers.
*/

small {
  font-size: 80%;
}

/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/

table {
  text-indent: 0;
  /* 1 */
  border-color: inherit;
  /* 2 */
  border-collapse: collapse;
  /* 3 */
}

/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/

button,
input,
optgroup,
select,
textarea {
  font-family: inherit;
  /* 1 */
  font-feature-settings: inherit;
  /* 1 */
  font-variation-settings: inherit;
  /* 1 */
  font-size: 100%;
  /* 1 */
  font-weight: inherit;
  /* 1 */
  line-height: inherit;
  /* 1 */
  letter-spacing: inherit;
  /* 1 */
  color: inherit;
  /* 1 */
  margin: 0;
  /* 2 */
  padding: 0;
  /* 3 */
}

/*
Remove the inheritance of text transform in Edge and Firefox.
*/

button,
select {
  text-transform: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/

button,
input:where([type='button']),
input:where([type='reset']),
input:where([type='submit']) {
  -webkit-appearance: button;
  /* 1 */
  background-color: transparent;
  /* 2 */
  background-image: none;
  /* 2 */
}

/*
Use the modern Firefox focus style for all focusable elements.
*/

:-moz-focusring {
  outline: auto;
}

/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/

:-moz-ui-invalid {
  box-shadow: none;
}

/*
Add the correct vertical alignment in Chrome and Firefox.
*/

progress {
  vertical-align: baseline;
}

/*
Correct the cursor style of increment and decrement buttons in Safari.
*/

::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto;
}

/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/

[type='search'] {
  -webkit-appearance: textfield;
  /* 1 */
  outline-offset: -2px;
  /* 2 */
}

/*
Remove the inner padding in Chrome and Safari on macOS.
*/

::-webkit-search-decoration {
  -webkit-appearance: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/

::-webkit-file-upload-button {
  -webkit-appearance: button;
  /* 1 */
  font: inherit;
  /* 2 */
}

/*
Add the correct display in Chrome and Safari.
*/

summary {
  display: list-item;
}

/*
Removes the default spacing and border for appropriate elements.
*/

blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
  margin: 0;
}

fieldset {
  margin: 0;
  padding: 0;
}

legend {
  padding: 0;
}

ol,
ul,
menu {
  list-style: none;
  margin: 0;
  padding: 0;
}

/*
Reset default styling for dialogs.
*/

dialog {
  padding: 0;
}

/*
Prevent resizing textareas horizontally by default.
*/

textarea {
  resize: vertical;
}

/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/

input::-moz-placeholder, textarea::-moz-placeholder {
  opacity: 1;
  /* 1 */
  color: #9ca3af;
  /* 2 */
}

input::placeholder,
textarea::placeholder {
  opacity: 1;
  /* 1 */
  color: #9ca3af;
  /* 2 */
}

/*
Set the default cursor for buttons.
*/

button,
[role="button"] {
  cursor: pointer;
}

/*
Make sure disabled buttons don't get the pointer cursor.
*/

:disabled {
  cursor: default;
}

/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
   This can trigger a poorly considered lint error in some tools but is included by design.
*/

img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
  display: block;
  /* 1 */
  vertical-align: middle;
  /* 2 */
}

/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/

img,
video {
  max-width: 100%;
  height: auto;
}

/* Make elements with the HTML hidden attribute stay hidden by default */

[hidden]:where(:not([hidden="until-found"])) {
  display: none;
}

.\!container {
  width: 100% !important;
}

.container {
  width: 100%;
}

@media (min-width: 640px) {
  .\!container {
    max-width: 640px !important;
  }

  .container {
    max-width: 640px;
  }
}

@media (min-width: 768px) {
  .\!container {
    max-width: 768px !important;
  }

  .container {
    max-width: 768px;
  }
}

@media (min-width: 1024px) {
  .\!container {
    max-width: 1024px !important;
  }

  .container {
    max-width: 1024px;
  }
}

@media (min-width: 1280px) {
  .\!container {
    max-width: 1280px !important;
  }

  .container {
    max-width: 1280px;
  }
}

@media (min-width: 1536px) {
  .\!container {
    max-width: 1536px !important;
  }

  .container {
    max-width: 1536px;
  }
}

/* --- Base and Theme Tokens --- */

:root {
  --font-family: var(--font-body);
  --c-bg: var(--color-page);
  --c-surface: var(--color-surface);
  --c-text: var(--color-ink);
  --c-text-muted: var(--color-muted);
  --c-text-disabled: var(--color-disabled);
  --c-primary: var(--color-accent);
  --c-tag: var(--color-surface);
  --c-primary-text: var(--color-accent-ink);
  --c-accent: var(--color-planned);
  --c-accent-text: var(--color-accent-ink);
  --c-danger: var(--color-danger);
  --c-border: var(--color-rule);
  --c-viewer-bg: var(--color-viewer);
  --c-viewer-surface: var(--color-viewer-raised);
  --c-viewer-border: var(--color-viewer-rule);
  --c-viewer-text: var(--color-viewer-ink);
  --c-swipe-blue: var(--color-accent-soft);
  --c-swipe-green: var(--color-planned-soft);
  --c-swipe-orange: var(--color-costco-soft);
  --shadow: var(--shadow-card);
  --shadow-strong: var(--shadow-float);
  --size-fab: 56px;
  --radius-card: var(--radius-md);
  --radius-control: var(--radius-sm);
  --radius-pill: 999px;
  --control-height: 48px;
}

.hidden {
  display: none !important;
}

/* --- Base Layout --- */

html, body {
  touch-action: manipulation;
}

html {
  box-sizing: border-box;
}

*, *:before, *:after {
  box-sizing: inherit;
}

body {
  font-family: var(--font-family);
  margin: 0px;
  background-color: var(--c-bg);
  color: var(--c-text);
  -webkit-tap-highlight-color: transparent;
  padding-top: 50px;
}

/* --- Shared Controls --- */

.tab-link,
.search-clear-btn,
.btn-item-add,
.search-toggle-btn,
.btn-action,
.btn-delete-text,
.btn-cancel,
.btn-submit,
.btn-danger,
.btn-submit-full,
.settings-button-logout,
.btn-delete-tag,
.tag-drag-handle,
.filter-tag-btn,
.tag-suggestion-item,
.item-card-image,
.image-preview-container,
.tag-selected-list .tag,
.tag-list-item {
  cursor: pointer;
}

.tab-link,
.search-clear-btn,
.btn-item-add,
.search-toggle-btn,
.btn-action,
.btn-delete-text,
.btn-cancel,
.btn-submit,
.btn-danger,
.btn-submit-full,
.settings-button-logout {
  border-width: 0px;
}

.btn-delete-text,
.btn-cancel,
.btn-submit,
.btn-danger,
.btn-submit-full,
.settings-button-logout {
  display: inline-flex;
  min-height: 2.75rem;
  align-items: center;
  justify-content: center;
  padding: 0.75rem;
  font-size: 0.875rem;
  line-height: 1.25rem;
  font-weight: 600;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  border-radius: var(--radius-control);
}

.btn-action,
.btn-item-add,
.search-toggle-btn,
.tag-drag-handle,
.back-button {
  display: flex;
  align-items: center;
  justify-content: center;
}

.form-input,
.search-input {
  border-width: 1px;
  font-size: 1rem;
  line-height: 1.5rem;
  border-color: var(--c-border);
  color: var(--c-text);
}

/* --- App Tabs --- */

.tabs {
  position: fixed;
  top: 0px;
  display: flex;
  width: 100%;
  height: 50px;
  background-color: var(--c-bg);
  z-index: 1001;
}

.tab-link {
  flex: 1 1 0%;
  background-color: transparent;
  text-align: center;
  font-size: 1rem;
  line-height: 1.5rem;
  font-weight: 500;
  padding: 12px 10px;
  color: var(--c-text);
  border-bottom: solid;
  border-left: solid;
  border-right: solid;
  border-color: var(--c-text-disabled);
  border-width: 0.5px;
}

.tab-icon,
.search-toggle-btn::before,
.icon-chevron-left,
.icon-chevron-right,
.icon-chevron-up,
.icon-chevron-down,
.btn-settings-icon::before,
.btn-add-icon::before {
  display: inline-block;
  background-color: currentColor;
  mask-position: center;
  mask-repeat: no-repeat;
  mask-size: contain;
  -webkit-mask-position: center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: contain;
}

.tab-icon {
  width: 18px;
  height: 18px;
  margin-right: 4px;
  vertical-align: -3px;
}

.tab-icon-list {
  mask-image: url('/static/icons/list.svg');
  -webkit-mask-image: url('/static/icons/list.svg');
}

.tab-icon-cart {
  mask-image: url('/static/icons/cart.svg');
  -webkit-mask-image: url('/static/icons/cart.svg');
}

.tab-link.active {
  color: var(--c-primary-text);
  background-color: var(--c-primary);
}

.tab-link[data-tab="byCostco"] span {
  display: inline-block;
  vertical-align: middle;
  padding-left: 37px;
  background-image: url('/static/icons/costco.svg');
  background-repeat: no-repeat;
  background-size: 36px 36px;
  background-position: left center;
}

.search-bar {
  position: sticky;
  align-items: center;
  gap: 0.5rem;
  padding-left: 1rem;
  padding-right: 1rem;
  display: none;
  top: 50px;
  z-index: 1000;
  padding-top: 10px;
  padding-bottom: 10px;
  background-color: var(--c-bg);
}

.search-bar.is-open {
  display: flex;
}

.search-input {
  height: 2.5rem;
  min-width: 0px;
  flex: 1 1 0%;
  border-radius: 0.375rem;
  background-color: var(--c-surface);
  padding: 0 40px 0 12px;
}

.search-input:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  border-color: var(--c-primary);
}

.search-input::-webkit-search-cancel-button,
.search-input::-webkit-search-decoration {
  -webkit-appearance: none;
  appearance: none;
}

.search-clear-btn {
  position: absolute;
  height: 2rem;
  width: 2rem;
  border-radius: 9999px;
  right: 20px;
  background-color: var(--c-text-muted);
  mask-image: url('/static/icons/close.svg');
  mask-position: center;
  mask-repeat: no-repeat;
  mask-size: 20px 20px;
  -webkit-mask-image: url('/static/icons/close.svg');
  -webkit-mask-position: center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 20px 20px;
}

.search-clear-btn[hidden] {
  display: none;
}

/* カード表示領域 */

.main-container {
  margin-left: auto;
  margin-right: auto;
  max-width: 800px;
  padding-left: 1rem;
  padding-right: 1rem;
  padding-bottom: 50px;
  padding-top: 0.5rem;
}

/* --- List Controls --- */

.item-list {
  margin-bottom: 0.75rem;
  margin-top: 0px;
  display: flex;
  list-style-type: none;
  flex-direction: column;
  gap: 0.75rem;
  padding: 0px;
  min-height: 38px;
}

.item-card {
  position: relative;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
  overflow: hidden;
  border-width: 1px;
  background-color: var(--c-surface);
  transition-property: box-shadow;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  border-radius: var(--radius-card);
  box-shadow: var(--shadow);
  border-color: var(--c-border);
  transition-property: transform, box-shadow;
  transition-duration: 0.2s;
  transition-timing-function: ease-out;
}

.index-label {
  margin-left: 0.75rem;
  margin-right: 0.75rem;
  margin-top: 0px;
  margin-bottom: 0px;
  color: var(--c-text-muted);
  scroll-margin-top: 110px;
}

.page-view.search-open .index-label {
  scroll-margin-top: 160px;
}

.swiping-active {
  transform: scale(0.98);
  box-shadow: var(--shadow-strong);
}

.item-card-content {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  padding: 1rem;
  background-color: var(--c-surface);
}

.item-card-image {
  margin-right: 1rem;
  height: 75px;
  width: 75px;
  flex-shrink: 0;
  border-radius: 0.25rem;
  border: 0;
  padding: 0;
  background-size: cover;
  background-position: center;
  background-color: var(--c-bg);
}

/* --- Full-screen Photo Viewer --- */

body.photo-viewer-open {
  overflow: hidden;
  overscroll-behavior: none;
}

.photo-viewer {
  pointer-events: none;
  visibility: hidden;
  position: fixed;
  inset: 0px;
  display: flex;
  flex-direction: column;
  opacity: 0;
  z-index: 3000;
  background-color: var(--c-viewer-bg);
  color: var(--c-viewer-text);
  transition: opacity 0.22s cubic-bezier(0.16, 1, 0.3, 1), visibility 0s linear 0.22s;
}

.photo-viewer.show {
  pointer-events: auto;
  visibility: visible;
  opacity: 1;
}

.swipe-action.photo-viewer.show {
  opacity: 1;
}

.photo-viewer.show {
  transition: opacity 0.22s cubic-bezier(0.16, 1, 0.3, 1);
}

.photo-viewer-header {
  display: flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  border-bottom-width: 1px;
  padding-left: 1rem;
  padding-right: 1rem;
  padding-bottom: 0.75rem;
  min-height: calc(56px + env(safe-area-inset-top));
  padding-top: max(12px, env(safe-area-inset-top));
  border-color: var(--c-viewer-border);
  background-color: var(--c-viewer-bg);
}

.photo-viewer-title {
  margin: 0px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-align: center;
  font-size: 1rem;
  line-height: 1.5rem;
  font-weight: 600;
  color: var(--c-viewer-text);
}

.photo-viewer-close {
  display: flex;
  min-height: 3.5rem;
  width: 100%;
  max-width: 28rem;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  white-space: nowrap;
  border-radius: 0.5rem;
  border-width: 1px;
  padding-left: 1rem;
  padding-right: 1rem;
  font-weight: 700;
  border-color: var(--c-viewer-border);
  background-color: var(--c-viewer-bg);
  color: var(--c-viewer-text);
  font-size: var(--text-md);
}

.photo-viewer-close-icon {
  display: block;
  height: 1.25rem;
  width: 1.25rem;
  flex-shrink: 0;
  background-color: currentColor;
  mask-image: url('/static/icons/close.svg');
  mask-position: center;
  mask-repeat: no-repeat;
  mask-size: contain;
  -webkit-mask-image: url('/static/icons/close.svg');
  -webkit-mask-position: center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: contain;
}

.photo-viewer-close:active,
.photo-viewer-edit:active {
  transform: scale(0.98);
}

@media (hover: hover) and (pointer: fine) {
  .photo-viewer-close:hover {
    background-color: var(--c-viewer-border);
  }

  .photo-viewer-edit:hover {
    border-color: var(--color-accent-hover);
    background-color: var(--color-accent-hover);
  }
}

.photo-viewer-close:disabled,
.photo-viewer-edit:disabled {
  cursor: not-allowed;
  opacity: 0.55;
}

.photo-viewer-close:focus-visible,
.photo-viewer-edit:focus-visible {
  outline: 3px solid var(--c-primary);
  outline-offset: 2px;
}

.photo-viewer-stage {
  position: relative;
  display: flex;
  min-height: 0px;
  flex: 1 1 0%;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  touch-action: none;
  -moz-user-select: none;
       user-select: none;
  -webkit-user-select: none;
}

.photo-viewer-image {
  display: block;
  max-width: calc(100% - 32px);
  max-height: calc(100% - 32px);
  -o-object-fit: contain;
     object-fit: contain;
  transform-origin: center;
  transition: none;
  -webkit-user-drag: none;
}

.photo-viewer-image.is-zoomed {
  cursor: grab;
}

.photo-viewer-image.is-gesturing {
  cursor: grabbing;
  will-change: transform;
}

.photo-viewer-image.is-animating {
  transition: transform 0.22s cubic-bezier(0.16, 1, 0.3, 1);
}

.photo-viewer-hint {
  position: absolute;
  left: 50%;
  top: 0.75rem;
  margin: 0px;
  --tw-translate-x: -50%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  white-space: nowrap;
  border-radius: 0.375rem;
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
  font-size: 0.75rem;
  line-height: 1rem;
  background-color: var(--c-viewer-surface);
  color: var(--c-viewer-text);
}

.photo-viewer-hint[hidden] {
  display: none;
}

.photo-viewer-footer {
  display: flex;
  flex-shrink: 0;
  flex-direction: column;
  align-items: center;
  gap: 0.5rem;
  border-top-width: 1px;
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.75rem;
  padding-bottom: max(12px, env(safe-area-inset-bottom));
  border-color: var(--c-viewer-border);
  background-color: var(--c-viewer-bg);
}

.photo-viewer-edit {
  display: flex;
  min-height: 3.5rem;
  width: 100%;
  max-width: 28rem;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  white-space: nowrap;
  border-radius: 0.5rem;
  border-width: 1px;
  padding-left: 1rem;
  padding-right: 1rem;
  font-weight: 700;
  border-color: var(--c-viewer-border);
  background-color: var(--c-primary);
  color: var(--c-primary-text);
  font-size: var(--text-md);
}

.photo-viewer-edit-icon {
  display: block;
  height: 1.25rem;
  width: 1.25rem;
  background-color: currentColor;
  mask-image: url('/static/icons/edit.svg');
  mask-position: center;
  mask-repeat: no-repeat;
  mask-size: contain;
  -webkit-mask-image: url('/static/icons/edit.svg');
  -webkit-mask-position: center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: contain;
}

@media (prefers-reduced-motion: reduce) {
  .photo-viewer,
    .photo-viewer-image.is-animating {
    transition-duration: 0.15s;
  }
}

.item-card-details {
  min-width: 0px;
  flex-grow: 1;
}

/* --- Item Card Tags --- */

.item-card-tags,
.tag-suggestions {
  display: flex;
  flex-wrap: wrap;
}

.item-card-tags {
  margin-bottom: 0.5rem;
  gap: 6px;
}

.tag {
  display: inline-flex;
  height: 1.5rem;
  align-items: center;
  border-radius: 9999px;
  border-width: 1px;
  padding-left: 0.625rem;
  padding-right: 0.625rem;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  line-height: 1;
  background-color: var(--c-surface);
  border-color: var(--c-border);
  color: var(--c-text);
}

.tag-display {
  height: 1.25rem;
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  font-size: 11px;
  font-weight: 500;
  color: var(--c-text-muted);
}

.tag-selected {
  gap: 0.375rem;
  border-color: transparent;
  background-color: var(--c-primary);
  color: var(--c-primary-text);
}

.tag-remove-icon {
  display: inline-block;
  height: 0.875rem;
  width: 0.875rem;
  background-color: currentColor;
  mask-image: url('/static/icons/close.svg');
  mask-position: center;
  mask-repeat: no-repeat;
  mask-size: contain;
  -webkit-mask-image: url('/static/icons/close.svg');
  -webkit-mask-position: center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: contain;
}

/* --- Tag Colors --- */

.tag-color-0 {
  background-color: var(--c-tag);
}

.tag-color-1 {
  background-color: var(--c-tag);
}

.tag-color-2 {
  background-color: var(--c-tag);
}

.tag-color-3 {
  background-color: var(--c-tag);
}

.tag-color-4 {
  background-color: var(--c-tag);
}

.tag-color-5 {
  background-color: var(--c-tag);
}

.tag-color-6 {
  background-color: var(--c-tag);
}

.tag-color-7 {
  background-color: var(--c-tag);
}

.tag-color-8 {
  background-color: var(--c-tag);
}

.tag-color-9 {
  background-color: var(--c-tag);
}

.tag-selected.tag-color-0,
.tag-selected.tag-color-1,
.tag-selected.tag-color-2,
.tag-selected.tag-color-3,
.tag-selected.tag-color-4,
.tag-selected.tag-color-5,
.tag-selected.tag-color-6,
.tag-selected.tag-color-7,
.tag-selected.tag-color-8,
.tag-selected.tag-color-9 {
  background-color: var(--c-primary);
}

.item-card-name {
  margin: 0px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-weight: 500;
  font-size: 17px;
  margin-bottom: 6px;
}

.item-card-date {
  margin: 0px;
  font-size: 13px;
  color: var(--c-text-muted);
}

/* --- Swipe Background --- */

.swipe-background {
  position: absolute;
  inset: 0px;
  display: flex;
  height: 100%;
  width: 100%;
  align-items: center;
  justify-content: space-between;
  background-color: transparent;
  padding: 0 20px;
  z-index: 0;
  transition: background-color 0.1s ease-in-out;
}

.swipe-action {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  opacity: 0;
  transition-property: opacity;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: 0.1s;
  transition-timing-function: ease-in-out;
}

.swipe-action.visible {
  opacity: 1;
}

.swipe-background.bg-inventory {
  --tw-bg-opacity: 1;
  background-color: rgb(224 242 254 / var(--tw-bg-opacity, 1));
}

.swipe-background.bg-shopping {
  --tw-bg-opacity: 1;
  background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));
}

.swipe-background.bg-costco {
  --tw-bg-opacity: 1;
  background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
}

/* アイテム追加ボタン */

.btn-item-add {
  position: fixed;
  border-radius: 9999px;
  text-align: center;
  font-size: 28px;
  bottom: 20px;
  right: 20px;
  width: var(--size-fab);
  height: var(--size-fab);
  background-color: var(--c-primary);
  color: var(--c-primary-text);
  font-weight: 150;
  box-shadow: var(--shadow-strong);
  z-index: 1500;
}

/* アクションボタンの共通スタイル */

.btn-action {
  white-space: nowrap;
  padding-left: 1rem;
  padding-right: 1rem;
  font-size: 0.875rem;
  line-height: 1.25rem;
  font-weight: 600;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  border-radius: var(--radius-pill);
  background-color: var(--color-accent);
  color: var(--color-accent-ink);
  box-shadow: var(--shadow-strong);
  height: var(--control-height);
}

#bottom-action-bar {
  position: fixed;
  bottom: 0px;
  left: 0px;
  right: 0px;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  padding: 1rem;
  z-index: 1400;
  pointer-events: none;
}

#bottom-action-bar.is-active {
  justify-content: center;
  gap: 0.75rem;
  background-color: var(--color-surface-frosted);
  pointer-events: auto;
}

#bottom-action-bar.is-active .btn-action {
  max-width: 180px;
  flex: 1 1 0%;
}

#deselect-all-btn {
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(203 213 225 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(51 65 85 / var(--tw-text-opacity, 1));
}

#deselect-all-btn:active {
  --tw-bg-opacity: 1;
  background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));
}

/* ボタン自体はクリックできるように */

#bottom-action-bar > .btn-action {
  pointer-events: auto;
}

#move-to-store-btn {
  --tw-bg-opacity: 1;
  background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(6 95 70 / var(--tw-text-opacity, 1));
}

#move-to-store-btn:active {
  --tw-bg-opacity: 1;
  background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1));
}

#move-to-costco-btn {
  --tw-bg-opacity: 1;
  background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(146 64 14 / var(--tw-text-opacity, 1));
}

#move-to-costco-btn:active {
  --tw-bg-opacity: 1;
  background-color: rgb(253 230 138 / var(--tw-bg-opacity, 1));
}

.btn-not-bought {
  --tw-bg-opacity: 1;
  background-color: rgb(224 242 254 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(7 89 133 / var(--tw-text-opacity, 1));
}

.btn-not-bought:active {
  --tw-bg-opacity: 1;
  background-color: rgb(186 230 253 / var(--tw-bg-opacity, 1));
}

.btn-bought {
  --tw-bg-opacity: 1;
  background-color: rgb(2 132 199 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.btn-bought:active {
  --tw-bg-opacity: 1;
  background-color: rgb(3 105 161 / var(--tw-bg-opacity, 1));
}

.btn-settings-icon,
.btn-add-icon {
  position: relative;
  height: 3rem;
  width: 3rem;
  padding: 0px;
}

.btn-settings-icon::before,
.btn-add-icon::before {
  content: '';
  position: absolute;
  inset: 0px;
  background-position: center;
  background-repeat: no-repeat;
  mask-size: 24px 24px;
  -webkit-mask-size: 24px 24px;
  background-size: 24px 24px;
}

.btn-settings-icon::before {
  mask-image: url('/static/icons/settings.svg?v=2');
  -webkit-mask-image: url('/static/icons/settings.svg?v=2');
}

.btn-add-icon::before {
  mask-image: url('/static/icons/add.svg?v=1');
  -webkit-mask-image: url('/static/icons/add.svg?v=1');
}

/* モーダル */

.modal {
  position: fixed;
  left: 0px;
  top: 0px;
  height: 100%;
  width: 100%;
  align-items: flex-start;
  justify-content: center;
  overflow: auto;
  display: none;
  z-index: 2000;
  background-color: var(--color-overlay);
}

.modal.show {
  display: flex;
}

.modal-dialog {
  position: relative;
  max-width: 350px;
  background-color: var(--c-surface);
  padding: 20px;
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-strong);
  width: 90%;
  margin-top: 3vh;
}

.btn-delete-text {
  margin-top: 1rem;
  width: 100%;
  border-width: 1px;
  --tw-bg-opacity: 1;
  background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(190 18 60 / var(--tw-text-opacity, 1));
}

.btn-delete-text:active {
  --tw-bg-opacity: 1;
  background-color: rgb(255 228 230 / var(--tw-bg-opacity, 1));
}

.btn-delete-text {
  border-color: var(--color-danger);
}

.btn-delete-text[hidden] {
  display: none;
}

#item-form {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.image-preview-container {
  margin-bottom: 1.25rem;
  display: flex;
  height: 200px;
  width: 200px;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  border-radius: var(--radius-control);
  background-color: var(--c-bg);
  border: 1px solid var(--c-border);
}

#item-image-preview {
  height: 100%;
  width: 100%;
  -o-object-fit: contain;
     object-fit: contain;
}

.form-input {
  margin-bottom: 1.25rem;
  width: 100%;
  padding: 0.75rem;
  border-radius: var(--radius-control);
  background-color: var(--c-bg);
}

.modal-form-actions {
  display: flex;
  width: 100%;
  gap: 0.75rem;
}

.btn-cancel, .btn-submit, .btn-danger {
  flex: 1 1 0%;
}

.btn-cancel {
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(203 213 225 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(51 65 85 / var(--tw-text-opacity, 1));
}

.btn-cancel:active {
  --tw-bg-opacity: 1;
  background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));
}

.btn-submit {
  --tw-bg-opacity: 1;
  background-color: rgb(2 132 199 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.btn-submit:active {
  --tw-bg-opacity: 1;
  background-color: rgb(3 105 161 / var(--tw-bg-opacity, 1));
}

/* --- Tag Editor in Modal --- */

.tag-editor-container {
  margin-bottom: 1.25rem;
  width: 100%;
}

.tag-editor-container > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
}

.tag-editor-group {
  width: 100%;
}

.tag-editor-label {
  margin-bottom: 0.5rem;
  margin-top: 0px;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 700;
  color: var(--c-text-muted);
}

.tag-selected-list,
.tag-suggestions {
  display: flex;
  min-height: 2.5rem;
  width: 100%;
  flex-wrap: wrap;
  align-content: flex-start;
  gap: 0.5rem;
  border-radius: 0.5rem;
  border-width: 1px;
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  padding: 0.5rem;
  border-color: var(--c-border);
}

.tag-selected-list.is-empty::before {
  content: "未選択";
  display: flex;
  height: 1.5rem;
  align-items: center;
  font-size: 0.875rem;
  line-height: 1.25rem;
  color: var(--c-text-muted);
}

.tag-suggestion-item {
  display: inline-flex;
  height: 1.5rem;
  align-items: center;
  border-radius: 9999px;
  border-width: 1px;
  padding-left: 0.625rem;
  padding-right: 0.625rem;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  line-height: 1;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  background-color: var(--c-surface);
  border-color: var(--c-border);
  color: var(--c-text);
}

.tag-suggestion-item:active,
.tag-suggestion-item:hover {
  border-color: var(--c-primary);
  color: var(--c-primary);
}

#delete-confirm-modal {
  text-align: center;
}

#delete-confirm-modal .modal-dialog {
  margin-top: 18vh;
  text-align: center;
}

#delete-confirm-message {
  margin-top: 20px;
  margin-right: 0;
  margin-bottom: 50px;
  margin-left: 0;
}

.btn-danger {
  --tw-bg-opacity: 1;
  background-color: rgb(225 29 72 / var(--tw-bg-opacity, 1));
  padding-left: 1.25rem;
  padding-right: 1.25rem;
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.btn-danger:active {
  --tw-bg-opacity: 1;
  background-color: rgb(190 18 60 / var(--tw-bg-opacity, 1));
}

/* --- Login Page Styles --- */

.login-page {
  display: flex;
  height: 100vh;
  align-items: flex-start;
  justify-content: center;
  padding-top: 5vh;
}

.login-container {
  max-width: 400px;
  padding: 2rem;
  width: 90%;
  background-color: var(--c-surface);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-strong);
}

.login-container h1 {
  margin-bottom: 1.5rem;
  margin-top: 0px;
  text-align: center;
}

.form-group {
  margin-bottom: 1.25rem;
}

.form-group label {
  margin-bottom: 0.5rem;
  display: block;
  font-weight: 700;
}

.form-group-inline {
  margin-bottom: 1.5rem;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.btn-submit-full {
  width: 100%;
  --tw-bg-opacity: 1;
  background-color: rgb(2 132 199 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.btn-submit-full:active {
  --tw-bg-opacity: 1;
  background-color: rgb(3 105 161 / var(--tw-bg-opacity, 1));
}

/* --- Index Navigation --- */

.index-nav {
  position: fixed;
  flex-direction: column;
  gap: 0.5rem;
  border-radius: 0.25rem;
  padding: 0.375rem;
  display: none;
  top: 50%;
  right: 4px;
  transform: translateY(-50%);
  z-index: 1000;
  background-color: var(--c-bg);
  -webkit-backdrop-filter: blur(4px);
          backdrop-filter: blur(4px);
  box-shadow: var(--shadow);
  padding-top: 10px;
  padding-bottom: 10px;
}

.index-nav a {
  border-radius: 0.25rem;
  background-color: transparent;
  padding-left: 0.25rem;
  padding-right: 0.25rem;
  padding-top: 0.125rem;
  padding-bottom: 0.125rem;
  font-size: 0.875rem;
  line-height: 1.25rem;
  font-weight: 700;
  text-decoration-line: none;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  color: var(--c-text);
  text-shadow: none;
}

.index-nav a.disabled {
  color: var(--c-text-disabled);
  pointer-events: none;
}

.index-nav a:hover {
  background-color: transparent;
  color: var(--c-text);
}

.index-nav a.is-tapped {
  --tw-bg-opacity: 1;
  background-color: rgb(224 242 254 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(7 89 133 / var(--tw-text-opacity, 1));
}

/* --- Tag Filter Bar --- */

.filter-toolbar {
  position: sticky;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
  background-color: var(--c-bg);
  top: 50px;
  z-index: 999;
}

.page-view.search-open .filter-toolbar {
  top: 110px;
}

.tag-filter-bar {
  min-width: 0px;
  flex: 1 1 0%;
  gap: 0.5rem;
  overflow-x: auto;
  padding: 0px;
  display: none;
  flex-wrap: nowrap;
  -ms-overflow-style: none;
  scrollbar-width: none;
}

.tag-filter-bar::-webkit-scrollbar {
  display: none;
}

.search-toggle-btn {
  height: 2rem;
  width: 2rem;
  flex-shrink: 0;
  border-radius: 9999px;
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(203 213 225 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(51 65 85 / var(--tw-text-opacity, 1));
}

.search-toggle-btn:active {
  --tw-bg-opacity: 1;
  background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));
}

.search-toggle-btn[hidden] {
  display: none !important;
}

.search-toggle-btn::before {
  content: '';
  height: 1rem;
  width: 1rem;
  mask-image: url('/static/icons/search.svg');
  -webkit-mask-image: url('/static/icons/search.svg');
}

.filter-tag-btn {
  display: inline-flex;
  height: 1.5rem;
  align-items: center;
  white-space: nowrap;
  border-radius: 9999px;
  border-width: 1px;
  padding-left: 0.625rem;
  padding-right: 0.625rem;
  font-size: 0.75rem;
  line-height: 1rem;
  font-weight: 500;
  line-height: 1;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  border-color: var(--c-border);
  background-color: var(--c-surface);
  color: var(--c-text);
}

.filter-tag-btn.active {
  background-color: var(--c-primary);
  color: var(--c-primary-text);
  border-color: var(--c-primary);
}

/* --- Card Selection Styles --- */

.item-card .checkmark {
  position: absolute;
  left: 0.125rem;
  top: 0px;
  height: 2rem;
  width: 2rem;
  background-size: contain;
  background-position: center;
  background-repeat: no-repeat;
  display: none;
  background-image: url('/static/icons/check.svg');
}

.item-card.selected {
  --tw-border-opacity: 1;
  border-color: rgb(199 210 254 / var(--tw-border-opacity, 1));
}

.item-card.selected .item-card-content {
  --tw-bg-opacity: 1;
  background-color: rgb(238 242 255 / var(--tw-bg-opacity, 1));
}

.item-card.selected .checkmark {
  display: block;
}

/* --- Settings Page --- */

.settings-page-container {
  min-height: 100vh;
  background-color: var(--c-bg);
}

.settings-header {
  display: flex;
  height: 50px;
  align-items: center;
  padding-left: 1rem;
  padding-right: 1rem;
  border-bottom: 1px solid var(--c-border);
  background-color: var(--c-surface);
}

.settings-header h1 {
  font-size: 18px;
  margin: 0px;
  flex-grow: 1;
  text-align: center;
}

.back-button {
  color: var(--c-primary);
  height: 2.5rem;
  width: 2.5rem;
  text-decoration-line: none;
  margin-left: -8px;
  margin-right: 8px;
}

.icon-chevron-left,
.icon-chevron-right,
.icon-chevron-up,
.icon-chevron-down {
  width: 22px;
  height: 22px;
}

.icon-chevron-left {
  mask-image: url('/static/icons/chevron-left.svg');
  -webkit-mask-image: url('/static/icons/chevron-left.svg');
}

.icon-chevron-right {
  mask-image: url('/static/icons/chevron-right.svg');
  -webkit-mask-image: url('/static/icons/chevron-right.svg');
}

.icon-chevron-up {
  mask-image: url('/static/icons/chevron-up.svg');
  -webkit-mask-image: url('/static/icons/chevron-up.svg');
}

.icon-chevron-down {
  mask-image: url('/static/icons/chevron-down.svg');
  -webkit-mask-image: url('/static/icons/chevron-down.svg');
}

.settings-chevron {
  color: var(--c-text-muted);
}

.settings-main {
  padding-top: 1rem;
}

.settings-list {
  margin: 0px;
  list-style-type: none;
  padding: 0px;
  background-color: var(--c-surface);
  border-top: 1px solid var(--c-border);
  border-bottom: 1px solid var(--c-border);
}

.settings-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1rem;
}

.settings-item:not(:last-child) {
  border-bottom: 1px solid var(--c-border);
}

.settings-item label {
  font-size: 1rem;
  line-height: 1.5rem;
}

.settings-button-logout {
  width: 100%;
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(203 213 225 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(51 65 85 / var(--tw-text-opacity, 1));
}

.settings-button-logout:active {
  --tw-bg-opacity: 1;
  background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));
}

/* --- Tag Management Page --- */

.tag-management-container {
  padding: 1rem;
}

.tag-add-form {
  margin-bottom: 1.5rem;
  display: flex;
  gap: 0.5rem;
}

.tag-add-form .form-input {
  margin-bottom: 0px;
  min-width: 0px;
  flex-grow: 1;
}

.tag-add-form .btn-submit {
  flex-shrink: 0;
  white-space: nowrap;
  padding-left: 1.5rem;
  padding-right: 1.5rem;
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
}

.btn-delete-tag {
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(253 164 175 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1));
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  font-size: 0.875rem;
  line-height: 1.25rem;
  font-weight: 600;
  --tw-text-opacity: 1;
  color: rgb(190 18 60 / var(--tw-text-opacity, 1));
}

.btn-delete-tag:active {
  --tw-bg-opacity: 1;
  background-color: rgb(255 228 230 / var(--tw-bg-opacity, 1));
}

.btn-delete-tag {
  border-radius: var(--radius-control);
}

.tag-actions {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

#new-tag-name {
  background-color: var(--c-surface);
  border: 1px solid var(--c-border);
}

.tag-list-item {
  height: 1.75rem;
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  font-size: 0.875rem;
  line-height: 1.25rem;
}

/* --- Approved Apple-like app system --- */

html,
body {
  overflow-x: clip;
}

body {
  min-width: 0;
  padding-top: calc(64px + env(safe-area-inset-top));
  background-color: var(--color-page);
  color: var(--color-body);
  font-family: var(--font-body);
  font-size: var(--text-base);
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

body.aux-page,
body.login-page {
  padding-top: 0;
}

button,
input {
  font: inherit;
}

button {
  white-space: nowrap;
}

button:focus-visible,
a:focus-visible {
  outline: 3px solid var(--color-accent);
  outline-offset: 2px;
}

input {
  outline: 2px solid transparent;
  outline-offset: 1px;
}

input:focus-visible {
  border-color: var(--color-rule-strong);
  outline-color: var(--color-accent);
}

button:disabled,
input:disabled {
  cursor: not-allowed;
  opacity: 0.55;
}

.main-app-header {
  position: fixed;
  inset: 0 0 auto;
  z-index: 1002;
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr) 44px;
  align-items: center;
  min-height: calc(64px + env(safe-area-inset-top));
  padding: max(var(--space-3xs), env(safe-area-inset-top)) var(--space-2xs) var(--space-2xs);
  border-bottom: var(--rule-thin) solid var(--color-rule);
  background-color: var(--color-surface);
}

.main-header-button,
.main-header-spacer {
  width: 44px;
  height: 44px;
}

.main-header-button {
  position: relative;
  display: grid;
  place-items: center;
  padding: 0;
  border: 0;
  border-radius: var(--radius-pill);
  background-color: transparent;
  color: var(--color-accent);
}

#settings-btn {
  grid-column: 1;
}

#item-search-toggle {
  grid-column: 3;
}

.main-app-header .search-toggle-btn {
  width: 44px;
  height: 44px;
  border: 0;
  background-color: transparent;
  color: var(--color-accent);
  box-shadow: none;
}

.main-app-header .search-toggle-btn::before {
  width: 22px;
  height: 22px;
  mask-image: url('/static/icons/search.svg?v=2');
  -webkit-mask-image: url('/static/icons/search.svg?v=2');
}

.main-header-button:active,
.btn-item-add:active,
.search-toggle-btn:active,
.back-button:active {
  transform: scale(0.96);
}

.tabs {
  position: static;
  grid-column: 2;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 2px;
  width: 100%;
  height: 48px;
  padding: 2px;
  border: 0;
  border-radius: var(--radius-sm);
  background-color: var(--color-page-deep);
  transform: none;
}

.tab-link {
  min-width: 0;
  min-height: 44px;
  padding: 0 2px;
  overflow: hidden;
  border: 0;
  border-radius: var(--radius-xs);
  background-color: transparent;
  color: var(--color-muted);
  font-size: var(--text-base);
  font-weight: 650;
  line-height: 1;
  text-overflow: ellipsis;
  white-space: nowrap;
  transition: transform var(--dur-micro) var(--ease-out), background-color var(--dur-micro) var(--ease-out), color var(--dur-micro) var(--ease-out);
}

.tab-link.active {
  background-color: var(--color-surface);
  color: var(--color-ink);
  box-shadow: 0 1px 3px var(--color-shadow);
}

.tab-link:active {
  transform: scale(0.98);
}

.tab-icon {
  width: 16px;
  height: 16px;
  margin-right: var(--space-3xs);
  vertical-align: -3px;
}

.tab-link[data-tab="byCostco"] span {
  padding-left: 28px;
  background-size: 27px 27px;
}

.search-bar {
  top: calc(64px + env(safe-area-inset-top));
  gap: var(--space-2xs);
  padding: var(--space-2xs) var(--space-sm);
  background-color: var(--color-surface);
}

.search-input {
  height: 44px;
  padding: 0 44px 0 var(--space-sm);
  border: var(--rule-thin) solid transparent;
  border-radius: var(--radius-sm);
  background-color: var(--color-page-deep);
  color: var(--color-ink);
}

.search-input::-moz-placeholder {
  color: var(--color-muted);
  opacity: 1;
}

.search-input::placeholder {
  color: var(--color-muted);
  opacity: 1;
}

.search-clear-btn {
  right: var(--space-md);
  width: 32px;
  height: 32px;
  background-color: var(--color-muted);
  mask-size: 17px 17px;
  -webkit-mask-size: 17px 17px;
}

.filter-toolbar {
  top: calc(64px + env(safe-area-inset-top));
  gap: var(--space-2xs);
  padding: var(--space-xs) var(--space-sm) var(--space-2xs);
  border-bottom: var(--rule-thin) solid var(--color-rule);
  background-color: var(--color-surface);
}

.filter-toolbar[hidden] {
  display: none !important;
}

.page-view.search-open .filter-toolbar {
  top: calc(124px + env(safe-area-inset-top));
}

.tag-filter-bar {
  gap: var(--space-2xs);
}

.filter-tag-btn,
.tag,
.tag-suggestion-item {
  border: var(--rule-thin) solid var(--color-rule);
  border-radius: var(--radius-pill);
  background-color: var(--color-surface);
  color: var(--color-muted);
}

.filter-tag-btn {
  height: 44px;
  min-height: 44px;
  padding-inline: var(--space-sm);
  font-size: var(--text-base);
  font-weight: 650;
}

.tag-suggestion-item,
.tag.tag-selected {
  height: 44px;
  min-height: 44px;
  padding-inline: var(--space-sm);
  font-size: var(--text-base);
  font-weight: 650;
}

.filter-tag-btn.active,
.tag-selected {
  border-color: var(--color-accent);
  background-color: var(--color-accent-soft);
  color: var(--color-accent);
}

.tag.tag-selected {
  border-color: var(--color-accent);
  background-color: var(--color-accent-soft);
  color: var(--color-accent);
}

.search-toggle-btn {
  width: 36px;
  height: 36px;
  border: var(--rule-thin) solid var(--color-rule);
  border-radius: var(--radius-pill);
  background-color: var(--color-surface);
  color: var(--color-ink);
  box-shadow: 0 1px 2px var(--color-shadow);
}

.main-container {
  max-width: 800px;
  padding: var(--space-xs) calc(var(--space-sm) + var(--space-2xs)) 88px var(--space-sm);
}

.item-list {
  gap: var(--space-2xs);
  min-height: 44px;
}

.index-label {
  margin: var(--space-xs) var(--space-2xs) var(--space-3xs);
  color: var(--color-muted);
  font-size: var(--text-sm);
  font-weight: 650;
  scroll-margin-top: calc(72px + env(safe-area-inset-top));
}

.page-view.search-open .index-label {
  scroll-margin-top: calc(132px + env(safe-area-inset-top));
}

.page-view.has-tag-filters .index-label {
  scroll-margin-top: calc(128px + env(safe-area-inset-top));
}

.page-view.search-open.has-tag-filters .index-label {
  scroll-margin-top: calc(188px + env(safe-area-inset-top));
}

.item-card {
  border: var(--rule-thin) solid var(--color-rule);
  border-radius: var(--radius-md);
  background-color: var(--color-surface);
  box-shadow: 0 1px 2px var(--color-shadow);
  transition: transform var(--dur-short) var(--ease-out), box-shadow var(--dur-short) var(--ease-out);
}

.item-card-content {
  display: grid;
  grid-template-columns: 72px minmax(0, 1fr);
  gap: var(--space-xs);
  align-items: center;
  min-height: 96px;
  padding: var(--space-xs);
  background-color: var(--color-surface);
}

.item-card-image {
  width: 72px;
  height: 72px;
  margin: 0;
  border-radius: var(--radius-sm);
  background-color: var(--color-page-deep);
}

.item-card-image-img {
  display: block;
  width: 100%;
  height: 100%;
  border-radius: inherit;
  object-fit: cover;
}

.item-card-details {
  min-width: 0;
  padding-right: var(--space-xs);
}

.item-card-name {
  margin: 0 0 var(--space-3xs);
  color: var(--color-ink);
  font-size: var(--text-md);
  font-weight: 650;
  line-height: 1.25;
}

.item-card-tags {
  margin: 0 0 var(--space-2xs);
  gap: var(--space-3xs);
}

.tag-display {
  height: 20px;
  padding-inline: var(--space-2xs);
  color: var(--color-muted);
  font-size: 11px;
}

.item-card-date {
  margin: 0;
  color: var(--color-muted);
  font-size: var(--text-xs);
  font-variant-numeric: tabular-nums;
}

.swiping-active {
  transform: scale(0.99);
  box-shadow: var(--shadow-card);
}

.swipe-background.bg-inventory {
  background-color: var(--color-accent-soft);
}

.swipe-background.bg-shopping {
  background-color: var(--color-planned-soft);
}

.swipe-background.bg-costco {
  background-color: var(--color-costco-soft);
}

.swipe-action {
  color: var(--color-body);
  font-size: var(--text-xs);
  font-weight: 650;
  line-height: 1;
  white-space: nowrap;
}

.swipe-background.bg-inventory .swipe-action {
  color: var(--color-accent);
}

.swipe-background.bg-shopping .swipe-action {
  color: var(--color-planned);
}

.swipe-background.bg-costco .swipe-action {
  color: var(--color-costco);
}

.index-nav {
  top: calc(50% + 32px);
  right: 0;
  z-index: 1000;
  gap: 0;
  width: 40px;
  padding: var(--space-3xs) 0;
  border: var(--rule-thin) solid var(--color-rule);
  border-right: 0;
  border-radius: var(--radius-sm) 0 0 var(--radius-sm);
  background-color: var(--color-surface-frosted);
  box-shadow: none;
  -webkit-backdrop-filter: blur(12px) saturate(1.2);
          backdrop-filter: blur(12px) saturate(1.2);
  touch-action: none;
  -moz-user-select: none;
       user-select: none;
  -webkit-user-select: none;
}

.index-nav a {
  display: grid;
  place-items: center;
  width: 100%;
  height: clamp(28px, calc((100dvh - 96px) / 10), 36px);
  min-height: 0;
  padding: 0;
  border-radius: var(--radius-pill);
  color: var(--color-accent);
  font-size: var(--text-base);
  font-weight: 700;
  line-height: 1;
  text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}

.index-nav a:hover {
  background-color: transparent;
  color: var(--color-accent);
}

.index-nav a.disabled {
  color: var(--color-disabled);
}

.index-nav a.is-tapped {
  background-color: var(--color-accent);
  color: var(--color-accent-ink);
}

.page-view.search-open .index-nav {
  display: none !important;
}

.btn-item-add {
  position: fixed;
  right: var(--space-md);
  bottom: max(var(--space-md), env(safe-area-inset-bottom));
  width: 52px;
  height: 52px;
  border: 0;
  border-radius: var(--radius-pill);
  background-color: var(--color-accent);
  color: var(--color-accent-ink);
  box-shadow: var(--shadow-float);
  font-size: 32px;
  font-weight: 300;
  line-height: 1;
  transition: transform var(--dur-micro) var(--ease-out), background-color var(--dur-micro) var(--ease-out);
}

#bottom-action-bar {
  position: fixed;
  right: auto;
  bottom: max(var(--space-xs), env(safe-area-inset-bottom));
  left: 50%;
  z-index: 1400;
  width: min(calc(100% - 1rem), 430px);
  padding: 0;
  transform: translateX(-50%);
}

#bottom-action-bar:not(.is-active) {
  display: none;
}

#bottom-action-bar.is-active {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2xs);
  padding: var(--space-2xs);
  border: var(--rule-thin) solid var(--color-rule);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface-frosted);
  box-shadow: var(--shadow-float);
  -webkit-backdrop-filter: blur(18px) saturate(1.35);
          backdrop-filter: blur(18px) saturate(1.35);
  flex-wrap: wrap;
}

.selection-count {
  flex: 0 0 100%;
  margin: 0;
  color: var(--color-muted);
  font-size: var(--text-base);
  font-weight: 700;
  line-height: 1.2;
  text-align: center;
}

#bottom-action-bar.is-active .btn-action {
  flex: 1 1 calc(50% - var(--space-3xs));
  min-width: 0;
  min-height: 56px;
  max-width: none;
  padding: var(--space-2xs);
  border: var(--rule-thin) solid transparent;
  border-radius: var(--radius-sm);
  background-color: var(--color-accent-soft);
  color: var(--color-accent);
  box-shadow: none;
  font-size: var(--text-md);
  font-weight: 700;
  line-height: 1.2;
  white-space: nowrap;
}

#deselect-all-btn {
  order: 2;
  flex-basis: 100% !important;
  border-color: var(--color-rule) !important;
  background-color: var(--color-surface) !important;
  color: var(--color-muted) !important;
}

#move-to-store-btn {
  border-color: var(--color-planned) !important;
  background-color: var(--color-planned-soft) !important;
  color: var(--color-planned) !important;
}

#move-to-costco-btn {
  border-color: var(--color-costco) !important;
  background-color: var(--color-costco-soft) !important;
  color: var(--color-costco) !important;
}

#bought-fab {
  background-color: var(--color-accent) !important;
  color: var(--color-accent-ink) !important;
}

#not-bought-btn {
  border-color: var(--color-rule) !important;
  background-color: var(--color-surface) !important;
  color: var(--color-muted) !important;
}

.item-card.selected {
  border-color: var(--color-accent);
}

.item-card.selected .item-card-content {
  background-color: var(--color-accent-soft);
}

.item-card .checkmark {
  top: var(--space-2xs);
  left: var(--space-2xs);
  z-index: 3;
  width: 24px;
  height: 24px;
  border: 2px solid var(--color-surface);
  border-radius: var(--radius-pill);
  background-color: var(--color-accent);
  background-image: url('/static/icons/check.svg');
  background-size: 15px 15px;
}

.photo-viewer {
  background-color: var(--color-viewer);
  color: var(--color-viewer-ink);
  transition: opacity var(--dur-short) var(--ease-out), visibility 0s linear var(--dur-short);
}

.photo-viewer.show {
  transition: opacity var(--dur-short) var(--ease-out);
}

.photo-viewer-header,
.photo-viewer-footer {
  border-color: var(--color-viewer-rule);
  background-color: var(--color-viewer);
}

.photo-viewer-close {
  border-color: var(--color-viewer-rule);
  border-radius: var(--radius-sm);
  background-color: transparent;
}

.photo-viewer-edit {
  border-color: var(--color-accent);
  border-radius: var(--radius-sm);
  background-color: var(--color-accent);
}

.photo-viewer-hint {
  border-radius: var(--radius-pill);
  background-color: var(--color-viewer-raised);
}

.modal {
  background-color: var(--color-overlay);
}

.item-editor-modal {
  align-items: flex-start;
  padding: var(--space-md);
}

.item-editor-modal .modal-dialog {
  width: min(100%, 430px);
  max-width: 430px;
  max-height: calc(100dvh - 3rem);
  margin: 0;
  padding: 0;
  overflow: hidden;
  border: var(--rule-thin) solid var(--color-rule);
  border-radius: var(--radius-lg);
  background-color: var(--color-page);
  box-shadow: var(--shadow-float);
}

#item-form {
  display: grid;
  grid-template-rows: auto minmax(0, 1fr);
  width: 100%;
  max-height: calc(100dvh - 3rem);
}

.item-editor-header {
  position: sticky;
  top: 0;
  z-index: 2;
  display: grid;
  grid-template-columns: minmax(5.5rem, auto) minmax(0, 1fr) minmax(5.5rem, auto);
  gap: var(--space-2xs);
  align-items: center;
  min-height: 56px;
  padding: var(--space-2xs) var(--space-xs);
  border-bottom: var(--rule-thin) solid var(--color-rule);
  background-color: var(--color-surface-frosted);
  -webkit-backdrop-filter: blur(18px) saturate(1.35);
          backdrop-filter: blur(18px) saturate(1.35);
}

.item-editor-header h2 {
  min-width: 0;
  margin: 0;
  overflow: hidden;
  color: var(--color-ink);
  font-size: var(--text-base);
  font-weight: 700;
  line-height: 1.2;
  text-align: center;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.item-editor-header .btn-cancel,
.item-editor-header .btn-submit {
  min-height: 44px;
  padding: 0 var(--space-2xs);
  border: 0;
  background-color: transparent;
  box-shadow: none;
  color: var(--color-accent);
  font-size: var(--text-sm);
  font-weight: 650;
}

.item-editor-header .btn-cancel {
  justify-content: flex-start;
  color: var(--color-muted);
}

.item-editor-header .btn-submit {
  justify-content: flex-end;
}

.item-editor-body {
  display: grid;
  align-content: start;
  gap: var(--space-md);
  padding: var(--space-md) var(--space-sm) var(--space-lg);
  overflow-y: auto;
}

.image-preview-container {
  position: relative;
  width: 160px;
  height: 160px;
  margin: 0 auto;
  overflow: visible;
  border: 0;
  border-radius: var(--radius-lg);
  background-color: var(--color-surface);
  box-shadow: var(--shadow-card);
}

#item-image-preview {
  border-radius: var(--radius-lg);
}

.image-change-indicator {
  position: absolute;
  right: calc(-1 * var(--space-3xs));
  bottom: calc(-1 * var(--space-3xs));
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  border: 3px solid var(--color-surface);
  border-radius: var(--radius-pill);
  background-color: var(--color-accent);
}

.image-change-indicator::before {
  content: '';
  width: 18px;
  height: 18px;
  background-color: var(--color-accent-ink);
  mask: url('/static/icons/edit.svg') center / contain no-repeat;
  -webkit-mask: url('/static/icons/edit.svg') center / contain no-repeat;
}

.item-fields-group,
.tag-editor-container {
  overflow: hidden;
  border: var(--rule-thin) solid var(--color-rule);
  border-radius: var(--radius-md);
  background-color: var(--color-surface);
}

.item-field {
  display: grid;
  gap: var(--space-3xs);
  padding: var(--space-xs) var(--space-sm);
}

.item-field + .item-field {
  border-top: var(--rule-thin) solid var(--color-rule);
}

.item-field > span,
.tag-editor-label {
  color: var(--color-muted);
  font-size: var(--text-xs);
  font-weight: 650;
}

.item-field .form-input {
  min-height: 32px;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background-color: transparent;
  color: var(--color-ink);
}

.tag-editor-container {
  display: grid;
  gap: 0;
  margin: 0;
}

.tag-editor-group {
  padding: var(--space-xs) var(--space-sm);
}

.tag-editor-group + .tag-editor-group {
  border-top: var(--rule-thin) solid var(--color-rule);
}

.tag-editor-label {
  margin: 0 0 var(--space-2xs);
}

.tag-selected-list,
.tag-suggestions {
  min-height: 40px;
  padding: var(--space-2xs);
  border: 0;
  border-radius: var(--radius-sm);
  background-color: var(--color-page);
}

.btn-delete-text {
  min-height: 44px;
  margin: 0;
  border: 0;
  background-color: transparent;
  color: var(--color-danger);
}

#delete-confirm-modal {
  align-items: flex-start;
  padding: 18dvh var(--space-sm) var(--space-sm);
}

#delete-confirm-modal .modal-dialog {
  width: min(100%, 350px);
  margin: 0;
  padding: var(--space-md);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface);
}

#delete-confirm-modal .btn-cancel {
  border: var(--rule-thin) solid var(--color-rule);
  background-color: var(--color-surface);
  color: var(--color-ink);
}

#delete-confirm-message {
  margin: 0 0 var(--space-lg);
  color: var(--color-ink);
  font-size: var(--text-md);
  line-height: 1.35;
}

.modal-form-actions {
  gap: var(--space-2xs);
}

.btn-danger,
.btn-cancel,
.btn-submit,
.btn-submit-full {
  border-radius: var(--radius-sm);
}

.btn-danger {
  background-color: var(--color-danger);
  color: var(--color-accent-ink);
}

.login-page {
  display: grid;
  min-height: 100dvh;
  place-items: center;
  padding: max(var(--space-lg), env(safe-area-inset-top)) var(--space-sm) max(var(--space-lg), env(safe-area-inset-bottom));
  background-color: var(--color-page);
}

.login-container {
  width: min(100%, 400px);
  padding: var(--space-lg);
  border: var(--rule-thin) solid var(--color-rule);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface);
  box-shadow: var(--shadow-card);
}

.login-mark {
  display: grid;
  place-items: center;
  width: 64px;
  height: 64px;
  margin: 0 auto var(--space-sm);
  border-radius: var(--radius-lg);
  background-color: var(--color-accent);
  color: var(--color-accent-ink);
  font-size: var(--text-lg);
  font-weight: 700;
  box-shadow: var(--shadow-card);
}

.login-container h1 {
  margin: 0;
  color: var(--color-ink);
  font-size: 28px;
  font-weight: 700;
  letter-spacing: -0.03em;
  text-align: center;
}

.login-intro {
  margin: var(--space-2xs) 0 var(--space-lg);
  color: var(--color-muted);
  font-size: var(--text-sm);
  text-align: center;
}

.form-group {
  margin-bottom: var(--space-sm);
}

.form-group label {
  margin-bottom: var(--space-2xs);
  color: var(--color-muted);
  font-size: var(--text-sm);
  font-weight: 650;
}

.login-container .form-input {
  min-height: 48px;
  margin: 0;
  padding: 0 var(--space-xs);
  border: var(--rule-thin) solid var(--color-rule);
  border-radius: var(--radius-sm);
  background-color: var(--color-page);
}

.btn-submit-full {
  min-height: 48px;
  background-color: var(--color-accent);
  color: var(--color-accent-ink);
}

.flash-message.error {
  margin: 0 0 var(--space-sm);
  padding: var(--space-xs);
  border: var(--rule-thin) solid var(--color-danger);
  border-radius: var(--radius-sm);
  background-color: var(--color-danger-soft);
  color: var(--color-danger);
}

.settings-page-container {
  min-height: 100dvh;
  background-color: var(--color-page);
}

.settings-header {
  position: sticky;
  top: 0;
  z-index: 100;
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr) 44px;
  align-items: center;
  height: auto;
  min-height: calc(56px + env(safe-area-inset-top));
  padding: max(var(--space-2xs), env(safe-area-inset-top)) var(--space-xs) var(--space-2xs);
  border-bottom: var(--rule-thin) solid var(--color-rule);
  background-color: var(--color-surface-frosted);
  -webkit-backdrop-filter: blur(18px) saturate(1.35);
          backdrop-filter: blur(18px) saturate(1.35);
}

.settings-header h1 {
  grid-column: 2;
  min-width: 0;
  margin: 0;
  color: var(--color-ink);
  font-size: var(--text-md);
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.2;
  text-align: center;
}

.back-button {
  grid-column: 1;
  width: 44px;
  height: 44px;
  margin: 0;
  border-radius: var(--radius-pill);
  color: var(--color-accent);
}

.settings-main {
  width: min(100%, 680px);
  margin: 0 auto;
  padding: var(--space-2xs) 0 var(--space-xl);
}

.settings-section-title {
  margin: var(--space-md) var(--space-sm) var(--space-2xs);
  color: var(--color-muted);
  font-size: var(--text-xs);
  font-weight: 650;
}

.settings-list-grouped {
  margin: 0 var(--space-sm);
  overflow: hidden;
  border: var(--rule-thin) solid var(--color-rule);
  border-radius: var(--radius-md);
  background-color: var(--color-surface);
  box-shadow: 0 1px 2px var(--color-shadow);
}

.settings-item {
  min-height: 60px;
  padding: var(--space-2xs) var(--space-xs);
  color: var(--color-ink);
}

.settings-item:not(:last-child) {
  border-bottom: var(--rule-thin) solid var(--color-rule);
}

.settings-item-link {
  display: flex;
  flex: 1;
  gap: var(--space-xs);
  align-items: center;
  min-width: 0;
  min-height: 44px;
  color: var(--color-ink);
  text-decoration: none;
}

.settings-item-icon {
  display: grid;
  place-items: center;
  width: 32px;
  height: 32px;
  border-radius: var(--radius-xs);
  background-color: var(--color-accent);
  color: var(--color-accent-ink);
  font-weight: 700;
}

.settings-chevron {
  flex: 0 0 auto;
  color: var(--color-disabled);
}

.settings-button-logout {
  width: 100%;
  min-height: 56px;
  border: 0;
  background-color: transparent;
  color: var(--color-danger);
  font-size: var(--text-base);
  font-weight: 600;
}

.tag-management-container {
  padding: var(--space-sm) 0 var(--space-xl);
}

.tag-add-form {
  gap: var(--space-2xs);
  margin: 0 var(--space-sm) var(--space-md);
}

.tag-add-form .form-input {
  min-height: 48px;
  padding: 0 var(--space-xs);
  border: var(--rule-thin) solid var(--color-rule);
  border-radius: var(--radius-sm);
  background-color: var(--color-surface);
}

.tag-add-form .btn-submit {
  min-height: 48px;
  padding: 0 var(--space-sm);
  border: 0;
  border-radius: var(--radius-sm);
  background-color: var(--color-accent);
  color: var(--color-accent-ink);
}

.tag-list-title {
  margin-top: 0;
}

.tag-reorder-hint {
  margin: calc(-1 * var(--space-3xs)) var(--space-sm) var(--space-2xs);
  color: var(--color-muted);
  font-size: var(--text-xs);
}

#tag-list .settings-item {
  position: relative;
  gap: var(--space-xs);
  transition:
        background-color var(--dur-micro) var(--ease-out),
        box-shadow var(--dur-micro) var(--ease-out),
        transform var(--dur-micro) var(--ease-out);
}

#tag-list .settings-item.is-dragging {
  background-color: var(--color-accent-soft);
  box-shadow: inset 0 0 0 2px var(--color-accent);
}

#tag-list .settings-item.is-dragging > * {
  opacity: 0;
}

body.is-tag-dragging {
  cursor: grabbing;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}

.tag-drag-ghost {
  position: fixed;
  z-index: 1200;
  gap: var(--space-xs);
  margin: 0;
  border: var(--rule-thin) solid var(--color-rule-strong);
  border-radius: var(--radius-md);
  background-color: var(--color-surface);
  box-shadow: var(--shadow-float);
  pointer-events: none;
  transform: translate3d(0, 0, 0) scale(1.015);
  transform-origin: center;
  will-change: transform;
}

.tag-drag-ghost .tag-drag-handle {
  background-color: var(--color-page-deep);
  color: var(--color-accent);
  cursor: grabbing;
}

.tag-drag-ghost.is-settling {
  transition:
        transform var(--dur-micro) var(--ease-out),
        box-shadow var(--dur-micro) var(--ease-out);
  box-shadow: var(--shadow-card);
}

.tag-list-item {
  flex: 1 1 auto;
  min-width: 0;
  height: 28px;
  overflow: hidden;
  color: var(--color-ink);
  text-overflow: ellipsis;
  white-space: nowrap;
}

.tag-actions {
  flex: 0 0 auto;
  gap: var(--space-3xs);
}

.tag-drag-handle {
  position: relative;
  flex: 0 0 44px;
  width: 44px;
  height: 44px;
  padding: 0;
  border: 0;
  border-radius: var(--radius-sm);
  background-color: transparent;
  color: var(--color-muted);
  cursor: grab;
  touch-action: none;
  -webkit-tap-highlight-color: transparent;
}

.tag-drag-handle::before {
  width: 22px;
  height: 22px;
  background-color: currentcolor;
  content: "";
  -webkit-mask: url("/static/icons/grip.svg?v=1") center / contain no-repeat;
  mask: url("/static/icons/grip.svg?v=1") center / contain no-repeat;
}

.tag-drag-handle:active {
  background-color: var(--color-page-deep);
  color: var(--color-accent);
  cursor: grabbing;
}

.tag-drag-handle:disabled {
  opacity: 0.55;
  cursor: wait;
}

.btn-delete-tag {
  min-height: 40px;
  padding: 0 var(--space-xs);
  border: 0;
  border-radius: var(--radius-sm);
  background-color: var(--color-danger-soft);
  color: var(--color-danger);
}

@media (hover: hover) and (pointer: fine) {
  .main-header-button:hover,
    .search-toggle-btn:hover,
    .back-button:hover {
    background-color: var(--color-accent-soft);
  }

  .tab-link:hover:not(.active),
    .filter-tag-btn:hover,
    .tag-suggestion-item:hover {
    background-color: var(--color-surface);
    color: var(--color-ink);
  }

  .btn-item-add:hover,
    .btn-submit-full:hover,
    .tag-add-form .btn-submit:hover {
    background-color: var(--color-accent-hover);
  }

  .item-card:hover {
    box-shadow: var(--shadow-card);
  }

  .tag-drag-handle:hover {
    background-color: var(--color-page-deep);
    color: var(--color-ink);
  }
}

@media (max-width: 640px) {
  .item-editor-modal {
    padding: 0;
  }

  .item-editor-modal .modal-dialog {
    width: 100%;
    max-width: none;
    height: 100dvh;
    max-height: none;
    border: 0;
    border-radius: 0;
  }

  #item-form {
    height: 100dvh;
    max-height: none;
  }

  .item-editor-header {
    min-height: calc(56px + env(safe-area-inset-top));
    padding-top: max(var(--space-2xs), env(safe-area-inset-top));
  }

  .item-editor-body {
    padding-bottom: max(var(--space-lg), env(safe-area-inset-bottom));
  }
}

@media (max-width: 370px) {
  .main-app-header {
    padding-right: var(--space-3xs);
    padding-left: var(--space-3xs);
  }

  .tabs {
    gap: 1px;
    padding-inline: 0;
  }

  .tab-link {
    padding-inline: 0;
    font-size: var(--text-base);
  }

  .main-container {
    padding-right: calc(var(--space-2xs) + var(--space-2xs));
    padding-left: var(--space-2xs);
  }

  .item-card-content {
    grid-template-columns: 64px minmax(0, 1fr);
    gap: var(--space-2xs);
    min-height: 88px;
    padding: var(--space-2xs);
  }

  .item-card-image {
    width: 64px;
    height: 64px;
  }

  .item-editor-header {
    grid-template-columns: minmax(4.75rem, auto) minmax(0, 1fr) minmax(4.75rem, auto);
  }
}

@media (prefers-reduced-motion: reduce) {
  .tab-link,
    .item-card,
    #tag-list .settings-item,
    .tag-drag-ghost,
    .btn-item-add,
    .photo-viewer,
    .photo-viewer-image.is-animating {
    transition-duration: 0.01ms;
  }

  .index-nav a {
    scroll-behavior: auto;
  }
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

.visible {
  visibility: visible;
}

.static {
  position: static;
}

.block {
  display: block;
}

.flex {
  display: flex;
}

.hidden {
  display: none;
}

.transform {
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.resize {
  resize: both;
}

.filter {
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.transition {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.ease-out {
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
