*{box-sizing:border-box}body{margin:0;font-family:Arial,Helvetica,sans-serif;background:#f3f4f6;color:#222}a{color:#159bd3;text-decoration:none}button,.button{border:1px solid #d0d0d0;background:#f6f6f6;border-radius:6px;padding:8px 11px;cursor:pointer;color:#333;display:inline-block}.primary{background:#348bd0!important;color:white!important;border-color:#348bd0!important}.danger{background:#d94343!important;color:white!important}.topbar{height:48px;background:#fff;border-bottom:1px solid #d8d8d8;display:flex;align-items:center;gap:16px;padding:0 18px;position:sticky;top:0;z-index:10;box-shadow:0 1px 4px #0001}.brand{font-weight:800;font-size:22px;color:#333}.topbar nav{display:flex;gap:4px}.topbar nav a,.gear{padding:12px 14px;color:#555;border-radius:6px}.topbar nav a.active,.topbar nav a:hover,.gear:hover{background:#eff6ff;color:#0878b8}.user-menu{margin-left:auto;position:relative}.user-menu>button{border:0;background:transparent;font-weight:700}.user-menu img{width:30px;height:30px;border-radius:50%;object-fit:cover}.user-dropdown{display:none;position:absolute;right:0;top:38px;background:#fff;border:1px solid #ccc;border-radius:8px;min-width:210px;box-shadow:0 8px 24px #0003;overflow:hidden}.user-menu:hover .user-dropdown{display:block}.user-dropdown a{display:block;padding:10px 12px;color:#333}.user-dropdown a:hover{background:#f2f7fb}.login{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(130deg,#e5f4ff,#f8f6e8)}.login-card{width:340px;background:#fff;border:1px solid #ddd;border-radius:14px;padding:28px;box-shadow:0 20px 50px #0002}.login-card h1{text-align:center}.login-card label,.panel label,.contact-form label,.event-form label{display:block;font-weight:700;margin:8px 0 4px}.login-card input,input,select,textarea{width:100%;border:1px solid #cfd4d8;border-radius:6px;padding:9px 10px;background:#fff;font:inherit}textarea{min-height:80px;resize:vertical}.flash{padding:10px 14px;margin:8px 0;border-radius:8px;border:1px solid}.flash.ok{background:#eefbe9;border-color:#90d884;color:#24621c}.flash.error{background:#fff0f0;border-color:#f0a0a0;color:#922}.app-shell{display:grid;grid-template-columns:290px 1fr;min-height:calc(100vh - 48px)}.sidebar{background:#f9fafb;border-right:1px solid #ddd;padding:14px 10px;overflow:auto}.sidebar h2{font-size:18px;margin:6px 8px 12px}.group-row{display:flex;justify-content:space-between;align-items:center;color:#333;padding:7px 6px;border-radius:6px;font-weight:700}.group-row:hover,.group-row.active{background:#e9f5ff}.group-row em{font-style:normal;color:#777;font-weight:400}.full{width:100%;text-align:center;margin-top:12px}.workspace{padding:10px 14px;overflow:auto}.contact-menu{display:flex;align-items:center;gap:12px;border-bottom:1px solid #cfd4d8;padding:4px 0 8px}.contact-menu strong{font-size:20px}.contact-menu span{margin-right:auto;color:#555}.contact-menu a{padding:8px 12px;border:1px solid #ddd;background:#f4f4f4;color:#555;border-radius:4px}.contact-menu a.active{background:#e1e6eb;font-weight:700}.alpha-search{display:flex;gap:12px;align-items:center;margin:8px 0}.letters{display:flex;flex-wrap:wrap;gap:2px}.letters a{display:inline-block;padding:3px 7px;background:#fffef3;border:1px solid #d4d4bc;color:#555;border-radius:4px;font-weight:700}.letters a.active{background:#e7ecf2;border-color:#999}.alpha-search form{display:flex;gap:6px;margin-left:auto;min-width:320px}.subline{color:#777;margin:5px 0}.cards{display:grid;grid-template-columns:repeat(3,minmax(260px,1fr));gap:12px}.contact-card{background:#fffdef;border:1px solid #e6e6d0;border-radius:9px;min-height:158px;padding:10px;box-shadow:0 1px 4px #0002}.card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.name-link{font-weight:800;color:#222;font-size:18px}.avatar{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:8px;background:#eee;color:#999;font-size:36px;object-fit:cover}.big-avatar,.photo-preview{display:inline-flex;align-items:center;justify-content:center;width:190px;height:190px;background:#f1f1f1;color:#aaa;font-size:110px;border:1px solid #e5e5e5;object-fit:cover}.company{font-weight:700;margin-top:4px}.contact-lines{margin:8px 0}.contact-lines div{margin:3px 0}.notes{line-height:1.28;margin:8px 0}.badge{display:inline-block;background:var(--badge,#aaa);color:white;border-radius:999px;padding:3px 8px;margin:2px;font-size:12px}.list-table{width:100%;border-collapse:collapse;background:#fff;margin-top:10px}.list-table th,.list-table td{border:1px solid #e0e0e0;padding:8px;text-align:left;vertical-align:middle}.list-table th{background:#f3f6f8}.placeholder{background:#fff;border:1px dashed #aaa;border-radius:12px;padding:40px;text-align:center;color:#777}.form-stage{min-height:calc(100vh - 48px);padding:18px;background:#2b2b2b22}.dialog-card{max-width:1120px;margin:auto;background:#fff;border-radius:8px;border:1px solid #bbb;box-shadow:0 12px 30px #0004;overflow:hidden}.dialog-title{display:flex;align-items:center;gap:12px;background:#fffef2;border-bottom:1px solid #ddd;padding:10px 14px;font-size:20px;position:sticky;top:48px;z-index:4}.dialog-title b{margin-right:auto}.icons{display:flex;align-items:center;gap:9px}.icons a,.icons button{font-size:20px;background:#fff;border:0;color:#555;padding:4px 8px}.icons form{display:inline;margin:0}.contact-form,.event-form{padding:18px}.contact-form-grid{display:grid;grid-template-columns:230px 1fr;gap:20px}.photo-box{text-align:center}.photo-button{display:block;background:#eee;border-radius:6px;margin-top:8px;padding:8px;cursor:pointer}.photo-button input{display:none}.fields>.triple,.triple{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}.title-row{display:grid;grid-template-columns:170px 1fr 120px;gap:10px;align-items:end}.check{display:flex!important;gap:8px;align-items:center;font-weight:700}.check input{width:auto}.tabs{display:flex;margin:20px 0 0}.tabs button{flex:1;border-radius:10px 10px 0 0;background:#fff;border:1px solid #ccc;border-bottom:0;font-weight:700}.tabs button.active{background:#fffef2}.tab-panel{display:none;border:1px solid #ccc;padding:12px;margin-bottom:16px}.tab-panel.active{display:block}.large{min-height:115px}.groups-editor{display:grid;grid-template-columns:1fr 52px 1fr;gap:10px;align-items:center;margin-top:16px}.groups-editor select{height:200px}.move-buttons{display:flex;flex-direction:column;gap:14px}.form-actions{display:flex;justify-content:flex-end;gap:10px;padding:14px;border-top:1px solid #e2e2e2;background:#fafafa}.save-only{margin:18px -18px -18px}.view-card{display:grid;grid-template-columns:220px 1fr;gap:24px;padding:22px}.view-card h1{margin-top:0}.page{padding:22px;max-width:1250px;margin:auto}.panel{background:#fff;border:1px solid #ddd;border-radius:10px;margin:14px 0;padding:16px;box-shadow:0 1px 4px #0001}.grid-form{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.inline-form{display:flex;gap:8px;align-items:end}.inline{display:inline}.two-panels{display:grid;grid-template-columns:1fr 1fr;gap:16px}.calendar-shell{grid-template-columns:260px 1fr}.mini{background:#fff;border:1px solid #ddd;border-radius:8px;padding:10px}.mini-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;text-align:center;margin-top:8px}.mini-grid a,.mini-grid span,.mini-grid strong{padding:5px;background:#fffef2}.cal-row{display:flex;justify-content:space-between;padding:8px;margin:5px 0;border-radius:5px;background:var(--cal);color:#fff;font-weight:700}.calendar-top{display:flex;align-items:center;justify-content:space-between;text-align:center}.calendar-top h2 small{display:block;font-size:13px;color:#777}.view-tabs{display:flex;justify-content:flex-end;gap:4px;margin:8px 0}.view-tabs span{padding:7px 12px;border:1px solid #ddd;background:#fffef2}.view-tabs .active{background:#e9edf2}.week-table{width:100%;border-collapse:collapse;background:#fff}.week-table th,.week-table td{border:1px solid #e6e6e6;min-height:58px;height:58px;vertical-align:top}.week-table thead th{background:#fff9bd;text-align:center}.week-table tbody th{width:55px;color:#888;background:#fbfbfb}.event-pill{display:block;background:var(--event,#1e66ff);color:white;border-radius:5px;padding:4px 6px;margin:2px;font-weight:700}.log{font-family:monospace;background:#f7f7f7;border-left:4px solid #aaa;margin:5px 0;padding:6px}
[data-theme=dark] body{background:#15191e;color:#e4e8ef}[data-theme=dark] .topbar,[data-theme=dark] .sidebar,[data-theme=dark] .panel,[data-theme=dark] .dialog-card,[data-theme=dark] .list-table,[data-theme=dark] .mini{background:#20262d;color:#e4e8ef;border-color:#3b4652}[data-theme=dark] input,[data-theme=dark] select,[data-theme=dark] textarea{background:#111820;color:#e4e8ef;border-color:#4b5866}[data-theme=dark] .contact-card{background:#232717;border-color:#4b4d2d}[data-theme=dark] .dialog-title,[data-theme=dark] .form-actions,[data-theme=dark] .tab-panel,[data-theme=dark] .tabs button{background:#1d232a}[data-theme=dark] a{color:#66c6ff}[data-theme=dark] .name-link{color:#f0f2f5}
@media(max-width:1000px){.app-shell{grid-template-columns:1fr}.sidebar{border-right:0;border-bottom:1px solid #ddd}.cards{grid-template-columns:1fr}.contact-form-grid,.view-card,.two,.two-panels{grid-template-columns:1fr}.grid-form,.fields>.triple,.triple,.title-row{grid-template-columns:1fr}.alpha-search{display:block}.alpha-search form{min-width:0;margin-top:8px}.topbar{gap:6px}.topbar nav a{padding:9px 7px}}

/* v0.5 corrections fiche contact */
.compact-stage{padding:8px 10px 18px;min-height:calc(100vh - 48px)}
.compact-stage .dialog-card{margin:0 auto 20px}
.compact-title{min-height:52px;padding:8px 14px}
.compact-title b{line-height:1.2}
.contact-form{padding:22px 24px 18px}
.contact-form-grid{align-items:start;margin-top:8px}
.title-row-v05{grid-template-columns:170px 1fr 170px;align-items:end;margin-bottom:8px}
.title-row-v05 label{margin-top:0}
.title-row-v05 select,.title-row-v05 input{margin-top:5px}
.identity-row{margin-top:6px}
.person-only[hidden],.contact-tabs button[hidden]{display:none!important}
.tab-panel.entity-tab-hidden{display:none!important}
.pro-fields{padding-bottom:12px;margin-bottom:6px;border-bottom:1px solid #ececec}
.photo-box{padding-top:2px}
.photo-preview{margin-top:0}
.contact-dialog .form-actions{position:sticky;bottom:0;z-index:3}
@media(max-width:1000px){.title-row-v05{grid-template-columns:1fr}.compact-stage{padding:0}.contact-form{padding:16px}.compact-title{top:48px}}

/* v0.6 corrections ergonomie affichage contacts */
.alpha-search{display:block;margin:8px 0 4px}
.alpha-search .letters{width:100%}
.contacts-subline{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:6px 0 12px;color:#777}
.search-inline{display:flex;align-items:center;gap:6px;margin-left:auto;min-width:360px}
.search-inline input{min-width:260px}
.search-inline button{white-space:nowrap}
input[type=checkbox]{width:auto!important;min-width:0!important;padding:0!important}
.card-head{align-items:flex-start}
.card-head .card-select{display:flex!important;align-items:flex-start;gap:5px;margin:0;line-height:1.2;flex:1;min-width:0}
.card-head .contact-check{margin:2px 0 0 0;flex:0 0 auto}
.card-head .name-link{display:inline;line-height:1.2}

/* Les titres de fiche ne doivent pas être sticky : sinon une zone vide apparaît au-dessus
   et le contenu de la fiche passe sous la barre de titre quand on revient sur la page. */
.form-stage .dialog-title{position:relative!important;top:auto!important;min-height:0!important;height:auto!important;padding:12px 16px!important}
.compact-stage{padding-top:10px!important}
.compact-stage .dialog-card{margin-top:0!important}
.contact-dialog .contact-form{padding-top:22px!important}
.contact-dialog .contact-form-grid{margin-top:0!important;align-items:start}
.view-card{padding-top:28px!important}
.dialog-title + .flash{margin-top:10px}

@media(max-width:1000px){
  .contacts-subline{display:block}
  .search-inline{min-width:0;margin-top:8px;width:100%}
  .search-inline input{min-width:0;flex:1}
}


/* v0.7 correction bouton de modification fiche complète */
.view-actions{justify-content:flex-end;margin-top:0}
.view-actions .button{min-width:120px;text-align:center}

/* v0.8 affichage adresse : pas de département/région ni pays, adresse multi-lignes */
.address-line a,.address-link{display:inline-block;line-height:1.2;vertical-align:top}
.tab-panel>label textarea{min-height:95px}

/* v0.9 : affichage fiches et formulaire contact */
.contact-lines > div{margin:8px 0}
.contact-lines > div:first-child{margin-top:0}
.notes{white-space:normal;line-height:1.28;margin:8px 0}
.title-row-v09{grid-template-columns:220px 1fr 190px;align-items:end;margin-bottom:8px}
.title-row-v09 label{margin-top:0}
.title-row-v09 select,.title-row-v09 input{margin-top:5px}
.entity-type-field[hidden],#customTitle[hidden]{display:none!important}
.quad{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.address-admin-row{margin-top:8px}
@media(max-width:1000px){.title-row-v09,.quad{grid-template-columns:1fr}}
.title-row-form{display:contents}

/* v1.0 : boutons de configuration et champs personnalisés */
.fit-button{width:auto!important;min-width:120px;justify-self:start;align-self:end;text-align:center}
.custom-fields-existing{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:8px 0}
.custom-fields-existing small{font-weight:400;color:#777;margin-left:4px}
.custom-fields-new{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:8px 0}
.custom-field-row{display:flex;align-items:end;gap:6px}
.custom-field-row label{flex:1;margin:0!important}
.custom-field-row button{margin-bottom:0}
.add-field-button{margin:4px 0 12px;width:auto!important;display:inline-block}
.custom-label{color:#555;font-weight:700}
@media(max-width:1000px){.custom-fields-existing,.custom-fields-new{grid-template-columns:1fr}.fit-button{justify-self:stretch}}

/* v1.1 */
.import-panels .button{margin-bottom:18px}
.import-form{margin-top:18px;padding-top:14px;border-top:1px solid #e8e8e8}
.file-import-row{display:flex;align-items:center;gap:10px;margin-top:10px}
.file-import-row input[type=file]{flex:1;width:auto!important}
.file-import-row button{white-space:nowrap;width:auto!important}
.import-form select[multiple]{min-height:130px}
.identity-row-lite{grid-template-columns:1fr 1fr 1fr}
#tab-other,.contact-tabs button[data-tab="other"]{display:none!important}
.config .fit-button{width:auto!important;min-width:118px;max-width:max-content}
.title-row-form button.primary,.list-table button.primary{width:auto!important;min-width:105px}


/* v1.15 : version, export par groupes et imports refusés */
.app-version{font-size:12px;font-weight:700;color:#777;background:#f0f2f5;border:1px solid #dfe3e8;border-radius:999px;padding:2px 7px;margin-left:-8px}
.export-form{margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid #e8e8e8}
.export-form select[multiple]{min-height:130px}
.import-rejects{margin-top:18px;padding-top:12px;border-top:1px solid #e8e8e8}
.reject-title{display:flex;align-items:center;justify-content:space-between;gap:12px}
.reject-title h3{margin:0}
.reject-title form{margin:0}
[data-theme=dark] .app-version{background:#2b333d;border-color:#44505d;color:#c9d1dc}

/* v1.19 : calendrier jour/semaine/mois/année, saints, anniversaires, répétitions */
.calendar-workspace{padding:10px 18px 28px;min-width:0}.calendar-sidebar .mini-title{display:flex;align-items:center;justify-content:space-between;gap:8px}.mini-grid a.today,.year-mini-grid a.today,.month-cell.today .date-num{outline:2px solid #ff8b4a;outline-offset:1px}.mini-grid a.selected{background:#e9f3ff;font-weight:800}.view-tabs a{padding:7px 12px;border:1px solid #ddd;background:#fffef2;color:#555}.view-tabs a.active{background:#e9edf2;font-weight:700;color:#333}.calendar-grid{background:#fff;border:1px solid #dedede}.week-grid{display:grid;grid-template-columns:58px repeat(7,minmax(0,1fr));grid-template-rows:auto var(--grid-height);overflow-x:auto}.day-grid{display:grid;grid-template-columns:58px minmax(0,1fr);grid-template-rows:var(--grid-height);overflow-x:auto}.week-corner,.day-head{background:#fff9bd;border-right:1px solid #e5e5cf;border-bottom:1px solid #e5e5cf;min-width:0}.day-head{padding:6px 4px;text-align:center;min-height:72px}.day-head a{display:block;font-weight:800;color:#555}.day-head small{display:block;color:#777;min-height:16px}.day-head.today{box-shadow:inset 0 0 0 2px #ff8b4a}.all-day-row,.day-all-day{display:flex;flex-direction:column;gap:2px;margin-top:4px}.day-all-day{background:#fff;border:1px solid #ddd;border-bottom:0;padding:6px 8px}.time-column{position:relative;background:#fbfbfb;border-right:1px solid #e0e0e0;height:var(--grid-height);color:#888;font-size:12px}.time-column span{position:absolute;right:6px;transform:translateY(-50%)}.day-column{position:relative;height:var(--grid-height);min-width:0;background:#fffef3;border-right:1px solid #e7e7e7}.day-column.weekend{background:#fffccf}.day-column.today{box-shadow:inset 0 0 0 2px #ff8b4a}.hour-line{position:absolute;left:0;right:0;border-top:1px solid #e8e8e8;height:0}.event-block{position:absolute;left:3px;right:3px;top:var(--top);min-height:var(--height);height:var(--height);overflow:hidden;background:var(--event,#1e66ff);color:#fff!important;border-radius:6px;padding:5px 7px;line-height:1.18;font-size:12px;font-weight:700;box-shadow:0 1px 3px #0002}.event-block b{display:block;margin-bottom:2px}.event-block span{display:block;white-space:normal;overflow:visible;text-overflow:clip}.event-chip,.all-day-chip,.month-event-chip{display:block;background:var(--event,#1e66ff);color:#fff!important;border-radius:5px;padding:3px 6px;margin:2px 0;font-size:12px;line-height:1.2;white-space:normal}.event-chip b,.all-day-chip b,.month-event-chip b{font-weight:800;margin-right:4px}.all-day-chip.birthday,.month-event-chip.birthday{background:#f59e0b}.month-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:1px;background:#e0e0e0;border:1px solid #e0e0e0}.month-grid>strong{background:#fff9bd;padding:7px;text-align:center;color:#555}.month-cell{min-height:142px;background:#fffef3;padding:5px;min-width:0;position:relative}.month-cell.weekend{background:#fffccf}.month-cell.outside{opacity:.48}.month-cell .date-num{display:inline-block;font-weight:800;color:#777;font-size:18px}.month-cell small{display:block;color:#777;min-height:16px;line-height:1.1}.more-events{display:block;color:#555;font-size:12px;margin-top:2px}.year-grid{display:grid;grid-template-columns:repeat(3,minmax(260px,1fr));gap:14px}.year-month{background:#fff;border:1px solid #ddd;padding:10px}.year-month.active{outline:2px solid #ff8b4a}.year-month h3{text-align:center;margin:0 0 8px;font-size:15px}.year-mini-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;text-align:center}.year-mini-grid strong{font-size:12px;color:#333;padding:3px}.year-mini-grid a,.year-mini-grid span{padding:5px 2px;background:#fffef2;color:#333;border:1px solid #eee;min-height:25px}.year-mini-grid a.has-events{background:#dff4ff;border-color:#95d9ff;font-weight:800}.muted{color:#777}.event-dialog{max-width:1120px}.event-tabs{margin-top:0}.event-tabs button{font-size:18px}.event-date-row{align-items:end}.repeat-line{display:flex;gap:10px;align-items:center;max-width:330px;margin:12px auto}.repeat-line input{width:82px}.weekday-row{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;margin:16px 0}.repeat-end{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;align-items:end}.repeat-master{font-size:18px}.event-url-row{align-items:end}[data-theme=dark] .calendar-grid,[data-theme=dark] .year-month,[data-theme=dark] .day-all-day{background:#20262d;border-color:#3b4652}[data-theme=dark] .day-head,[data-theme=dark] .month-grid>strong,[data-theme=dark] .week-corner{background:#30311f}[data-theme=dark] .day-column,[data-theme=dark] .month-cell,[data-theme=dark] .year-mini-grid a,[data-theme=dark] .year-mini-grid span{background:#1d232a}[data-theme=dark] .day-column.weekend,[data-theme=dark] .month-cell.weekend{background:#272712}[data-theme=dark] .time-column{background:#1a2027;border-color:#3b4652}[data-theme=dark] .hour-line{border-color:#38424e}@media(max-width:1100px){.year-grid{grid-template-columns:1fr 1fr}.month-cell{min-height:115px}.repeat-end{grid-template-columns:1fr}}@media(max-width:760px){.week-grid{grid-template-columns:48px repeat(7,120px)}.year-grid{grid-template-columns:1fr}.month-grid{grid-template-columns:repeat(7,110px);overflow:auto}.calendar-workspace{padding:8px}.event-block{font-size:11px}}
