/* ===== Chuyện Chúng Mình - luxury & minimalist (v43): ngà, be, champagne; Cormorant Garamond + Plus Jakarta Sans ===== */
/* avoid-ai-design-ignore-file: SD4 (chữ hoa giãn chữ cho tiêu đề mục, masthead, nút, nhãn số liệu là hướng "luxury & minimalist" người dùng chọn 21/10/2026, có ảnh tham chiếu) */
:root{
  /* ===== MÀU (không còn đỏ). Tên cũ giữ làm bí danh để CSS riêng của các trang chưa làm lại vẫn chạy ===== */
  --paper:#FBF8F3;            /* nền trang (ngà) */
  --surface:#FFFFFF;          /* mặt giấy: modal, thẻ, ô nhập, phong bì */
  --sand:#E8DDD3;             /* khối nền */
  --taupe:#D9C7BE;            /* khung, viền đậm, gạch chân ô nhập */
  --ink:#4A423C;              /* chữ: 9.3:1 trên ngà */
  --muted:#766A61;            /* chữ phụ: 4.95:1 trên ngà, 5.24 trên trắng */
  --art:#8A7F76;              /* nét vẽ, icon (đồ họa, không cho chữ) */
  --rule:#E6DED5;             /* đường kẻ */
  --champagne:#B39B82;        /* trái tim, dấu sáp, nhấn đồ họa (không cho chữ) */
  --champagne-ink:#7D6650;    /* nút chính (chữ trắng 5.4:1), chữ "chưa đọc" (5.1:1) */
  --champagne-deep:#6A5442;   /* hover nút chính */
  --scrim:43 35 29;           /* lớp phủ trên ảnh (rgb): ngoại lệ duy nhất của luật cấm gradient */
  --accent:var(--champagne); --accent-ink:var(--champagne-ink); --accent-deep:var(--champagne-deep);   /* bí danh cũ */
  --tint:var(--sand);         /* bí danh cũ (khối "một lý do") */
  --field:var(--surface);
  --field-line:var(--taupe);
  --contact:rgb(74 66 60 / .16);   /* bóng tiếp xúc sắc 2px, CHỈ cho đồ vật (phong bì, hũ, vòng quay) */
  --radius:2px;               /* ảnh nhỏ; nút và ô nhập vuông góc */
  --serif:'Cormorant Garamond',Georgia,serif;
  --sans:'Plus Jakarta Sans',system-ui,sans-serif;

  /* ===== THANG CHỮ: 6 bậc (390 -> 1440), mọi cỡ chữ lấy từ đây =====
     hiển thị 40 -> 104 | h1 30 -> 56 | h2 20 -> 30 | h3 17 -> 21 | thân 15 -> 16 | nhỏ 12 -> 13.
     Ô nhập luôn 16px (iOS phóng to trang khi chữ ô nhập < 16px). Chữ vẽ trong đồ vật SVG co giãn theo hình, không tính. */
  --t-display:clamp(40px,calc(16.23px + 6.095vw),104px);
  --t-h1:clamp(30px,calc(20.34px + 2.476vw),56px);
  --t-h2:clamp(20px,calc(16.29px + .952vw),30px);
  --t-h3:clamp(17px,calc(15.51px + .381vw),21px);
  --t-body:clamp(15px,calc(14.63px + .0952vw),16px);
  --t-small:clamp(12px,calc(11.63px + .0952vw),13px);

  /* ===== THANG KHOẢNG CÁCH ===== */
  --s1:4px; --s2:8px; --s3:16px; --s4:24px; --s5:40px; --s6:64px; --s7:96px; --s8:160px;
  --gap-sec:var(--s6);                    /* khoảng giữa các mục: 64 điện thoại, 160 từ 900 */

  --gut:var(--s4);                        /* lề trang + khe cột: 24 điện thoại, 40 từ 900 */
  --max:1200px;                           /* lưới 12 cột tối đa 1200 (gồm lề) */
  --bar-h:52px;                           /* thanh menu cố định (chưa tính phần tai thỏ) */

  /* ===== NHỊP CHUYỂN ĐỘNG (v44.8): common.js (motion, menu) đọc các biến này. Đổi tốc độ toàn site: CHỈ đổi --motion-scale.
     Giá trị gốc chọn để ở .75 ra đúng: chữ 450 | ảnh, bay ngang 600 | nét vẽ 700 | lệch lần lượt 50 | nền menu 200 | lệch trong
     hàng ảnh Album 40. Không theo hệ số (chậm có chủ đích): ảnh bìa, ảnh nền băng đếm ngược phóng chậm, đếm số liệu. ===== */
  --motion-scale:.75;
  --motion-fast:calc(600ms * var(--motion-scale));      /* chữ, dòng danh sách, phong bì nhích lên */
  --motion-base:calc(800ms * var(--motion-scale));      /* ảnh mở rèm, bay ngang, hàng ảnh Album */
  --motion-slow:calc(933ms * var(--motion-scale));      /* nét vẽ tự vẽ, ngày + tên trên ảnh bìa */
  --motion-stagger:calc(67ms * var(--motion-scale));    /* lệch giữa các phần tử cùng nhóm */
  --motion-menu:calc(267ms * var(--motion-scale));      /* nền menu mở */
  --motion-stagger-row:calc(53ms * var(--motion-scale));   /* lệch giữa các ảnh trong một hàng Album */
  --bar:calc(var(--bar-h) + env(safe-area-inset-top));
}
@media(min-width:900px){ :root{ --gut:var(--s5); --gap-sec:var(--s8) } }

