Puoi utilizzare la differenza dei numeri di riga per definire i gruppi:
select Shade, count(*) as amount
from (select t.*,
row_number() over (order by level) as seqnum,
row_number() over (partition by shade order by level) as seqnum_s
from t
) t
group by Shade, (seqnum - seqnum_s);
È un po' difficile spiegare perché funziona. Se guardi i risultati della sottoquery, diventa ovvio perché la differenza tra i due row_number()
i valori identificano gruppi sequenziali.