/* Desktop's right panel (mock 2d) and tablet's Quest-log strip (mock 2c). */ .panel { box-sizing: border-box; display: flex; flex-direction: column; gap: 16px; padding: 32px 22px; border-left: 1px solid var(--color-divider); } .hint { margin: 0; font-family: var(--font-body); font-size: 13px; color: var(--color-neutral-800); } .rows { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 12px; } .row { box-sizing: border-box; width: 100%; display: flex; align-items: center; gap: 12px; padding: 10px; border-radius: 22px; background: var(--color-surface); text-align: left; } /* The 48 px washed photo; Photo applies the washed filter. The placeholder's "dish photo" caption does not fit, so only its stripes show. */ .rowPhoto { width: 48px; height: 48px; font-size: 0; } .rowText { flex: 1; min-width: 0; display: flex; flex-direction: column; font-family: var(--font-body); } .rowName { font-size: 14px; font-weight: 700; overflow-wrap: anywhere; } .rowMeta { font-size: 12px; color: var(--color-neutral-700); } /* Two columns of three 4 px dots. */ .grip { flex: none; display: grid; grid-template-columns: 4px 4px; gap: 3px; } .dot { width: 4px; height: 4px; border-radius: var(--radius-pill); background: var(--color-neutral-500); } .more { display: inline-flex; align-items: center; gap: 6px; min-height: 44px; font-family: var(--font-body); font-size: 14px; font-weight: 700; color: var(--color-accent-700); text-decoration: none; } .more:hover { text-decoration: underline; } .loading { display: flex; flex-direction: column; gap: 12px; } .skeleton { height: 68px; border-radius: 22px; } .empty { margin: 0; font-family: var(--font-body); font-size: 14px; line-height: 1.45; color: var(--color-neutral-700); } /* Tablet: the Quest log as chips on a surface card under the grid. */ .strip { display: flex; flex-direction: column; gap: 12px; padding: 16px 18px; border-radius: var(--radius-lg); background: var(--color-surface); } .stripHeader { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; } .stripTitle { margin: 0; font-family: var(--font-heading); font-size: 18px; font-weight: 400; } .stripHint { margin: 0; font-family: var(--font-body); font-size: 12px; font-weight: 700; color: var(--color-neutral-700); } .chips { margin: 0; padding: 0; list-style: none; display: flex; flex-wrap: wrap; gap: 10px; } .chip { display: flex; align-items: center; gap: 8px; padding: 5px 14px 5px 5px; border-radius: var(--radius-pill); background: var(--color-bg); font-family: var(--font-body); font-size: 13px; font-weight: 700; } /* As the row's photo, at 28 px. */ .chipPhoto { width: 28px; height: 28px; font-size: 0; } /* A row or a chip is a button dragged onto a day: by a pointer (no scrolling or text selection under it) or with the keyboard. Its 2 px border is clear until it is the ghost, inside its padding. */ .draggable { margin: 0; border: 2px solid transparent; font: inherit; color: var(--color-text); cursor: grab; touch-action: none; user-select: none; } .row.draggable { padding: 8px; } .chip.draggable { padding: 3px 12px 3px 3px; } /* A dinner that cannot be picked up now: no grid to drop on, a swap pending, or already this week. */ .draggable[aria-disabled='true'] { cursor: default; } /* The row or chip being dragged: a dashed ghost at 55% opacity. */ .ghost { border-style: dashed; border-color: var(--color-neutral-500); background: transparent; opacity: 0.55; } /* The dragged copy floating below right of the pointer: lifted with the large shadow and tilted -3deg. It lets the pointer through to the day under it. */ .floating { position: fixed; z-index: 10; box-sizing: border-box; margin: 0; box-shadow: var(--shadow-lg); transform: rotate(-3deg); pointer-events: none; cursor: grabbing; }