*{margin:0;padding:0;box-sizing:border-box}
body{font-family:var(--sans);font-size:var(--t-body);font-weight:300;line-height:1.7;color:var(--ink);
  background:var(--paper);overflow-x:hidden;font-variant-numeric:lining-nums tabular-nums;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
/* số lining + tabular kế thừa từ body. KHÔNG dùng thuộc tính gộp font (nó đặt lại font-variant-numeric về số kiểu cổ của
   Cormorant): luôn viết font-family / font-size / font-weight / line-height riêng. Ô nhập, nút: trình duyệt tự gán font
   riêng -> cho kế thừa lại. */
button,input,select,textarea{font-variant-numeric:inherit}
/* thanh cuộn của hộp, tấm, danh sách cuộn riêng: mảnh, màu khung be (không dùng thanh xám mặc định) */
@supports not selector(::-webkit-scrollbar){ .modal,.menu-sheet,.sheet,.picker,.qlog{scrollbar-width:thin;scrollbar-color:var(--taupe) transparent} }
.modal::-webkit-scrollbar,.menu-sheet::-webkit-scrollbar,.sheet::-webkit-scrollbar,.picker::-webkit-scrollbar,.qlog::-webkit-scrollbar{width:6px;height:6px}
.modal::-webkit-scrollbar-thumb,.menu-sheet::-webkit-scrollbar-thumb,.sheet::-webkit-scrollbar-thumb,.picker::-webkit-scrollbar-thumb,.qlog::-webkit-scrollbar-thumb{background:var(--taupe)}
.modal::-webkit-scrollbar-track,.menu-sheet::-webkit-scrollbar-track,.sheet::-webkit-scrollbar-track,.picker::-webkit-scrollbar-track,.qlog::-webkit-scrollbar-track{background:transparent}
.modal::-webkit-scrollbar-button,.menu-sheet::-webkit-scrollbar-button,.sheet::-webkit-scrollbar-button,.picker::-webkit-scrollbar-button,.qlog::-webkit-scrollbar-button{display:none}
body:not(.ready) .site{display:none}
.site{overflow-x:clip;padding-top:var(--bar)}         /* chừa sẵn chỗ cho thanh menu cố định: trang không đổi chiều cao khi JS chạy */
html{scroll-padding-top:calc(var(--bar) + var(--s3))}   /* focus bằng bàn phím không lọt dưới thanh menu */
::selection{background:var(--ink);color:var(--paper)}
img{display:block;max-width:100%}
a{color:inherit}
b,strong{font-weight:500}
:focus-visible{outline:1px solid var(--ink);outline-offset:4px}
.wrap{max-width:var(--max);margin:0 auto;padding:0 var(--gut)}

/* ===== Chữ dùng chung =====
   Cormorant Garamond: số mặc định là số kiểu cổ -> body bật lining-nums tabular-nums cho mọi chỗ (số liệu, ngày, bộ đếm).
   Chữ hoa giãn chữ chỉ là kiểu hiển thị (text-transform); chữ nguồn theo quy tắc câu chữ. Chữ hoa nhiều dòng: line-height >= 1.12. */
.kicker{font-weight:400;font-size:var(--t-small);line-height:1.5;font-family:var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.label{font-family:var(--sans);font-size:var(--t-small);font-weight:400;color:var(--muted);line-height:1.5}
.sec-head{border-top:1px solid var(--rule);padding-top:var(--s3);margin-bottom:var(--s4)}
.textlink{background:none;border:0;padding:0;font:inherit;color:inherit;text-transform:inherit;letter-spacing:inherit;cursor:pointer;text-decoration:none;
  text-decoration-thickness:1px;text-underline-offset:4px}
.textlink:hover,.textlink:focus-visible{text-decoration-line:underline}
.danger{font-weight:500}                                    /* chữ xóa ở bước xác nhận: đậm hơn, không đổi màu */
/* link chữ hoa nhỏ có gạch chân be (vd "XEM ALBUM") */
.more{display:inline-block;font-weight:400;font-size:var(--t-small);line-height:1.4;font-family:var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--ink);
  text-decoration:none;border:0;border-bottom:1px solid var(--taupe);padding:0 0 var(--s1);background:none;cursor:pointer}
.more:hover{border-bottom-color:var(--ink)}

/* ===== Hình vẽ nét đơn (SVG <use href="#d-…">, ký hiệu nằm trong từng trang): nét 1px màu --art, không tô ===== */
.art{fill:none;stroke:var(--art);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}
svg.draw{display:block;width:40px;height:40px;overflow:visible}

/* ===== Tiêu đề mục: hình vẽ phía trên, chữ hoa giãn chữ, căn giữa ===== */
.sec{padding-top:var(--gap-sec)}
.sec-title{display:flex;flex-direction:column;align-items:center;gap:var(--s3);margin-bottom:var(--s5);text-align:center}
.sec-title h2{font-weight:300;font-size:var(--t-h2);line-height:1.3;font-family:var(--serif);text-transform:uppercase;letter-spacing:.14em}
@media(min-width:900px){ .sec-title{margin-bottom:var(--s6)} }

/* ===== LƯỚI 12 CỘT (từ 900px; dưới đó một cột theo mép .wrap) ===== */
@media(min-width:900px){
  .g12{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gut)}
  .g12 > .c-side{grid-column:1 / span 5}
  .g12 > .c-main{grid-column:6 / span 7}
  .g12 > .c-full{grid-column:1 / -1}
}

