> ## Documentation Index
> Fetch the complete documentation index at: https://docs.canadava.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Airbus A350-900 Checklist

> Complete vACA A350-900 normal and abnormal checklists with ECAM flows, flap schedules, BTV autobrake, and emergency memory items

export const CockpitChecklist = ({sections = [], title, printLogoSrc = "/logo/light.svg", printNotice = "For flight-simulation training only - not for real-world aviation use."}) => {
  const allItems = sections.flatMap((s, si) => (s.items || []).map((_, ii) => `${si}-${ii}`));
  const [checked, setChecked] = useState({});
  const [isFullscreen, setIsFullscreen] = useState(false);
  const [backdropId] = useState(() => `cockpit-bd-${Math.random().toString(36).slice(2, 10)}`);
  const [printId] = useState(() => `cockpit-print-${Math.random().toString(36).slice(2, 10)}`);
  const fullscreenRootRef = useRef(null);
  const toggle = key => setChecked(prev => ({
    ...prev,
    [key]: !prev[key]
  }));
  const reset = () => setChecked({});
  const openFullscreen = () => setIsFullscreen(true);
  const closeFullscreen = () => setIsFullscreen(false);
  const clearPrintTarget = () => {
    if (typeof document === "undefined") return;
    const printNode = document.getElementById(printId);
    document.body.classList.remove("cockpit-printing");
    if (printNode) {
      printNode.setAttribute("data-print-active", "false");
    }
  };
  const printChecklist = () => {
    if (typeof window === "undefined" || typeof document === "undefined") return;
    const printNode = document.getElementById(printId);
    if (!printNode) return;
    printNode.setAttribute("data-print-active", "true");
    document.body.classList.add("cockpit-printing");
    window.addEventListener("afterprint", clearPrintTarget, {
      once: true
    });
    window.requestAnimationFrame(() => {
      window.print();
    });
  };
  const doneCount = Object.values(checked).filter(Boolean).length;
  const totalCount = allItems.length;
  useEffect(() => {
    if (typeof document === "undefined") return;
    [backdropId, printId].forEach(id => {
      const node = document.getElementById(id);
      if (node && node.parentNode !== document.body) {
        document.body.appendChild(node);
      }
    });
    return () => {
      [backdropId, printId].forEach(id => {
        const current = document.getElementById(id);
        if (current && current.parentNode) {
          current.parentNode.removeChild(current);
        }
      });
    };
  }, [backdropId, printId]);
  useEffect(() => {
    if (!isFullscreen) return;
    const onKey = e => {
      if (e.key === "Escape") setIsFullscreen(false);
    };
    document.addEventListener("keydown", onKey);
    const prevOverflow = document.body.style.overflow;
    document.body.style.overflow = "hidden";
    return () => {
      document.removeEventListener("keydown", onKey);
      document.body.style.overflow = prevOverflow;
    };
  }, [isFullscreen]);
  useEffect(() => {
    if (!isFullscreen) return;
    if (typeof window === "undefined") return;
    const root = fullscreenRootRef.current;
    if (!root) return;
    const MIN_SCALE = 0.7;
    const MAX_SCALE = 1;
    const MIN_LEADER_PX = 24;
    const GAP_PX = 16;
    const SAFETY_PX = 2;
    const measure = () => {
      root.style.setProperty("--cockpit-fs-font-scale", "1");
      void root.offsetWidth;
      const items = root.querySelectorAll(".cockpit-item");
      let worst = 1;
      items.forEach(item => {
        const label = item.querySelector(".cockpit-item-label");
        const value = item.querySelector(".cockpit-item-value");
        if (!label || !value) return;
        const cs = window.getComputedStyle(item);
        const padL = parseFloat(cs.paddingLeft) || 0;
        const padR = parseFloat(cs.paddingRight) || 0;
        const available = item.clientWidth - padL - padR;
        const needed = label.scrollWidth + value.scrollWidth + MIN_LEADER_PX + GAP_PX + SAFETY_PX;
        if (needed > available && available > 0) {
          const ratio = available / needed;
          if (ratio < worst) worst = ratio;
        }
      });
      const next = Math.max(MIN_SCALE, Math.min(MAX_SCALE, worst));
      root.style.setProperty("--cockpit-fs-font-scale", String(next));
    };
    measure();
    let raf = 0;
    const ro = new ResizeObserver(() => {
      cancelAnimationFrame(raf);
      raf = requestAnimationFrame(measure);
    });
    ro.observe(root);
    const backdrop = document.getElementById(backdropId);
    if (backdrop) ro.observe(backdrop);
    return () => {
      cancelAnimationFrame(raf);
      ro.disconnect();
    };
  }, [isFullscreen, sections, backdropId]);
  useEffect(() => clearPrintTarget, [printId]);
  const renderChart = (variant, rootRef) => <div ref={rootRef} className={`cockpit-checklist${variant === "fullscreen" ? " fullscreen" : ""}`}>
      <div className="cockpit-checklist-header">
        {title && <span className="cockpit-checklist-title">{title}</span>}
        <div className="cockpit-checklist-meta">
          <span className="cockpit-checklist-count">
            {doneCount}/{totalCount}
          </span>
          {doneCount > 0 && <button type="button" className="cockpit-checklist-btn" onClick={reset}>
              Reset
            </button>}
          <button type="button" className="cockpit-checklist-btn" onClick={printChecklist}>
            Print
          </button>
          {variant === "fullscreen" ? <button type="button" className="cockpit-checklist-btn" onClick={closeFullscreen} aria-label="Exit fullscreen">
              Close ✕
            </button> : <button type="button" className="cockpit-checklist-btn" onClick={openFullscreen} aria-label="Open fullscreen">
              Fullscreen ⤢
            </button>}
        </div>
      </div>

      <div className="cockpit-checklist-scroll">
        <div className="cockpit-checklist-grid">
          {sections.map((section, si) => <div key={si} className="cockpit-section">
              <div className="cockpit-section-header">
                <span className="cockpit-section-title">{section.title}</span>
                {section.subtitle && <span className="cockpit-section-subtitle">
                    {section.subtitle}
                  </span>}
              </div>
              <div className="cockpit-section-items">
                {(section.items || []).map((item, ii) => {
    const key = `${si}-${ii}`;
    const isChecked = !!checked[key];
    return <button key={key} type="button" className={`cockpit-item${isChecked ? " checked" : ""}${item.strong ? " strong" : ""}`} onClick={() => toggle(key)}>
                      <span className="cockpit-item-label">{item.label}</span>
                      <span className="cockpit-item-leader" aria-hidden="true" />
                      <span className="cockpit-item-value">{item.value}</span>
                    </button>;
  })}
              </div>
            </div>)}
        </div>
      </div>
    </div>;
  const renderPrintLayout = () => <div id={printId} className="cockpit-print-root" data-print-active="false" aria-hidden="true">
      <article className="cockpit-print-sheet">
        <header className="cockpit-print-header">
          <img className="cockpit-print-logo" src={printLogoSrc} alt="vACA" />
          <div className="cockpit-print-heading">
            {title && <h1>{title}</h1>}
            {printNotice && <div className="cockpit-print-notice">{printNotice}</div>}
          </div>
        </header>

        <div className="cockpit-print-grid">
          {sections.map((section, si) => <section key={si} className="cockpit-print-section">
              <div className="cockpit-print-section-header">
                <span className="cockpit-print-section-title">
                  {section.title}
                </span>
                {section.subtitle && <span className="cockpit-print-section-subtitle">
                    {section.subtitle}
                  </span>}
              </div>
              <div className="cockpit-print-section-items">
                {(section.items || []).map((item, ii) => <div key={`${si}-${ii}`} className={`cockpit-print-item${item.strong ? " strong" : ""}`}>
                    <span className="cockpit-print-item-label">
                      {item.label}
                    </span>
                    <span className="cockpit-print-item-leader" aria-hidden="true" />
                    <span className="cockpit-print-item-value">
                      {item.value}
                    </span>
                  </div>)}
              </div>
            </section>)}
        </div>
      </article>
    </div>;
  return <>
      {renderChart("inline")}
      {renderPrintLayout()}
      <div id={backdropId} className="cockpit-fullscreen-backdrop" data-open={isFullscreen ? "true" : "false"} onClick={e => {
    if (e.target === e.currentTarget) closeFullscreen();
  }}>
        {isFullscreen && renderChart("fullscreen", fullscreenRootRef)}
      </div>
    </>;
};

