/* Shared DUV lettering. Source: Lettering / Sistema tipografico v01, 29-10-2026.
   Responsive roles and active component mapping, audited against the manual. */
:root {
  --duv-font-ui:'Segoe UI',Arial,sans-serif;
  --duv-font-note:'Segoe Print','Bradley Hand',cursive;
  --duv-weight-light:300;
  --duv-weight-ambient:350;
  --duv-weight-body:400;
  --duv-weight-news:420;
  --duv-weight-subtitle:500;
  --duv-weight-title:550;
  --duv-weight-action:600;
  --duv-weight-emphasis:700;
  --duv-leading-copy:1.6;
  --duv-leading-note:1.5;
  --duv-tracking-label:.12em;
}
body {font-family:var(--duv-font-ui);font-weight:var(--duv-weight-body);font-kerning:normal;}
button,input,textarea,select,option {font-family:var(--duv-font-ui);}
button {font-weight:var(--duv-weight-action);}
input,textarea,select {font-weight:var(--duv-weight-body);}
button::placeholder,input::placeholder,textarea::placeholder {font-family:inherit;}
time,.news-position,.weather-temp,.weather-stats,.header-build {font-variant-numeric:tabular-nums;}
.team .tutorial-note,.team .tutorial-note strong,.team .tutorial-note p {font-family:var(--duv-font-note);}
/* Reusable roles for future pages, dialogs and content. No geometry or forced casing. */
.duv-type-title {font-family:var(--duv-font-ui);font-size:clamp(22px,1.6vw,30px);font-weight:var(--duv-weight-title);line-height:1.1;letter-spacing:-.03em;text-wrap:balance;}
.duv-type-news-title {font-family:var(--duv-font-ui);font-size:clamp(23px,3.7vh,43px);font-weight:var(--duv-weight-news);line-height:1.13;letter-spacing:-.025em;text-wrap:balance;}
.duv-type-subtitle {font-family:var(--duv-font-ui);font-size:clamp(18px,1.8vw,26px);font-weight:var(--duv-weight-subtitle);line-height:1.2;text-wrap:balance;}
.duv-type-copy {font-family:var(--duv-font-ui);font-size:clamp(13px,1.1vw,18px);font-weight:var(--duv-weight-body);line-height:var(--duv-leading-copy);overflow-wrap:break-word;}
.duv-type-label {font-family:var(--duv-font-ui);font-size:clamp(10px,.8vw,14px);font-weight:var(--duv-weight-action);line-height:1.4;letter-spacing:var(--duv-tracking-label);}
.duv-type-caption {font-family:var(--duv-font-ui);font-size:clamp(11px,.85vw,13px);font-weight:var(--duv-weight-body);line-height:1.45;}
.duv-type-action {font-family:var(--duv-font-ui);font-weight:var(--duv-weight-action);line-height:1.35;}
.duv-type-ambient {font-family:var(--duv-font-ui);font-weight:var(--duv-weight-ambient);line-height:1.4;}
.duv-type-prompt {font-family:var(--duv-font-ui);font-style:italic;font-weight:var(--duv-weight-body);}
.duv-type-note {font-family:var(--duv-font-note);font-size:clamp(13px,1vw,18px);line-height:var(--duv-leading-note);font-weight:400;}
.duv-type-note strong {font-family:inherit;font-weight:700;}

/* Active component mapping — Lettering v01, pp. 6, 10–13, 15, 17–20.
   Loaded last in both entry points. Sizes remain responsive as required by p13.
   These rules target the actual UI, including dialogs created after startup. */
.team { font-family:var(--duv-font-ui); font-weight:400; }
.team :is(button,input,textarea,select,option,summary,[contenteditable="true"]),
.team :is(.duvy-dialog,.directory-card,.policies-card,.wish-card,.documents-card) {
  font-family:var(--duv-font-ui);
}
.team :is(input,textarea,select,option) { font-weight:400; font-style:normal; }
.team :is(input,textarea)::placeholder { font-family:var(--duv-font-ui); font-weight:400; }

/* Reading: regular, natural word spacing; metadata uses the same family. */
.team :is(.welcome-copy,.birthday-copy,.office-copy,.lunch-intro,.area-detail,
 .policies-content,.wish-card,.directory-card,.duvy-dialog,.documents-content) p {
  font-family:var(--duv-font-ui); font-weight:400;
}
.team.is-board #team-board :is(#welcome-message,.birthday-copy > p,.office-copy > p,
 .lunch-description,.area-heading > p:not(.eyebrow),.area-project > p,
 .resource-card p,.area-resource-view,.area-document,.area-empty),