/* ===== Dải sau thanh trạng thái (PWA trên iPhone, status-bar-style black-translucent) =====
   Nội dung tràn dưới giờ/pin (chữ trắng): nền ngà thì không đọc được -> dải champagne đậm cố định, cao đúng
   env(safe-area-inset-top). Ngoài app (Safari) và desktop inset = 0 nên không hiện. Trang chủ: ẩn khi còn ảnh bìa,
   index đặt --band-o theo cuộn. Menu toàn màn, màn đăng nhập: luôn hiện; ảnh lớn (nền tối): ẩn. */
body::before{content:"";position:fixed;left:0;right:0;top:0;z-index:99;height:env(safe-area-inset-top);
  background:var(--champagne-ink);opacity:var(--band-o,1);pointer-events:none;transition:opacity .2s}
body:has(.menu-sheet:not([hidden]))::before,body:has(.auth:not(.hide))::before{opacity:1}
body:has(.lightbox:not([hidden]))::before{opacity:0}

/* ===== Thanh menu cố định (v44.6): cao 52px + phần tai thỏ, luôn hiện =====
   common.js (mountUserChip -> mountNav) chèn <nav class="site-nav">, cụm tài khoản .acct và nút "Menu". Dưới 1200: tên site
   giữa thanh, nút Menu bên phải, nav + tài khoản trong tấm danh sách (.menu-sheet, ngoài .site). Từ 1200: một hàng, tên site
   trái, các trang giữa, tài khoản phải (6 tên trang + tên site + tài khoản không đủ chỗ một hàng 52px khi tên site ở giữa).
   Nền ngà + đường kẻ nằm ở ::before (đổi bằng opacity). Trang con: .site chừa sẵn chỗ (padding-top = --bar).
   Trang chủ: .on-photo = trong suốt, chữ trắng, trên ảnh bìa; index bỏ .on-photo khi mép dưới ảnh bìa lên tới đáy thanh.
   Dải sau thanh trạng thái (body::before, z 99) phủ đúng phần tai thỏ phía trên thanh: không chồng, không hở. */
.masthead{position:fixed;left:0;right:0;top:0;z-index:70;height:var(--bar);padding:env(safe-area-inset-top) var(--bar-x) 0;
  --bar-x:max(var(--gut),calc(50% - var(--max) / 2 + var(--gut)));
  display:flex;align-items:center;justify-content:center;color:var(--ink)}
.masthead::before{content:"";position:absolute;inset:0;z-index:-1;background:var(--paper);border-bottom:1px solid var(--rule);transition:opacity .2s}
.brand{font-weight:400;font-size:var(--t-small);line-height:1.2;font-family:var(--sans);text-transform:uppercase;letter-spacing:.24em;color:inherit;white-space:nowrap;text-decoration:none}
.site-nav{display:none;justify-content:center;gap:var(--s3)}   /* tên trang tiếng Anh: thanh một hàng từ 1200 */
.site-nav a,.menu-sheet nav a{white-space:nowrap}
.site-nav a{font-weight:400;font-size:12px;line-height:1.6;font-family:var(--sans);letter-spacing:.12em;text-transform:uppercase;text-decoration:none;color:var(--muted)}
.site-nav a:hover,.site-nav a[aria-current]{color:var(--ink)}
#userChip{display:none!important}                    /* giữ cho mã cũ (tên, nút đăng xuất); hiển thị qua .acct / tấm danh sách */
/* nút mở menu: hai vạch mảnh 20px (nét 1px màu chữ), vùng chạm 44px; mép phải của vạch thẳng mép lưới. Khi mở, dấu X của
   tấm danh sách nằm đúng chỗ này và hai vạch xoay về ±45° (common.js) */
