
:root{--paper:#fff8f6;--white:#fff;--rose:#a34e72;--rose2:#b96c83;--plum:#513a44;--muted:#8b7480;--line:#efdce4;--pale:#f7e9ef;--taken:#725161;--shadow:0 5px 16px rgba(95,53,71,.07)}
*{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--plum);font-family:Arial,Helvetica,sans-serif}button,input{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed}button:focus-visible,input:focus-visible{outline:2px solid #bd7590;outline-offset:2px}img{display:block;max-width:100%}
.shell{width:min(100%,1020px);margin:0 auto;padding:0 16px 42px}.head{display:flex;align-items:center;gap:13px;padding:21px 1px 17px}.portrait{width:clamp(84px,23vw,112px);height:clamp(84px,23vw,112px);border-radius:50%;border:4px solid #fff;box-shadow:0 3px 14px #945b7030;object-fit:cover;flex:none}.heading{font-family:Georgia,'Times New Roman',serif;color:var(--plum);font-size:clamp(28px,7.9vw,43px);font-weight:500;line-height:1.04;letter-spacing:-.035em;margin:0}.heading .love{color:#ca7991}.heading span{display:block;white-space:nowrap}.search-wrap{position:relative;margin:4px 0 12px}.search-wrap svg{position:absolute;left:15px;top:50%;transform:translateY(-50%);width:20px;height:20px;stroke:var(--muted)}.search{width:100%;min-height:49px;border:1px solid #ead1db;border-radius:16px;background:#fff;color:var(--plum);padding:12px 15px 12px 46px;font-size:16px;box-shadow:0 2px 10px #945b700a}.search::placeholder{color:#a48d96}
.chips{display:flex;align-items:center;gap:7px;overflow-x:auto;padding:1px 0 9px;scrollbar-width:none}.chips::-webkit-scrollbar{display:none}.chip{flex:none;border:1px solid #eed5df;border-radius:999px;background:#fff9f9;color:#754858;min-height:39px;padding:8px 13px;font-size:12px}.chip.active{color:#fff;background:var(--rose2);border-color:var(--rose2)}.extras{display:flex;align-items:center;gap:16px;margin:2px 1px 14px;flex-wrap:wrap;font-size:12px}.small-check{display:inline-flex;align-items:center;gap:6px;color:#755865;cursor:pointer;user-select:none}.small-check input{accent-color:var(--rose);width:16px;height:16px}.count{color:#aa8a97;margin-left:auto;font-size:11px}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.gift{display:flex;flex-direction:column;min-width:0;background:var(--white);border:1px solid #f0dfe6;border-radius:17px;box-shadow:var(--shadow);overflow:hidden}.photo-btn{position:relative;border:0;display:block;padding:0;width:100%;text-align:left;background:var(--pale);overflow:hidden;aspect-ratio:4/3}.photo-btn img{width:100%;height:100%;object-fit:cover}.stamp{position:absolute;top:8px;left:8px;background:var(--taken);color:#fff;padding:5px 9px;border-radius:999px;font-size:11px;font-weight:700}.content{padding:10px;display:flex;flex:1;flex-direction:column;gap:6px}.item-head{display:flex;align-items:start;justify-content:space-between;gap:4px}.gift-name{border:0;padding:0;margin:0;background:none;text-align:left;color:var(--plum);font:500 15px/1.25 Georgia,'Times New Roman',serif;min-height:37px;word-break:normal;hyphens:auto}.heart{display:flex;align-items:center;justify-content:center;flex:none;width:32px;height:32px;border:0;background:transparent;color:#aa6982;font-size:24px;line-height:1}.heart.on{color:var(--rose)}.price{color:#a34e72;font:600 17px/1.3 Georgia,'Times New Roman',serif}.gift-action{margin-top:auto;background:var(--rose2);color:white;border:0;border-radius:12px;min-height:44px;padding:9px 6px;font-size:12px;font-weight:700;width:100%}.gift-action:hover:not(:disabled){background:var(--rose)}.gift-action:disabled{background:#ebe3e6;color:#725e69}.empty{text-align:center;color:var(--muted);padding:50px 10px;grid-column:1/-1;font-size:14px}.reset-search{border:1px solid var(--line);background:white;color:var(--rose);border-radius:10px;padding:9px 12px;margin-top:12px}
.overlay{display:none;position:fixed;inset:0;background:rgba(40,25,35,.48);z-index:20;align-items:center;justify-content:center;padding:20px}.overlay.show{display:flex}.dialog{width:min(100%,520px);max-height:min(91vh,890px);overflow-y:auto;overscroll-behavior:contain;background:#fffdfc;border-radius:23px;box-shadow:0 16px 70px rgba(40,20,32,.25);padding:21px 20px 24px}.sheet-handle{display:none}.dialog-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:15px;gap:12px}.back{display:inline-flex;gap:8px;align-items:center;padding:6px 2px;background:none;border:0;color:#654c59;font-size:14px}.x{width:36px;height:36px;border:0;border-radius:50%;background:var(--pale);color:var(--plum);font-size:22px;line-height:1}.dialog-title{font:500 28px/1.1 Georgia,'Times New Roman',serif;margin:0 0 13px;color:var(--plum)}.detail-image{aspect-ratio:4/3;object-fit:cover;width:100%;border-radius:16px}.detail-meta{display:flex;justify-content:space-between;gap:10px;align-items:center;font-size:12px;color:var(--muted);margin:15px 0 12px}.availability{font-size:11px;font-weight:700;border-radius:99px;padding:7px 10px;background:#e8f1e8;color:#486a53}.availability.booked{background:#efe4e8;color:#735160}.detail-price{color:var(--rose);font:500 26px Georgia,serif;margin:0 0 17px}.section-label{font-size:14px;font-weight:700;margin:0 0 6px}.bodycopy{color:#7a6570;line-height:1.55;font-size:14px;margin:0 0 17px}.shop-link{display:block;width:100%;border:1px solid #eedae3;background:#fbf0f4;border-radius:12px;padding:14px;text-align:left;color:#8d4f6b;font-weight:700;font-size:13px;margin:12px 0}.primary{border:0;width:100%;min-height:50px;border-radius:13px;background:var(--rose);color:#fff;font-weight:700;padding:12px;letter-spacing:.01em}.primary:disabled{background:#dcb7c6}.secondary{width:100%;min-height:45px;border-radius:12px;background:#fff;border:1px solid var(--line);color:#745566;font-weight:700;padding:10px}.reservation-product{display:flex;align-items:center;gap:12px;margin:9px 0 15px}.reservation-product img{width:80px;height:65px;object-fit:cover;border-radius:11px}.reservation-product strong{display:block;color:var(--plum);font-size:14px}.reservation-product .sum{margin-top:5px;color:var(--rose);font-weight:700;font-size:15px}.field-label{font-size:13px;font-weight:700;display:block;margin:18px 0 7px}.field{display:block;width:100%;font-size:16px;min-height:50px;padding:12px;border:1px solid #e8d1db;border-radius:12px;background:#fff}.infobox{background:#fdf3f7;border-radius:12px;padding:12px;color:#7f6070;font-size:12px;line-height:1.55;margin:15px 0}.error{min-height:18px;color:#b0354b;font-size:12px;margin:5px 0}.check-icon{display:flex;align-items:center;justify-content:center;background:#f4e4ec;color:var(--rose);width:57px;height:57px;border-radius:100%;font-size:30px;margin:8px auto 12px}.center{text-align:center}.success-title{font:500 25px Georgia,serif;color:var(--plum);margin:0 0 8px}.success-sub{font-size:13px;color:var(--muted);margin:0}.cancel-panel{background:#fff1f6;border-radius:13px;padding:14px;margin:18px 0 20px}.cancel-panel strong{font-size:13px;display:block;margin-bottom:8px}.cancel-panel p{color:#745c69;font-size:12px;line-height:1.5;margin:0 0 10px}.cancel-panel .primary{min-height:44px}.pay-title{font:500 24px Georgia,serif;margin:8px 0 7px}.table-caption{font-size:13px;color:#79616e;line-height:1.5;margin:0 0 15px}.payment-table{border:1px solid var(--line);border-radius:14px;overflow:hidden;margin:0 0 12px}.payment-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:11px 12px;border-bottom:1px solid var(--line)}.payment-row:last-child{border:0}.payment-row:nth-child(odd){background:#fff7fa}.payment-row div{min-width:0}.pay-key{font-size:11px;color:#987a89;margin-bottom:4px}.pay-value{font-size:13px;color:var(--plum);font-weight:700;overflow-wrap:anywhere}.copy-small{border:0;background:#f5e6ec;color:var(--rose);border-radius:8px;min-height:35px;min-width:35px;padding:6px;font-size:17px}.copy-all{background:#f4e7ec;border:0;color:#80546a;border-radius:11px;padding:12px;width:100%;font-weight:700;font-size:13px;margin:3px 0 14px}.more-actions{display:flex;flex-direction:column;gap:9px}.note{color:#99828d;font-size:11px;line-height:1.5;margin:12px 0 0}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%,20px);opacity:0;transition:.18s;pointer-events:none;background:#46323d;color:#fff;border-radius:50px;padding:11px 17px;z-index:50;font-size:12px;box-shadow:0 8px 26px #0003;white-space:nowrap}.toast.show{opacity:1;transform:translate(-50%,0)}.muted-btn{border:none;background:none;color:#87546a;text-decoration:underline;padding:6px;font-size:12px}body.dialog-open{overflow:hidden}
@media(min-width:700px){.head{padding-top:28px}.portrait{width:114px;height:114px}.heading{font-size:49px}.grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:17px}.gift-name{font-size:17px}.price{font-size:20px}.content{padding:15px}.chips{flex-wrap:wrap}.search{max-width:580px}.extras{max-width:580px}.dialog{padding:25px}}
@media(max-width:699px){.overlay{padding:0;align-items:flex-end}.overlay.detail-mode{align-items:stretch}.dialog{border-radius:25px 25px 0 0;width:100%;max-height:min(92dvh,92vh);padding:16px 18px calc(22px + env(safe-area-inset-bottom,0px));box-shadow:0 -10px 50px #0002}.overlay.detail-mode .dialog{border-radius:0;max-height:100dvh;min-height:100dvh;overflow:auto;padding-top:calc(18px + env(safe-area-inset-top,0px));}.sheet-handle{display:block;width:45px;height:5px;border-radius:99px;background:#ddc2ce;margin:0 auto 14px}.overlay.detail-mode .sheet-handle{display:none}.dialog-title{font-size:26px}}
@media(max-width:355px){.shell{padding-left:10px;padding-right:10px}.portrait{width:76px;height:76px}.heading{font-size:26px}.head{gap:9px}.grid{grid-template-columns:1fr}.gift-name{min-height:auto}.gift .content{padding:13px}.stamp{font-size:11px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important}}

/* Production refinements: real images/empty gifts, safe-area touch controls. */
.photo-btn {cursor:pointer}
.photo-btn img {position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.photo-btn img + .stamp {z-index:2}
.detail-visual {position:relative;aspect-ratio:4/3;background:#f7e9ef;border-radius:16px;overflow:hidden}
.detail-visual .detail-image {position:absolute;inset:0;border-radius:0;height:100%}
.gift-name {cursor:pointer}
.gift-action:disabled {cursor:not-allowed}
.shop-link {text-decoration:none}
.shop-link:hover {background:#f7e5eb}
.copy-small {cursor:pointer}
.copy-small:hover,.copy-all:hover {filter:brightness(.96)}
.api-error {background:#fff0f2;color:#9d2436;padding:16px;border-radius:13px;grid-column:1/-1}
.empty .reset-search {min-height:44px}
.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}
@media (max-width:699px){.dialog .primary{min-height:50px}.overlay.detail-mode .dialog{min-height:100dvh;max-height:100dvh}}

/* Small product thumbnail used by reservation bottom sheet. */
.reservation-thumb img {position:absolute;inset:0;width:100%;height:100%;object-fit:cover}


/* 4.1 design fixes: embedded portrait and boutique placeholders */
.portrait{display:block;object-fit:cover;flex:none;background:#f6eaef}
.fallback-boutique{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:linear-gradient(180deg,#f4e6ec 0%,#f0dfe7 100%);color:#a05a78;text-align:center;padding:14px;z-index:0}
.fallback-heart{display:flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:50%;background:rgba(255,255,255,.52);box-shadow:inset 0 0 0 1px rgba(163,78,114,.12);font:400 26px/1 Georgia,'Times New Roman',serif;color:#be7694}
.fallback-label{font:500 12px/1.3 Georgia,'Times New Roman',serif;letter-spacing:.01em;color:#8d6072;max-width:92px}
.photo-btn img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1;background:#f4e6ec}
.stamp{z-index:2}
.detail-visual .fallback-boutique{gap:12px}
.detail-visual .fallback-heart{width:70px;height:70px;font-size:34px}
.detail-visual .fallback-label{font-size:15px;max-width:none}
.reservation-thumb .fallback-boutique{gap:4px;padding:8px}
.reservation-thumb .fallback-heart{width:28px;height:28px;font-size:16px}
.reservation-thumb .fallback-label{font-size:9px;max-width:54px}


/* 4.2 hardening against stale placeholders and caches */
.photo-btn .fallback-emoji,.detail-visual .fallback-emoji,.reservation-thumb .fallback-emoji{display:none !important}
.photo-btn .fallback-boutique,.detail-visual .fallback-boutique,.reservation-thumb .fallback-boutique{font-size:initial !important}
.photo-btn:has(img[src=""]) .fallback-boutique{display:flex}
.photo-btn .fallback-boutique{position:absolute !important; inset:0 !important; display:flex !important; flex-direction:column !important; align-items:center !important; justify-content:center !important; gap:8px !important; background:linear-gradient(180deg,#f4e6ec 0%,#f0dfe7 100%) !important; color:#a05a78 !important; text-align:center !important; padding:14px !important; z-index:0 !important}
.photo-btn .fallback-heart,.detail-visual .fallback-heart,.reservation-thumb .fallback-heart{font-family:Georgia,"Times New Roman",serif !important}

/* 4.3: nenápadné tlačidlo pre správcu na konci zoznamu, bez zmeny pôvodného rozloženia */
.site-footer{display:flex;justify-content:center;padding:28px 0 4px}
.admin-link{display:inline-flex;align-items:center;justify-content:center;min-width:84px;min-height:42px;padding:8px 18px;border:1px solid #e9ccd7;border-radius:999px;background:#fffaf9;color:#86516a;text-decoration:none;font:600 13px/1.2 Arial,Helvetica,sans-serif;box-shadow:0 2px 8px rgba(95,53,71,.045)}
.admin-link:hover,.admin-link:focus-visible{background:#f7e9ef;border-color:#be90a3}

/* v4.4: image returned by giftPhoto() has no .detail-image class.
   In the modal it must fill the 4:3 wrapper, just as it fills the card. */
.detail-visual > img {
  display: block;
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  z-index: 1;
}
