/** * ios-components.css * iOS-style компоненты: карточки, списки, аккордеоны, badges * * Зависимости: * - variables.css (--feed-radius, --feed-shadow, --navbar-h и др.) * - common.css (.btn-icon используется отсюда, не дублируется) */ /* ───────────────────────────────────────────────────────────── BASE CARD ────────────────────────────────────────────────────────────── */ .ios-card { border: 1px solid color-mix(in srgb, var(--bs-border-color), transparent 10%); border-radius: var(--feed-radius); background: var(--bs-body-bg); box-shadow: var(--feed-shadow); transition: box-shadow .18s ease, transform .18s ease, border-color .18s ease; overflow: hidden; } .ios-card:hover { box-shadow: var(--feed-shadow-hover); transform: translateY(-1px); } /* ───────────────────────────────────────────────────────────── HEADER ────────────────────────────────────────────────────────────── */ .ios-header { position: sticky; top: var(--navbar-h, 0px); z-index: 5; padding: var(--space-2) 0; /* 16px сверху/снизу - унифицировано */ backdrop-filter: saturate(180%) blur(12px); background: color-mix(in srgb, var(--bs-body-bg) 85%, transparent); border-bottom: none !important; } .ios-title { font-weight: 800; letter-spacing: -.01em; } .row.g-ios { align-items: flex-start; } /* ───────────────────────────────────────────────────────────── AVATAR ────────────────────────────────────────────────────────────── */ .ios-ava, .ios-ava--ph { display: grid; place-items: center; background: var(--bs-tertiary-bg); color: var(--bs-secondary-color); font-size: 3rem; line-height: 1; width: 100%; height: 100%; border-radius: 28px; border: 1px solid color-mix(in srgb, var(--bs-border-color), transparent 20%); } .ava-wrap { position: relative; width: 132px; height: 132px; margin: 0 auto var(--space-2); display: block; } /* ───────────────────────────────────────────────────────────── NAME & ROLE ────────────────────────────────────────────────────────────── */ .ios-name { font-weight: 800; font-size: 1.25rem; } .ios-role { font-size: .9rem; color: var(--bs-secondary-color); } /* ───────────────────────────────────────────────────────────── CHIPS ────────────────────────────────────────────────────────────── */ /* Base .chip определён в common.css */ .chips { display: flex; flex-wrap: wrap; gap: var(--space-1); /* 8px между chips - унифицировано */ } /* ───────────────────────────────────────────────────────────── COLLAPSE TRIGGERS ────────────────────────────────────────────────────────────── */ .ios-collapse-trigger { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); padding: var(--space-1) var(--space-2); cursor: pointer; border-radius: 14px; border: 1px solid color-mix(in srgb, var(--bs-border-color), transparent 20%); background: color-mix(in srgb, var(--bs-body-bg) 94%, transparent); color: var(--bs-body-color); } .ios-collapse-caret { transition: transform .25s ease; } .ios-collapse-trigger[aria-expanded="true"] .ios-collapse-caret { transform: rotate(180deg); } .ios-collapse-trigger + .collapse { margin-top: 0 !important; } .ios-collapse-trigger + .collapse > .ios-list, .ios-collapse-trigger + .collapse > .chips { margin-top: .5rem; } .collapsing { overflow: hidden; transition: height .35s ease; } /* ───────────────────────────────────────────────────────────── LISTS ────────────────────────────────────────────────────────────── */ .ios-list { border-radius: 14px; overflow: hidden; background: var(--bs-body-bg); border: 1px solid color-mix(in srgb, var(--bs-border-color), transparent 10%); } .ios-cell { display: flex; align-items: center; gap: .75rem; padding: .85rem 1rem; border-bottom: 1px solid color-mix(in srgb, var(--bs-border-color), transparent 10%); } .ios-cell:last-child { border-bottom: 0; } .ios-cell i { width: 1.25rem; text-align: center; opacity: .9; } .ios-cell a { text-decoration: none; color: inherit; } .ios-section-title { font-weight: 700; font-size: 1rem; margin-bottom: .5rem; } .rounded-ios { border-radius: 14px !important; } /* ───────────────────────────────────────────────────────────── DEPARTMENTS LIST ────────────────────────────────────────────────────────────── */ .ios-cell.dept-item { justify-content: space-between; } .ios-cell.dept-head { border-left: 0; background: transparent; } .dept-line { display: flex; align-items: center; gap: .5rem; } .dept-name { font-weight: 700; } .dept-role { color: var(--bs-secondary-color); } /* ───────────────────────────────────────────────────────────── BADGES (HEAD & GEAR) ────────────────────────────────────────────────────────────── */ .badge-head { display: inline-flex; align-items: center; gap: var(--space-1); padding: var(--space-1); border-radius: 999px; background: color-mix(in srgb, var(--bs-warning) 15%, var(--bs-body-bg)); color: color-mix(in srgb, var(--bs-warning) 60%, black 0%); border: 1px solid color-mix(in srgb, var(--bs-warning) 35%, transparent); font-weight: 700; font-size: .8rem; line-height: 1; white-space: nowrap; } .badge-head .bi { font-size: .95rem; line-height: 1; } .badge-gear { display: inline-flex; align-items: center; gap: var(--space-1); padding: var(--space-1); border-radius: 999px; cursor: pointer; background: color-mix(in srgb, var(--bs-primary) 15%, var(--bs-body-bg)); color: color-mix(in srgb, var(--bs-primary) 65%, black 0%); border: 1px solid color-mix(in srgb, var(--bs-primary) 35%, transparent); font-weight: 700; font-size: .8rem; line-height: 1; white-space: nowrap; } .badge-gear .bi { font-size: .95rem; line-height: 1; } .badge-gear:hover { background: color-mix(in srgb, var(--bs-primary) 20%, var(--bs-body-bg)); } @media (max-width: 420px) { .badge-head .lbl, .badge-gear .lbl { display: none; } } /* ───────────────────────────────────────────────────────────── ACCORDION (IOS-ACC) ────────────────────────────────────────────────────────────── */ .ios-acc { border: 1px solid color-mix(in srgb, var(--bs-border-color), transparent 20%); border-radius: 14px; background: var(--bs-body-bg); overflow: hidden; } .ios-acc + .ios-acc { margin-top: var(--space-2); /* 16px между аккордеонами - унифицировано */ } .ios-acc .ios-collapse-trigger { border: 0; border-radius: 0; background: transparent; width: 100%; padding: var(--space-2); /* 16px - унифицировано */ } .ios-acc .ios-collapse-trigger:focus { box-shadow: none; } .ios-acc .collapse { margin: 0 !important; } .ios-acc .ios-list { border: 0; border-radius: 0; } .ios-acc .chips { margin: 0; } .ios-acc .ios-acc-body { padding: var(--space-2); /* 16px - унифицировано */ border-top: 1px solid color-mix(in srgb, var(--bs-border-color), transparent 20%); } .ios-acc .ios-collapse-trigger + .collapse { margin-top: 0 !important; } .ios-acc .ios-acc-body { border-top: 0; } /* ───────────────────────────────────────────────────────────── ACTIVITY BLOCK ────────────────────────────────────────────────────────────── */ #activity .p-4 { padding: 0 !important; } #activity .ios-section-title { padding: var(--space-2) var(--space-2) var(--space-1) !important; margin: 0 !important; } #activity .activity-feed { margin: 0 !important; } #activity .activity-feed .feed-card { width: 100% !important; max-width: none !important; border: 0 !important; box-shadow: none !important; border-radius: 0 !important; margin: 0 !important; } #activity .activity-feed { display: flex; flex-direction: column; gap: 1rem; } #activity .activity-feed .feed-stream { display: flex; flex-direction: column; gap: 1rem; } #activity .activity-feed .row > * { flex: 0 0 100% !important; max-width: 100% !important; } #activity .feed-actions { border-top: 0 !important; } #activity .collapse .bg-body-tertiary.border { border: 0 !important; } /* ───────────────────────────────────────────────────────────── SKILLS UI ────────────────────────────────────────────────────────────── */ #skillsBlock[data-editable="1"] .chip.chip-add { display: inline-flex; align-items: center; cursor: pointer; border-style: dashed; } #skillsBlock[data-editable="1"] .chip.chip-add.pulse { transform: scale(.97); transition: transform .15s ease; } #skillsBlock[data-editable="1"] .chip.chip-add .bi { font-size: .95rem; } .chip.chip-skill { position: relative; padding: .35rem .65rem; } .chip.chip-skill .lbl { transition: opacity .15s ease; } .chip.chip-skill .chip-del-btn { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: transparent; border: 0; padding: 0; margin: 0; cursor: pointer; color: var(--bs-danger); font-size: 1rem; line-height: 1; visibility: hidden; opacity: 0; transition: opacity .15s ease; z-index: 1; } .chip.chip-skill .chip-del-btn .bi { pointer-events: none; } #skillsBlock[data-editable="1"] .chip.chip-skill:hover .lbl { opacity: 0; } #skillsBlock[data-editable="1"] .chip.chip-skill:hover .chip-del-btn, #skillsBlock[data-editable="1"] .chip.chip-skill:focus-within .chip-del-btn { visibility: visible; opacity: 1; } .skills-empty { color: var(--bs-secondary-color); font-size: .875rem; margin-right: .25rem; } /* ───────────────────────────────────────────────────────────── DEPT INLINE EDITOR ────────────────────────────────────────────────────────────── */ .dept-edit-btn { width: 32px; height: 32px; padding: 0; display: grid; place-items: center; border-radius: 999px; border: 1px solid color-mix(in srgb, var(--bs-border-color), transparent 30%); background: color-mix(in srgb, var(--bs-body-bg) 94%, transparent); } .dept-edit-btn:hover { background: color-mix(in srgb, var(--bs-body-bg) 88%, transparent); } .dept-editor-wrap { flex: 0 0 100%; width: 100%; margin-top: .5rem; } .dept-editor form { display: flex; align-items: center; gap: .5rem; } .dept-role-select { min-width: 180px; } /* полностью прячем роль, когда открыт редактор */ .dept-item.is-editing .dept-role { display: none !important; } /* Flex-управление элементами */ .dept-item > .d-flex { flex: 0 1 auto; flex-wrap: wrap; justify-content: flex-end; gap: .35rem .5rem; max-width: 100%; } .dept-line { min-width: 0; } .badge-head, .badge-gear { flex: 0 0 auto; } .ios-cell { flex-wrap: wrap; } @media (max-width: 576px) { .badge-head .lbl, .badge-gear .lbl { display: none; } } /* ───────────────────────────────────────────────────────────── CONTAINER ────────────────────────────────────────────────────────────── */ .container-xxl { max-width: 1820px; padding-inline: var(--bs-gutter-x, var(--space-2)); }