.menu-btn{position:absolute;right:calc(var(--bar-x) - 12px);top:env(safe-area-inset-top);width:44px;height:var(--bar-h);padding:0;
  background:none;border:0;color:inherit;cursor:pointer}
.menu-btn span,.ms-close span{position:absolute;left:12px;right:12px;top:50%;height:1px;margin-top:-.5px;background:currentColor}
.menu-btn span:first-child{translate:0 -3.5px}
.menu-btn span:last-child{translate:0 3.5px}
.acct{display:none}
@media(min-width:1200px){
  .masthead{display:grid;grid-template-columns:auto minmax(0,1fr) auto;column-gap:var(--s4)}
  .site-nav{display:flex}
  .menu-btn{display:none}
  .acct{display:flex;gap:var(--s3);white-space:nowrap;
    font-weight:400;font-size:12px;line-height:1.6;font-family:var(--sans);letter-spacing:.06em;color:var(--muted)}
  .acct .who{color:var(--ink)}
}
/* "đang kết nối lại", "có bản mới": mẩu nhỏ ngay dưới thanh, không đẩy tên site lệch giữa */
.masthead > .live-dot,.masthead > .update-note{position:absolute;top:100%;left:50%;transform:translateX(-50%);margin-top:var(--s2);white-space:nowrap;
  background:var(--paper);color:var(--ink);border:1px solid var(--rule);padding:var(--s1) var(--s2)}
.masthead.on-photo{color:#fff}
.masthead.on-photo::before{opacity:0}
.masthead.on-photo .site-nav a,.masthead.on-photo .acct{color:rgb(255 255 255 / .86)}
.masthead.on-photo .site-nav a:hover,.masthead.on-photo .acct .who{color:#fff}
.masthead.on-photo :focus-visible{outline-color:#fff}
/* tấm danh sách (dưới 900) */
.menu-sheet{position:fixed;inset:0;z-index:96;background:var(--paper);display:flex;flex-direction:column;align-items:center;
  padding:env(safe-area-inset-top) var(--gut) max(var(--s5),env(safe-area-inset-bottom));overflow:auto}
.menu-sheet[hidden]{display:none}
/* hàng trên cùng cao đúng bằng thanh menu: tên site và dấu X nằm đúng chỗ tên site và nút menu */
.menu-sheet .ms-top{position:relative;width:100%;height:var(--bar-h);flex:none;display:flex;align-items:center;justify-content:center}
.menu-sheet .ms-close{position:absolute;right:-12px;top:0;width:44px;height:100%;padding:0;background:none;border:0;color:var(--ink);cursor:pointer}
.ms-close span:first-child{rotate:45deg}
.ms-close span:last-child{rotate:-45deg}
.menu-sheet nav{display:flex;flex-direction:column;align-items:center;gap:var(--s4);padding:var(--s6) 0 var(--s5)}
.menu-sheet nav a{display:flex;flex-direction:column;align-items:center;gap:var(--s2);font-weight:300;font-size:var(--t-h2);line-height:1.3;font-family:var(--serif);
  text-transform:uppercase;letter-spacing:.14em;text-decoration:none;color:var(--muted)}
/* trang hiện tại: màu chữ đậm + vạch champagne nhỏ dưới chữ; các mục khác chữ phụ */
.menu-sheet nav a[aria-current]{color:var(--ink);font-weight:400}
.menu-sheet nav a[aria-current]::after{content:"";width:32px;height:1px;background:var(--champagne-ink)}
.menu-sheet .ms-acct{margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:var(--s3);padding-top:var(--s5);
  border-top:1px solid var(--rule);width:100%;font-weight:400;font-size:var(--t-small);line-height:1.5;font-family:var(--sans);color:var(--muted)}
.menu-sheet .ms-acct .row{display:flex;gap:var(--s5)}
.menu-sheet .ms-acct .textlink{font-weight:400;font-size:12px;line-height:1.4;font-family:var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--ink)}

/* ===== Nút: .btn = hành động chính (champagne đậm, một nút mỗi trang); .btn.ghost = nút phụ (viền chữ) ===== */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);min-height:48px;
  background:var(--champagne-ink);color:#fff;border:1px solid var(--champagne-ink);border-radius:0;
  padding:var(--s2) var(--s5);font-weight:400;font-size:var(--t-small);line-height:1.4;font-family:var(--sans);letter-spacing:.2em;text-transform:uppercase;text-align:center;cursor:pointer;
  transition:background-color .3s,border-color .3s}
.btn:hover{background:var(--champagne-deep);border-color:var(--champagne-deep)}
.btn:disabled{opacity:.6;cursor:progress}
.btn.ghost{background:transparent;color:var(--ink);border-color:var(--ink)}
.btn.ghost:hover{background:var(--surface)}