<div className="cover-image-frame">
  <Frame caption="Image source: Air Canada">
    <img src="https://mintcdn.com/virtualaircanada/iQJB1gDJzxYoDw5J/images/aops/fleet/a350.png?fit=max&auto=format&n=iQJB1gDJzxYoDw5J&q=85&s=3306f91427bd7111ec88a0de5d29d9f3" alt="Airbus A350-900" noZoom className="cover-image" width="800" height="460" data-path="images/aops/fleet/a350.png" />
  </Frame>
</div>

# Airbus A350‑900

**Comprehensive Normal & Abnormal Checklist ASOP**

<Info>For flight‑simulation training only - NOT for real‑world aviation use.</Info>

**Version 1.1 - 23 May 2026**

## Legend

* **PF** - Pilot Flying  **PM** - Pilot Monitoring
* *Italic* - Call‑outs  **Bold** - Memory item/trigger
* (A) - Airbus automatic call/alert  (M) - Manoeuvre

***

## Normal Operations Checklists

<CockpitChecklist
  title="A350 Normal Operations"
  sections={[
{
  title: "Power-Up & Acceptance",
  items: [
    { label: "Parking Brake", value: "SET", strong: true },
    { label: "Batteries 1 & 2", value: "AUTO (>25.5 V)" },
    { label: "External Power", value: "ON (IF AVAIL)" },
    { label: "APU", value: "START - ON BUS" },
    { label: "ADIRS (3)", value: "NAV - ALIGN (~7 MIN)", strong: true },
    { label: "FMGC INIT", value: "COMPLETED", strong: true },
    { label: "Oxygen Crew", value: "PRESS & FLOW" },
    { label: "Gear Pins / Covers", value: "REMOVED & STOWED" },
  ],
},
{
  title: "Preliminary Cockpit",
  items: [
    { label: "CVR", value: "TEST & ERASE", strong: true },
    { label: "Escape Ropes", value: "PRESENT BOTH SIDES", strong: true },
    { label: "ECAM Recall", value: "CLEAR (PRESS CLR 30 S)", strong: true },
    { label: "ELT", value: "ARMED", strong: true },
  ],
},
{
  title: "Cockpit Prep",
  subtitle: "Flows",
  items: [
    { label: "Overhead - Aft - Pedestal - MIP", value: "COMPLETE FLOW", strong: true },
    { label: "Fuel Pumps", value: "ON (QTY > MIN TO TRIP)" },
    { label: "Hydraulic (2 HYD + 1 ELEC)", value: "CHECKED" },
    { label: "Probes & Window Heat", value: "AUTO" },
    { label: "ACP Volumes", value: "SET 12 O'CLOCK" },
  ],
},
{
  title: "Cockpit Prep",
  subtitle: "Checklist (PM)",
  items: [
    { label: "Cockpit Prep Checklist", value: "PM INITIATES" },
    { label: "Gear Pins & Covers", value: "REMOVED" },
    { label: "ADIRS", value: "ALIGNED" },
    { label: "Fuel Qty", value: "___ KG, BALANCED" },
    { label: "Take-Off Briefing", value: "COMPLETED" },
    { label: "Checklist", value: "COMPLETE" },
  ],
},
{
  title: "Before Start",
  items: [
    { label: "Beacon", value: "ON" },
    { label: "Doors", value: "CLOSED & ARMED" },
    { label: "Thrust Levers", value: "IDLE" },
    { label: "Windows", value: "CLOSED" },
    { label: "Parking Brake", value: "SET" },
    { label: "T.O Speeds & Thrust", value: "_____ (BOTH)" },
    { label: "Pushback CLR", value: "RECEIVED" },
  ],
},
{
  title: "Engine Start",
  subtitle: "Automatic (ENG 1 First)",
  items: [
    { label: "APU Bleed", value: "CONFIRM ON" },
    { label: "Yellow Hyd Accumulator", value: "VERIFY PRESSURE (PARKING BRAKE)" },
    { label: "Mode Selector", value: "ENG MODE SEL - IGN/START" },
    { label: "Engine 1 (Left) First", value: "ENG 1 MASTER - ON", strong: true },
    { label: "Monitor", value: "N1/N2/N3 RISING, EGT RISE <20 S" },
    { label: "Engine 2 (Right)", value: "ENG 2 MASTER - ON (AFTER ENG 1 STABLE)", strong: true },
    { label: "Monitor", value: "N1/N2/N3 RISING, EGT NORMAL" },
    { label: "Complete", value: "AFTER BOTH AVAIL - MODE SEL NORM" },
    { label: "APU Bleed", value: "OFF (ENGINES PROVIDING BLEED)" },
  ],
},
{
  title: "After Start",
  subtitle: "Flows",
  items: [
    { label: "APU Bleed", value: "OFF (IF ANTI-ICE NOT REQUIRED)", strong: true },
    { label: "Ground Spoilers", value: "ARMED" },
    { label: "Rudder Trim", value: "ZERO" },
    { label: "Flight Controls", value: "FULL, FREE & NEUTRAL (M)" },
    { label: "Pitch Trim", value: "SET (AS COMPUTED)" },
    { label: "Flaps", value: "T/O CONFIG (1+F, 2, OR 3)" },
    { label: "Anti-Ice", value: "AS REQD" },
  ],
},
{
  title: "After Start",
  subtitle: "Checklist (PM)",
  items: [
    { label: "After-Start Checklist", value: "PM INITIATES" },
    { label: "Anti-Ice", value: "____" },
    { label: "ECAM Status", value: "CHECKED" },
    { label: "Pitch Trim", value: "__° (SET)" },
    { label: "Rudder Trim", value: "ZERO" },
    { label: "Flaps", value: "__ / ____" },
  ],
},
{
  title: "Taxi",
  items: [
    { label: "Taxi Speed Straight", value: "<= 25 KT" },
    { label: "Turns", value: "<= 10 KT" },
    { label: "Nosewheel Steering", value: "TILLER / RUDDER PEDALS" },
  ],
},
{
  title: "Before Take-Off",
  subtitle: "Up to the Line",
  items: [
    { label: "Flight Controls", value: "CHECKED" },
    { label: "FMA", value: "MAN FLEX/TOGA | SRS | RWY (NAV BLUE)" },
    { label: "Flaps", value: "CONFIRM SETTING (1+F, 2, OR 3)" },
    { label: "V-Speeds & FLEX", value: "ANNOUNCED" },
    { label: "Trim", value: "RE-CHECK" },
    { label: "Cabin", value: "SECURE" },
  ],
},
{
  title: "Before Take-Off",
  subtitle: "Below the Line",
  items: [
    { label: "Radar & Pred W/S", value: "ON & AUTO" },
    { label: "TCAS", value: "TA/RA" },
    { label: "PACK 1 & 2", value: "AS REQD" },
    { label: "Strobes", value: "ON" },
    { label: "Engine Mode SEL", value: "AS REQD (IGN/START FOR CONTAMINATED RWY)" },
    { label: "T.O CONFIG", value: "TESTED - NORMAL" },
    { label: "ECAM MEMO", value: "T.O NO BLUE" },
    { label: "Completion Call", value: "CABIN READY, BTL COMPLETE" },
  ],
},
{
  title: "T.O. Roll & Initial Climb",
  subtitle: "Call-Out Memory",
  items: [
    { label: "PM \"100 KNOTS\"", value: "PF \"CHECKED\"" },
    { label: "PM \"V1\" (A)", value: "-" },
    { label: "PM \"Rotate\"", value: "PF ROTATE TO SRS PITCH" },
    { label: "PM \"Positive Climb\"", value: "PF \"GEAR UP\"" },
  ],
},
{
  title: "After Take-Off / Climb",
  items: [
    { label: "THR RED ALT", value: "LVR CLB - SET CLIMB THRUST", strong: true },
    { label: "ACC ALT", value: "SRS DROPS, ACCELERATE & RETRACT FLAPS" },
    { label: "S-Speed", value: "FLAPS 1 - 0" },
    { label: "Packs", value: "ON (IF WERE OFF FOR T/O)" },
    { label: "10 000 FT", value: "\"10 000 - LIGHTS OFF\"" },
    { label: "At TRANS ALT (CLIMB)", value: "ALTIMETER STD - SET BOTH" },
  ],
},
{
  title: "Cruise (Hourly)",
  items: [
    { label: "Fuel Check", value: "FOB VS FPL (±300 KG)" },
    { label: "Systems", value: "ECAM MEMO GREEN" },
    { label: "Waypoint Sequence", value: "NEXT & ETA COMPARE" },
  ],
},
{
  title: "Descent Preparation",
  items: [
    { label: "ATIS / STAR", value: "RECEIVED & INSERTED" },
    { label: "Approach Briefing", value: "COMPLETED" },
    { label: "PERF APPR Page", value: "QNH, TEMP, WIND, TRANS ALT" },
    { label: "Landing Elevation", value: "SET ON PRESS PANEL" },
    { label: "Autobrake", value: "LO / MED / BTV IF EQUIPPED (AS REQUIRED)" },
  ],
},
{
  title: "Approach",
  items: [
    { label: "Seat Belts", value: "ON" },
    { label: "Baro Reference", value: "SET (QNH, BOTH)" },
    { label: "Minimums", value: "__ FT (SET, BOTH)" },
    { label: "Rwy Condition", value: "____" },
    { label: "Autobrake", value: "LO / MED / BTV IF EQUIPPED (AS REQUIRED)" },
    { label: "Engine Mode SEL", value: "AS REQUIRED" },
  ],
},
{
  title: "Landing",
  items: [
    { label: "Final Approach Config", value: "GEAR DOWN, CONF FULL (OR 3), SPLR ARM" },
    { label: "1 000 FT (IMC)", value: "PM \"STABILIZED\" OR \"GO AROUND\"" },
    { label: "500 FT (VMC)", value: "PM \"STABILIZED\" - FINAL SCAN" },
    { label: "50/40/30/20/10 FT", value: "(A) - FLARE" },
    { label: "(A) \"RETARD\" AT 20 FT (10 FT AUTOLAND)", value: "PF THRUST LEVERS - IDLE", strong: true },
  ],
},
{
  title: "After Landing",
  items: [
    { label: "Spoilers", value: "DISARM" },
    { label: "Flaps", value: "RETRACT" },
    { label: "Radar & Pred W/S", value: "OFF" },
    { label: "APU", value: "START (IF REQ)" },
    { label: "Nose Light", value: "TAXI" },
    { label: "RWY Turn Off Lights", value: "ON" },
    { label: "Landing Lights", value: "OFF" },
    { label: "Strobes", value: "OFF / AUTO" },
    { label: "Anti-Ice", value: "AS REQD" },
    { label: "Transponder", value: "AS REQD" },
    { label: "Completion Call", value: "AFTER-LANDING COMPLETE" },
  ],
},
{
  title: "Shutdown",
  items: [
    { label: "Parking Brake", value: "SET", strong: true },
    { label: "ENG Mode", value: "NORM" },
    { label: "ENG Master 1 & 2", value: "OFF" },
    { label: "Seat Belts", value: "OFF" },
    { label: "Beacon", value: "OFF" },
    { label: "Fuel Pumps", value: "OFF" },
    { label: "APU Bleed", value: "ON (IF APU RUNNING FOR GATE)" },
  ],
},
{
  title: "Securing the Aircraft",
  items: [
    { label: "ADIRS (3)", value: "OFF" },
    { label: "Oxygen", value: "OFF" },
    { label: "EMER EXIT Lights", value: "OFF" },
    { label: "Signs", value: "OFF" },
    { label: "APU", value: "OFF" },
    { label: "Batteries", value: "OFF" },
    { label: "Post-Flight Report", value: "SENT", strong: true },
  ],
},
]}
/>