.team :is(.policy-body,.policies-empty p,.wish-help,.directory-description,
 .directory-pending,.duvy-message,.duvy-composer textarea,.documents-text) {
  font-weight:var(--duv-weight-body); line-height:1.65;
  letter-spacing:normal; word-spacing:normal;
}
.team.is-board #team-board :is(.welcome-copy,.birthday-copy,.office-copy,
 .lunch-description,.area-document,.area-resource-view) { text-align:left; }

/* Hierarchy: keep the documented intermediate weights; do not bold whole blocks. */
.team.is-board #team-board .board-header h1 {
  font-weight:var(--duv-weight-title); line-height:1.1;
}
.team.is-board #team-board :is(.welcome-copy h2,.birthday h2,.office-copy h2,.lunch-intro h2) {
  font-weight:var(--duv-weight-news); line-height:1.13;
}
.team.is-board #team-board .birthday h2 { font-weight:450; line-height:1.12; }
.team.is-board #team-board .area-heading h2 { font-weight:480; line-height:1.13; }
.team.is-board #team-board .area-resource-view h2 { font-weight:500; line-height:1.16; }
.team.is-board #team-board :is(.area-resource-view h3,.resource-card > strong,.area-project > strong),
.team :is(.weather-heading h3,.policies-empty h3) { font-weight:550; line-height:1.3; }
.team :is(.duvy-dialog h2,.policies-heading h2,.wish-heading h2,.directory-card h2) {
  font-weight:500; line-height:1.15;
}
.team.is-board #team-board :is(.welcome-project,.birthday h2 span) { font-weight:700; }

/* All textual actions use Semibold. Icon-only controls retain their line boxes. */
.team.is-board #team-board :is(.area-tab,.directory-open,#policies-open,#sign-out,
 #lunch-submit,.celebrate,.wish-open,.area-back,.area-card-action,.tutorial-concept),
.team :is(#sound-toggle,.dessert-like,.duvy-suggestions button,.documents-list button,
 .documents-download,.documents-back,.wish-save,.wish-cancel) {
  font-weight:var(--duv-weight-action); line-height:1.35;
}
.team.is-board #team-board .area-tab { letter-spacing:.02em; }
.team :is(.duvy-name.duvy-launch,.board-duvy.duvy-launch > span,.duvy-nest-label) {
  font-family:var(--duv-font-ui); font-weight:600; letter-spacing:.12em; line-height:1.4;
}
.team.is-board #team-board :is(.eyebrow,.news-kicker,.welcome-kicker,.condition-label),
.team :is(.duvy-eyebrow,.directory-kicker,.dessert-copy small) {
  font-weight:600; line-height:1.4;
}
.team.is-board #team-board :is(.welcome-kicker time,.news-kicker time,.lunch-date,
 .portrait figcaption,.option-copy small,.lunch-hint,.lunch-local-note,#lunch-status),
.team :is(.weather-date,.weather-period,.weather-source,.weather-stats dt,
 .duvy-subtitle,.duvy-source,.duvy-bottom,.policies-footer,.documents-meta,
 .directory-members,.wish-status) { font-weight:400; line-height:1.45; }
.team.is-board #team-board .header-build :is(span,strong,time) {
  font-family:var(--duv-font-ui); font-size:inherit; font-weight:400;
  line-height:1.4; letter-spacing:normal;
}
.team.is-board #team-board.has-duvy-nest .board-header > .header-build {
  font-size:9px; line-height:1.4;
}
.team.is-board #team-board.has-duvy-nest .board-header > .header-build :is(span,strong,time) {
  font-size:inherit; line-height:inherit;
}

/* Dark access and environmental phrase — pp.10,13,18. */
.team.is-login .member-form label {
  font-family:var(--duv-font-ui); font-style:italic; font-weight:400;
  line-height:1.45; letter-spacing:normal; color:var(--duv-light-muted);
}
.team.is-login .password-box input { font-family:var(--duv-font-ui); font-weight:400; }
.team.is-login .password-box input[type="text"] { letter-spacing:normal; }
.team.is-login .access-error { font-family:var(--duv-font-ui); font-weight:400; line-height:1.45; }
.team.is-login .phrase,
.team.is-board #team-board.has-duvy-nest .board-message .phrase {
  font-weight:var(--duv-weight-ambient); line-height:1.4;
}
.team.is-login .phrase-author,
.team.is-board #team-board.has-duvy-nest .board-message .phrase-author {
  font-family:var(--duv-font-ui); font-weight:400; line-height:1.4;
}

/* DUVY's explanatory type is UI; only the short illustrated notes are handwritten. */
.team.is-board #tutorial-title { font-weight:600; line-height:1.05; }
.team .tutorial-intro h3 { font-weight:500; line-height:1.2; }
.team .tutorial-intro .tutorial-pitch {
  font-family:var(--duv-font-ui); font-weight:400; line-height:1.6; color:var(--duv-ink);
}
.team .tutorial-kicker { font-weight:600; line-height:1.4; }
.team .tutorial-intro .tutorial-session-tip { font-weight:400; line-height:1.6; color:var(--duv-muted); }
.team .tutorial-note { color:var(--duv-blue-action); }
.team .tutorial-note strong {
  font-family:var(--duv-font-note); font-weight:700; font-style:normal; line-height:1.5;
}
.team .tutorial-note p {
  font-family:var(--duv-font-note); font-weight:400; font-style:normal; line-height:1.5;
}
.team .tutorial-arrows { stroke:var(--duv-blue-action); }