/* ===== Ô nhập: gạch chân be, focus gạch chân màu chữ; ô nhiều dòng có khung mảnh ===== */
.field{display:block;margin-top:var(--s4)}
.field > .label{display:block;margin-bottom:var(--s1)}
input,textarea,select{width:100%;border:0;border-bottom:1px solid var(--field-line);border-radius:0;background:transparent;
  padding:var(--s2) 0;min-height:48px;font-weight:300;font-size:16px;line-height:1.4;font-family:var(--sans);color:var(--ink);outline:none;-webkit-appearance:none;appearance:none}
textarea{display:block;resize:vertical;line-height:1.6}              /* cùng kiểu gạch chân với ô một dòng */
input::placeholder,textarea::placeholder{color:var(--muted)}
select{padding-right:var(--s5);cursor:pointer;background:transparent url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%23766A61' stroke-width='1'/%3E%3C/svg%3E") no-repeat right 4px center/12px 8px}
input:focus,textarea:focus,select:focus{border-color:var(--ink)}
input:focus-visible,textarea:focus-visible,select:focus-visible{outline:none}
input::-webkit-date-and-time-value{text-align:left}
.err{color:var(--ink);font-size:var(--t-small);margin-top:var(--s3);min-height:20px}
.hint{font-size:var(--t-small);color:var(--muted);line-height:1.6;margin-top:var(--s2)}

/* ===== Modal: tờ giấy trắng, viền mảnh, góc vuông; nền sau tối đặc (không blur) ===== */
.modal-bg{position:fixed;inset:0;background:rgb(var(--scrim) / .62);z-index:100;display:none;
  align-items:center;justify-content:center;padding:calc(var(--gut) + env(safe-area-inset-top)) var(--gut) calc(var(--gut) + env(safe-area-inset-bottom))}
.modal-bg.show{display:flex;animation:fadeIn .3s}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.modal{--mx:var(--s4);background:var(--surface);border:1px solid var(--rule);border-radius:0;
  padding:var(--s5) var(--mx) var(--s4);max-width:480px;width:100%;max-height:min(88vh,100%);overflow:auto}
@media(min-width:600px){ .modal{--mx:var(--s5);padding:var(--s5)} }
.modal.wide{max-width:680px}
.modal h3{font-weight:300;font-size:var(--t-h2);line-height:1.3;font-family:var(--serif);text-transform:uppercase;letter-spacing:.14em;margin-bottom:var(--s2);text-align:center}
.modal h3[tabindex]{outline:none}
.modal .actions{display:flex;gap:var(--s2);justify-content:flex-end;flex-wrap:wrap;margin-top:var(--s5)}
.modal .actions .left{margin-right:auto;align-self:center}
/* khối riêng trong hộp (đổi mật khẩu, thông báo): đường kẻ + tiêu đề chữ hoa nhỏ, nút riêng của khối */
.modal .block{margin-top:var(--s6);padding-top:var(--s4);border-top:1px solid var(--rule)}
.modal h4.sec-head{border:0;padding:0;margin:0;font-weight:400;font-size:var(--t-small);line-height:1.5;font-family:var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--ink)}
/* nút lưu của hộp: cuối hộp, dính đáy khi cuộn */
.modal:has(> .actions.sticky){padding-bottom:0}
.modal .actions.sticky{position:sticky;bottom:0;z-index:1;align-items:center;background:var(--surface);border-top:1px solid var(--rule);
  margin:var(--s5) calc(var(--mx) * -1) 0;padding:var(--s3) var(--mx) max(var(--s3),env(safe-area-inset-bottom))}
.modal .actions.sticky .btn{flex:1 1 auto;padding-inline:var(--s3)}
.modal .block .actions{margin-top:var(--s4)}
.modal .actions.sticky .err{flex-basis:100%;margin:0;min-height:0;text-align:right}
.modal .actions.sticky .err:empty{display:none}

/* ===== Đăng nhập / thiết lập: trang công khai, không ảnh, không tên hai người; tên site + form căn giữa ===== */
.auth{position:fixed;inset:0;z-index:90;overflow:auto;background:var(--paper);transition:opacity .6s,visibility .6s}
.auth.hide{opacity:0;visibility:hidden;pointer-events:none}
.auth-inner{min-height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;
  padding-top:calc(var(--s5) + env(safe-area-inset-top));padding-bottom:max(var(--s5),env(safe-area-inset-bottom))}