### Cautions & Notes

<Warning>
  **Aborted Start** - ENG MASTER OFF, Dry crank 30 s then 30 s rest. ENG 1 started first per current Airbus SOP (effective 2025). Trent XWB is a three-spool engine (N1/N2/N3).
</Warning>

<Note>
  **Taxi** - Brake check at first movement *"Brakes checked, pressure \_\_\_"*.
</Note>

<Note>
  **Landing** - Reverse idle at 60 kt. Speed brake auto-deploy on touchdown. ECAM LDG MEMO must show all blue (LDG GEAR DN, SIGNS ON, CABIN READY, SPLRS ARM, FLAPS LDG). BTV (Brake To Vacate) is OPTIONAL equipment on the A350-900, not standard - operators may equip it. When fitted and selected, BTV provides automatic runway exit targeting; otherwise use LO / MED autobrake.
</Note>

***

## Abnormal / Memory Items (Extract)

### ENGINE FIRE or SEVERE DAMAGE (In‑Flight)

| Step | Action                                                                                |
| ---- | ------------------------------------------------------------------------------------- |
| 1    | **Thrust lever (affected)** -> IDLE                                                   |
| 2    | **ENG MASTER (affected)** -> OFF                                                      |
| 3    | Wait 10 s (FSOVs close, engine spools down)                                           |
| 4    | **ENG FIRE P/B (affected)** -> PUSH (isolates fuel, electrical, hydraulic, pneumatic) |
| 5    | **AGENT 1** -> DISCHARGE                                                              |
| 6    | If fire persists after 30 s -> **AGENT 2** -> DISCHARGE                               |