/* Figures keep their own hierarchy, regular dates never inherit a label's bold. */
.team :is(time,.news-position,.weather-temp,.weather-stats dd,.lunch-countdown,
 .dessert-total,.duvy-news-count,.tutorial-unread,.documents-zoom) { font-variant-numeric:tabular-nums; }
.team .dessert-total strong { font-weight:300; }
.team .weather-temp { font-weight:450; }
.team.is-board #team-board .lunch-countdown strong { font-weight:450; }
.team .tutorial-unread { font-weight:500; }
.team #news-position { font-variant-numeric:tabular-nums; }
.team.is-board #team-board .news-kicker time { color:var(--duv-muted); }
.team .documents-reader h3 { font-family:var(--duv-font-ui); font-weight:600; line-height:1.3; }
.team :is(.documents-status,.documents-reader figcaption,.documents-zoom) {
  font-family:var(--duv-font-ui); font-weight:400; line-height:1.45;
}
@media(max-width:550px) {
  .team.is-board #team-board.has-duvy-nest .board-header > .header-build { font-size:8px; }
}

/* Permanent button alignment: center labels and the icon+label group.
   Preserve each control's display mode, dimensions and mascot positioning. */
.team :is(button,[role="button"],input[type="button"],input[type="submit"],.duv-type-action){
 text-align:center!important;justify-content:center!important;align-items:center!important;
}
.team :is(button,[role="button"]) > :is(span,strong,small){
 text-align:center!important;
}

/* Tutorial message and conceptual action share the same central axis. */
.team .tutorial-intro .tutorial-pitch{font-weight:600;text-align:center;margin-inline:auto;text-wrap:balance}
.team .tutorial-intro .tutorial-session-tip{text-align:center;margin-inline:auto}
.team .tutorial-intro .tutorial-concept{position:relative;display:flex;width:fit-content;min-height:44px;margin-inline:auto;padding:11px 35px;text-align:center;line-height:1.35}
.team .tutorial-intro .tutorial-concept>span[aria-hidden]{position:absolute;right:13px;top:50%;transform:translateY(-50%);line-height:1}

.team .tutorial-intro .tutorial-pitch{width:var(--tutorial-subtitle-width,100%);max-width:100%;text-align:justify;text-align-last:center;text-wrap:pretty}

/* Localized labels wrap without shrinking the shared type scale. */
html:not([lang="es"]) .team.is-board #team-board .area-tab{white-space:normal;text-wrap:balance;line-height:1.25}
html:not([lang="es"]) .team.is-board #team-board .area-tab span{min-width:0;overflow-wrap:normal}

/* Shared close control: same circle, vector cross and brand states everywhere.
   Future dialogs must use button.duv-close with a translated aria-label. */
body.team button:is(.duv-close,.duvy-close,.directory-close,.wish-close,.meet-person-close,#policies-close){display:flex!important;align-items:center!important;justify-content:center!important;gap:0!important;box-sizing:border-box!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;flex:0 0 36px!important;padding:0!important;border:1px solid var(--duv-line)!important;border-radius:50%!important;background:var(--duv-cream-soft)!important;color:var(--duv-ink)!important;font-size:0!important;line-height:1!important;box-shadow:none!important;cursor:pointer;letter-spacing:0!important;transform:none!important}
body.team button:is(.duv-close,.duvy-close,.directory-close,.wish-close,.meet-person-close,#policies-close)::before{content:"";display:block;flex:0 0 16px;margin:0!important;padding:0!important;width:16px;height:16px;background:currentColor;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 6l12 12M18 6L6 18' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat}
body.team button:is(.duv-close,.duvy-close,.directory-close,.wish-close,.meet-person-close,#policies-close)>svg{display:none!important}
body.team button:is(.duv-close,.duvy-close,.directory-close,.wish-close,.meet-person-close,#policies-close):is(:hover,:active){background:var(--duv-blue-action)!important;border-color:var(--duv-blue-action)!important;color:var(--duv-white)!important;transform:none!important}
body.team button:is(.duv-close,.duvy-close,.directory-close,.wish-close,.meet-person-close,#policies-close):focus-visible{outline:2px solid var(--duv-blue)!important;outline-offset:3px!important}

body.team button:is(.duv-close,.duvy-close,.directory-close,.wish-close,.meet-person-close,#policies-close)::after{display:none!important;content:none!important}