.auth-inner > *{width:100%;max-width:380px}
.auth svg.draw{margin:0 auto var(--s3)}
.auth .brand{display:block;font-weight:300;font-size:var(--t-h3);line-height:1.2;font-family:var(--serif);letter-spacing:.2em}
.auth h1{font-weight:300;font-size:var(--t-h2);line-height:1.3;font-family:var(--serif);text-transform:uppercase;letter-spacing:.14em;margin:var(--s5) 0 var(--s2)}
.auth .auth-form{text-align:left}
.auth .btn{margin-top:var(--s5);width:100%}
.auth .err{text-align:center}
.auth .note{font-size:var(--t-small);color:var(--muted);line-height:1.6;text-align:center}
.auth .setup-half{border-top:1px solid var(--rule);margin-top:var(--s5);padding-top:var(--s3)}
.auth .setup-half > .label{color:var(--ink);text-transform:uppercase;letter-spacing:.2em}

/* ===================================================================
   THÀNH PHẦN DÙNG CHUNG
   =================================================================== */
/* Tiêu đề trang con: căn giữa, chữ hoa mảnh, hình vẽ phía trên (trang chưa làm lại: hình cành hoa chung qua ::before) */
.page-head{padding:var(--s6) 0 0;text-align:center}
.page-head::before{content:"";display:block;width:40px;height:40px;margin:0 auto var(--s3);
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 120' fill='none' stroke='%238A7F76' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M16 108c24-20 46-44 64-70M38 89c-5-7-5-16 1-21 5 6 5 15-1 21zM52 74c7-4 16-4 21 2-7 4-16 3-21-2zM64 58c-4-7-2-16 4-20 4 7 2 15-4 20zM72 44c6-8 14-12 22-12M96 31c-4-3-4-8 0-10 3 3 3 7 0 10z'/%3E%3Ccircle cx='84' cy='30' r='7'/%3E%3C/svg%3E") no-repeat center/contain}
.page-head h1{font-weight:300;font-size:var(--t-h1);line-height:1.15;font-family:var(--serif);text-transform:uppercase;letter-spacing:.12em}
.lede{font-style:italic;font-weight:300;font-size:var(--t-h3);line-height:1.5;font-family:var(--serif);color:var(--muted);margin-top:var(--s2)}
.tools{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:var(--s4);margin-top:var(--s5);font-size:var(--t-body)}

/* Danh sách kẻ dòng: đường kẻ trên mỗi dòng + dưới dòng cuối */
.rows{list-style:none}
.rows > li{border-top:1px solid var(--rule)}
.rows > li:last-child{border-bottom:1px solid var(--rule)}

/* Trạng thái trống */
.empty-line{font-style:italic;font-weight:300;font-size:var(--t-h3);line-height:1.6;font-family:var(--serif);color:var(--muted)}

/* Khối "một lý do" (trang chưa làm lại) */
.reason{background:var(--sand);padding:var(--s4)}
.reason q{display:block;font-style:italic;font-weight:300;font-size:var(--t-h3);line-height:1.5;font-family:var(--serif);quotes:"“" "”"}
.reason figcaption{margin-top:var(--s2)}

/* Nhãn cảnh báo nhỏ (vd "ngày cần kiểm tra") */
.flag{font-size:var(--t-small);line-height:1.5;color:var(--ink)}

/* Nút icon vuông (SVG nét mảnh) */
.icon-btn{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;padding:0;cursor:pointer;
  border:1px solid var(--field-line);border-radius:0;background:var(--surface);color:var(--ink)}
.icon-btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
.icon-btn:hover{border-color:var(--ink)}
.icon-btn:disabled{opacity:.35;cursor:default;border-color:var(--field-line)}

/* Checkbox / radio: ô gốc của hệ điều hành (trang sau thay bằng kiểu riêng) */
input[type=checkbox]{width:20px;height:20px;min-height:0;padding:0;margin:0;border:0;-webkit-appearance:checkbox;appearance:auto;accent-color:var(--champagne-ink)}
input[type=radio]{width:18px;height:18px;min-height:0;padding:0;border:0;flex:none;-webkit-appearance:radio;appearance:auto;accent-color:var(--champagne-ink)}
.choice{display:flex;gap:var(--s2);align-items:flex-start;margin-top:var(--s3);cursor:pointer}
.choice input[type=radio]{margin-top:var(--s1)}
.choice .label{color:var(--ink);font-size:var(--t-body)}

/* Bảng tiến trình (dính đáy trên điện thoại, góc phải dưới trên màn rộng) */
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:85;background:var(--surface);border-top:1px solid var(--rule);
  max-height:62svh;overflow:auto;padding:var(--s3) var(--gut) max(var(--s3),env(safe-area-inset-bottom))}