### EMERGENCY DESCENT

| Item                     | Action                        |
| ------------------------ | ----------------------------- |
| **Crew OXY masks**       | USE (100% / EMERGENCY)        |
| Communication            | ESTABLISH (interphone / boom) |
| If cabin alt > 14 000 ft | **PAX OXY** -> MAN ON         |
| **Speed Brake**          | FULL                          |
| **Thrust**               | IDLE                          |
| **Target Speed**         | VMO / MMO                     |
| **Target Alt**           | FL 100 or MSA                 |
| ATC                      | NOTIFY - Squawk 7700          |

*(See QRH for full procedure.)*

***

## Quick‑Reference Flap / Speed Schedule (A350‑900)

| Config    | Slat / Flap | VFE                     |
| --------- | ----------- | ----------------------- |
| Clean     | 0° / 0°     | 340 kt / M.89 (VMO/MMO) |
| CONF 1    | 20° / 0°    | 260 kt                  |
| CONF 1+F  | 20° / 9°    | 231 kt                  |
| CONF 2    | 23° / 17°   | 219 kt                  |
| CONF 3    | 23° / 26°   | 206 kt                  |
| CONF FULL | 23° / 36°   | 192 kt                  |

**Notes:**

* VLE / VLO: 250 kt / M.55
* Takeoff: CONF 1+F, 2, or 3 - Landing: CONF 3 or FULL
* BTV (Brake To Vacate) autobrake is OPTIONAL equipment on the A350-900, not standard; operators may equip it for landing

***

### Revision History

| Rev | Date        | Note                                                                                                                                                                                                                                     | Author    |
| --- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- |
| 1.0 | 29 Mar 2026 | Initial checklist issue                                                                                                                                                                                                                  | ACVA Team |
| 1.1 | 23 May 2026 | Accuracy pass: ENG 1 first per current Airbus SOP, 100 kt callout, FMA modes, RETARD callout, THR RED vs ACC ALT, ENG FIRE pushbutton step, STD QNH at TRANS ALT, 1000 ft STABILIZED, Trent XWB 3-spool corrected, BTV noted as optional | ACVA Team |

***

<Note>
  ### Disclaimer

  These checklists are **abridged adaptations** of Airbus public‑domain procedures for simulation. They do not replicate proprietary FCOM text and must **not** be used for commercial operations.
</Note>