@media(min-width:700px){ .sheet{left:auto;right:var(--s4);bottom:var(--s4);width:420px;border:1px solid var(--rule)} }
.sheet-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s3)}
.sheet-head b{font-weight:300;font-size:var(--t-h3);line-height:1.2;font-family:var(--serif);text-transform:uppercase;letter-spacing:.12em}
.sheet-total{font-size:var(--t-small);color:var(--muted)}
.bar{height:1px;background:var(--rule);margin:var(--s3) 0 var(--s1)}
.bar i{display:block;height:100%;width:0;background:var(--ink);transition:width .3s}
.sheet-rows{list-style:none}
.sheet-rows li{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:var(--s3);padding:var(--s2) 0;border-bottom:1px solid var(--rule);font-size:var(--t-small)}
.sheet-rows .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sheet-rows .st{text-align:right;color:var(--muted)}
.sheet-rows .st.ok,.sheet-rows .st.bad,.sheet-rows .warn{color:var(--ink)}
.sheet-rows .warn{grid-column:1 / -1}
.sheet-rows .st .textlink{margin-left:var(--s2)}
.sheet-end .textlink,.sheet-rows .textlink{text-decoration-line:underline}
.sheet-end{margin-top:var(--s3);font-size:var(--t-small);display:flex;flex-direction:column;gap:var(--s2);align-items:flex-start}

/* Xem ảnh lớn (js/viewer.js): nền tối đặc (không blur) là lớp riêng .lb-bg để mờ theo khoảng kéo; ảnh trong ba khung
   .lb-slide (trước, đang xem, sau) dịch bằng transform; .lb-clip = khung cắt của ảnh (FLIP về ô trong lưới).
   Cử chỉ do JS xử lý hết: không cuộn trang phía sau, không kéo tải lại, không chọn chữ */
.lightbox{position:fixed;inset:0;z-index:95;color:var(--paper);display:grid;grid-template-rows:minmax(0,1fr) auto;
  touch-action:none;overscroll-behavior:none;user-select:none;-webkit-user-select:none}
.lightbox[hidden]{display:none}
.lb-bg{position:absolute;inset:0;background:#1f1a16}
.lb-stage{position:relative;overflow:hidden;padding:max(var(--s3),env(safe-area-inset-top)) var(--s3) 0;min-height:0}
.lb-slide{position:absolute;will-change:transform}
.lb-clip{position:absolute;overflow:hidden;transform-origin:0 0}
.lb-clip > img,.lb-clip > video{display:block;width:100%;height:100%;object-fit:cover;transform-origin:50% 50%;-webkit-user-drag:none}
.lb-clip.fit > img,.lb-clip.fit > video{object-fit:contain}
.lb-info{position:relative;padding-top:var(--s3);padding-bottom:max(var(--s3),env(safe-area-inset-bottom));width:100%;text-align:center;transition:opacity .2s}
.lightbox.dragging .lb-info{opacity:0}                    /* chú thích, nút mờ đi khi đang kéo, hiện lại khi dừng */
.lightbox.zoomed .lb-info{opacity:0;pointer-events:none}  /* đang phóng to (viewer.js): ẩn chú thích + nút, về 1 thì hiện lại */
@media(hover:hover) and (pointer:fine){ .lightbox.zoomed .lb-clip{cursor:grab} .lightbox.zoomed.dragging .lb-clip{cursor:grabbing} }
@media(hover:none) and (pointer:coarse){ .lb-step{display:none} }   /* cảm ứng: vuốt thay nút trước/sau */
.lb-cap{font-style:italic;font-weight:300;font-size:var(--t-h3);line-height:1.4;font-family:var(--serif)}
.lb-meta{font-size:var(--t-small);opacity:.8;margin-top:var(--s1)}
.lb-note{font-size:var(--t-small);margin-top:var(--s1)}
.lb-tools{display:flex;gap:var(--s4);flex-wrap:wrap;justify-content:center;margin-top:var(--s3);font-weight:400;font-size:12px;line-height:1.4;font-family:var(--sans);letter-spacing:.2em;text-transform:uppercase}
.lightbox .textlink{color:var(--paper)}
.lightbox .textlink:disabled{opacity:.35;cursor:default;text-decoration-line:none}
.lightbox .lb-note .textlink{color:inherit;margin-left:var(--s2);text-decoration-line:underline}
.lightbox :focus-visible{outline-color:var(--paper)}

/* Nút lên đầu trang (common.js): tròn 44px, nền ngà, viền màu đường kẻ, mũi tên nét đơn màu chữ phụ; hiện khi đã cuộn
   quá 1,5 màn hình (mờ dần + nhích lên 8px). Ẩn khi ảnh lớn, menu, chế độ sửa, bảng tải lên đang mở */
.to-top{position:fixed;right:calc(20px + env(safe-area-inset-right));bottom:calc(20px + env(safe-area-inset-bottom));z-index:65;
  width:44px;height:44px;display:flex;align-items:center;justify-content:center;padding:0;cursor:pointer;
  background:var(--paper);border:1px solid var(--rule);border-radius:50%;color:var(--muted);
  opacity:0;transform:translateY(8px);visibility:hidden;transition:opacity .3s,transform .3s cubic-bezier(.16,1,.3,1),visibility 0s .3s}
.to-top svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:round;stroke-linejoin:round}
.to-top:hover{color:var(--ink)}
.to-top.show{opacity:1;transform:none;visibility:visible;transition:opacity .3s,transform .3s cubic-bezier(.16,1,.3,1),visibility 0s}
body.editing .to-top.show,body.uploading .to-top.show,
body:has(.lightbox:not([hidden]),.menu-sheet:not([hidden]),.sheet:not([hidden]),.modal-bg.show) .to-top.show{opacity:0;transform:translateY(8px);visibility:hidden;
  transition:opacity .3s,transform .3s,visibility 0s .3s}

@media(min-width:900px){
  .page-head{padding-top:var(--s7)}
  .lb-stage{padding:var(--s5) var(--s5) 0}
}

/* ===== Chuyển động khi vào khung nhìn (v44.7, common.js motion): mỗi loại nội dung một hiệu ứng, chạy MỘT lần =====
   Phần tử mang data-m="<loại>"; motion.scan() gắn .m-wait (trạng thái chờ, khớp khung hình đầu của hiệu ứng) rồi theo dõi
   bằng IntersectionObserver; vào khung nhìn thì bỏ .m-wait và chạy Web Animations (fill backwards, xong không để lại gì).
   Đang khôi phục cuộn / bfcache / overlay đang mở / giảm chuyển động: hiện ngay, không có .m-wait. Bảng loại: CLAUDE.md. */
.m-wait:is([data-m=rise],[data-m=hero],[data-m=left],[data-m=right],[data-m=slide],[data-m=count]),
.m-wait[data-m=title] > *,.m-wait[data-m=strip] > *,.m-wait[data-m=row] > *,.m-wait[data-m=arch] .arch-line,.m-wait[data-m=card] :is(.ct,.cm){opacity:0}
.m-wait[data-m=img],.m-wait[data-m=arch] .arch-ph,.m-wait[data-m=card] .pic{clip-path:inset(100% 0 0 0)}
.m-wait[data-m=zoom]{scale:1.08}

/* ===== Khung ảnh (v44.7): ảnh thường bo 4px; ảnh nổi bật (giữa mục The Two of Us, thẻ Our Moments) khung vòm =====
   .arch đặt bề rộng + tỉ lệ dọc; đỉnh nửa tròn theo bề rộng (50cqw, .arch là container) và đáy 4px; .arch-line là đường
   vòm 1px màu đường kẻ cách ảnh 10px (đáy 14px để đồng tâm). Mở rèm cắt .arch-ph: bo góc của .arch-ph vẫn giữ */
.arch{position:relative;display:block;container-type:inline-size;aspect-ratio:4/5}
.arch-ph{position:absolute;inset:0;overflow:hidden;background:var(--sand);border-radius:50cqw 50cqw 4px 4px}
.arch-ph img{width:100%;height:100%;object-fit:cover}
.arch-line{position:absolute;inset:-10px;border:1px solid var(--rule);border-radius:calc(50cqw + 10px) calc(50cqw + 10px) 14px 14px;pointer-events:none}

/* khi đang khôi phục vị trí cuộn: ẩn nội dung rồi hiện ra đúng chỗ */
.site{transition:opacity .2s ease}
html.restoring .site{opacity:0}

/* ===== Lenis ===== */
html.lenis,html.lenis body{height:auto}
.lenis.lenis-smooth{scroll-behavior:auto!important}
.lenis:not(.lenis-autoToggle).lenis-stopped{overflow:clip}
.lenis [data-lenis-prevent]{overscroll-behavior:contain}
.lenis.lenis-smooth iframe{pointer-events:none}

/* ===== Chân trang: căn giữa ===== */
.colophon{padding-top:var(--gap-sec);padding-bottom:max(var(--s5),env(safe-area-inset-bottom));text-align:center}
.colophon-rule{display:flex;flex-direction:column;align-items:center;gap:var(--s2);border-top:1px solid var(--rule);padding-top:var(--s5)}
.colophon .brand{font-weight:300;font-size:var(--t-h3);line-height:1.2;font-family:var(--serif);letter-spacing:.2em}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .hero{transform:none!important}   /* tắt parallax của common.js */
}

/* ===== Cập nhật thời gian thực: chấm "đang kết nối lại" ở masthead, phần tử bị người kia xóa mờ đi rồi mất ===== */
.live-dot{display:inline-flex;align-items:center;gap:var(--s2)}
.live-dot[hidden]{display:none}
.live-dot::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;animation:livePulse 1.6s ease-in-out infinite}
@keyframes livePulse{50%{opacity:.35}}
.live-out{opacity:0!important;transition:opacity .3s ease!important;pointer-events:none}
@media(prefers-reduced-motion:reduce){ .live-dot::before{animation:none} }
.update-note{font-size:var(--t-small);color:inherit}                          /* "có bản mới, chạm để tải lại" ở masthead */
.notify{margin-top:var(--s5)}
.notify h4{font-weight:400}
.notify .hint{white-space:pre-line}
